当我尝试声明名称为“ 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_
,但是大写字母不起作用,我尝试搜索所有通过互联网,但是我搜索错误,或者我不知道要搜索什么。
答案 0 :(得分:6)
NAME
是 MASM 指令的名称,并被视为保留字。使用保留字作为变量名将导致问题。特别是NAME
指令并没有做任何有用的事情,因为文档表明 MASM 只会忽略它。来自MASM manual:
NAME modulename
忽略。
在 EMU8086 中,除了将name
变量重命名为其他名称外,没有其他解决方法。
在 MASM 5.x +中,您可以通过以下方式使用OPTION
指令来解决此问题:
OPTION NOKEYWORD:<NAME>
OPTION NOKEYWORD
在 MASM 手册中是这样定义的:
MASM保留字除预定义外不区分大小写 符号(请参阅本章后面的“预定义符号”)。
如果您将保留字用作变量,则汇编器会生成错误, 代码标签或源代码中的其他标识符。但是,如果 您需要将保留字用于其他目的,即OPTION NOKEYWORD指令可以有选择地将单词的状态禁用为 保留字。
例如,要删除STR指令,请选择MASK 运算符,并且MASM可以识别该单词集中的NAME指令 作为保留,在程序的代码段中使用此语句 在第一次引用STR,MASK或NAME之前:
OPTION NOKEYWORD:<STR MASK NAME>