【发布时间】:2018-10-23 18:03:05
【问题描述】:
当我尝试用名称“name”声明一个变量时,它不起作用,它给了我一个错误,这个there are errors. 有以下解释
(22) wrong parameters: MOV BL, name
(22) probably no zero prefix for hex; or no 'h' suffix; or wrong addressing; or undefined var: name
这是我的代码
; multi-segment executable file template.
data segment
; add your data here!
pkey db "press any key...$"
name db "myname"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
MOV BL, name
;;;;;
lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
问题是,如果我尝试使用任何其他变量名称,它可以工作,namee、nname、name_,但大写字母不起作用,我尝试在整个互联网上搜索,但要么我搜索错了,或者我不知道要搜索什么。
【问题讨论】:
-
你可以尝试
MOV BL, BYTE PTR [name]获取name的第一个字节。 -
@zx485 :在 MASM(包括 TASM/EMU8086 等)中,[] 在没有
offset关键字的情况下被暗示。所以name实际上是[name]。 MASM 可以从目标寄存器中推断出大小(它还与name的DB定义相匹配)。最终结果是MOV BL, name、MOV BL, [name]和MOV BL, BYTE PTR [name]都是一样的。为了便于阅读,我会使用[]。