assembly - 汇编8086 EQU指令

标签 assembly x86-16 emu8086

我在汇编程序(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/

    相关文章:

    程序集 x86 NULL 终止符 (TASM)

    assembly - SHL和SAL在80x86中的区别

    x86-16 - 未定义操作码对(原始)Intel 8086/88 的影响

    assembly - 汇编器无法打开文件

    java - 在asm java编译器中创建一个数组

    c++ - 在Intel x86中读取缓存行与部分缓存行

    assembly - 模拟器使用 int21h/ah=09h 显示 "error byte 24h not found after 2000 bytes"

    assembly - AT&T asm 中的 "outb"是什么意思?

    汇编 8086 光标放置