为什么程序集 8086 中不允许使用变量名“name”?

2023-12-06

当我尝试声明一个名为“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_,但大写不起作用,我尝试在整个互联网上搜索,但要么我搜索错误,要么我不知道要搜索什么。


NAME是一个名字MASM指令并被视为保留字。使用保留字作为变量名会导致问题。这NAME正如文档所示,指令尤其没有做任何有用的事情MASM只是忽略它。来自MASM manual:

NAME modulename

Ignored.

In EMU8086除了重命名之外没有任何真正的方法可以解决这个问题name变量为其他东西。

In MASM5.x+ 您可以使用以下方法解决此问题OPTION这样指令:

OPTION NOKEYWORD:<NAME>

OPTION NOKEYWORD是这样定义的MASM manual:

MASM 保留字不区分大小写,预定义的除外 符号(请参阅本章后面的“预定义符号”)。

如果使用保留字作为变量,汇编器会生成错误, 代码标签,或源代码中的其他标识符。然而,如果 您需要将保留字用于其他目的,即 OPTION NOKEYWORD 指令可以有选择地禁用单词的状态 保留字。

例如,要删除 STR 指令,MASK 运算符,以及 MASM 识别的单词集中的 NAME 指令 作为保留,请在程序的代码段中使用此语句 在第一次引用 STR、MASK 或 NAME 之前:

OPTION NOKEYWORD:<STR MASK NAME>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么程序集 8086 中不允许使用变量名“name”? 的相关文章

随机推荐