我是汇编编程的新手,并在网上搜索教程和电子书。我在汇编语言中发现了一些关于语法的令人困惑的信息,例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
这样的寄存器中时,我们在寄存器中存储了什么值?该内存位置的地址或实际值?
答案 0 :(得分:1)
规则很简单,对存储位置的内容的任何访问都需要在地址周围加上方括号,而对变量的地址的任何访问都不需要。因此,
mov ax,foo
形式的指令将总是引用编译时常量,无论是EQU
还是变量的地址;并访问变量bar
的内容,您必须编写mov ax,[bar]
的代码。
所以
MOV EBX, [MY_TABLE] ; Effective Address of MY_TABLE in EBX
是错误的:它没有将EBX
设置为一个地址,而是将其设置为存储在MY_TABLE
地址中的值。