我在汇编程序(8086)中仅明确 EQU 指令时遇到了麻烦。
abc EQU xyz
当在xyz中找到代码时,无论xyz代表什么,值等等,EQU是否会从字面上交换abc?
即我可以写吗?
varA EQU [bp+4]
mov ax, varA
还有一个问题是EQU是全局访问的,即我可以在过程之外以及在使用它的过程中定义EQU吗?
最佳答案
EQU
项不是变量,它们不占用任何内存空间:
EQU
引用一个常量值时,它将成为该值的同义词。即使您尝试更改,该值也不会被覆盖。 EQU
引用另一个变量时,它将成为该变量的同义词,因此,与该同义词有关的所有事情都将在该变量中发生。 复制并粘贴EMU8086中的下一个代码,然后运行:
.model small
.stack 100h
.data
xyz DW 2016 ;◄■■■ ABC IS NOT A VARIABLE, IT IS
abc EQU xyz ; JUST A SYNONYM FOR XYZ.
pqr EQU 10 ;◄■■■ PQR IS NOT A VARIABLE, IT IS
; JUST A SNYNONYM FOR NUMBER 10.
varA EQU [bp+2] ;◄■■■ BP POINTS TO GARBAGE.
.code
mov ax, @data
mov ds, ax
mov abc, 25 ;◄■■■ XYZ BECOMES 25!!!!
mov pqr, 999 ;◄■■■ NO ERROR, BUT THE VALUE WILL NOT CHANGE.
mov ax, pqr ;◄■■■ AX IS NOT 999, AX=10.
mov si, varA ;◄■■■ GARBAGE.
mov bp, sp
mov si, varA ;◄■■■ DIFFERENT GARBAGE.
push ax ;◄■■■ PUSH 10.
call my_proc
mov ax, NUMBER ;◄■■■ YES, EQUS ARE GLOBAL!!! (AX=0B9H).
mov ax, 4c00h
int 21h
;-----------------------------------------
my_proc proc
mov bp, sp
mov si, varA ;◄■■■ WRONG VALUE (ANOTHER GARBAGE).
mov si, [bp+2] ;◄■■■ PROPER VALUE (10).
varB EQU [bp+2]
mov si, varB ;◄■■■ WRONG AGAIN.
NUMBER EQU 0b9h ;◄■■■ DEFINE EQU INSIDE PROCEDURE.
ret
my_proc endp
在
[bp+2]
的情况下,它似乎不起作用,可能是因为编译器无法获得固定值。
关于assembly - 汇编8086 EQU指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40346359/