我是汇编编程的新手,并在网上搜索教程和电子书。我在汇编语言中发现了一些关于语法的令人困惑的信息,例in a tutorial我读了以下代码:
MOV EBX, [MY_TABLE] ; Effective Address of MY_TABLE in EBX
MOV [EBX], 110 ; MY_TABLE[0] = 110
在一本书中我读到:
mov ax, [Data] ; normal direct memory addressing of a wor
mov ebx, Data ; ebx = & Data
3 mov ax, [ebx] ; ax = *ebx
因此,当我们将MOV
中的变量[]
封装到像EBX
这样的寄存器时,我们在寄存器中存储了什么值?该内存位置的地址或实际值?
规则很简单,任何对内存位置内容的访问都需要围绕地址的方括号,并且对变量地址的任何访问都不需要。因此,
mov ax,foo
形式的指令将始终引用编译时常量,无论是EQU
还是变量的地址;要访问变量bar
的内容,您必须编码mov ax,[bar]
。
所以
MOV EBX, [MY_TABLE] ; Effective Address of MY_TABLE in EBX
错误:它没有将EBX
设置为地址,而是设置为存储在MY_TABLE
地址的值。