【发布时间】:2017-01-25 11:19:50
【问题描述】:
我是汇编编程的新手,我在网上搜索教程和电子书。我发现了一些关于汇编语言语法的令人困惑的信息,例如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 这样的寄存器时,我们在寄存器中存储了什么值?该内存位置的地址或实际值?
【问题讨论】:
-
语法取决于您忘记提及的汇编程序。但是
[]总是表示内存的内容,所以第一个例子是错误的。至少我不知道有任何汇编程序会以不同的方式工作。 -
@Jester 实际上在许多 AT&T 语法汇编器中,
[]表示表达式分组(例如mov $foo*[bar+baz],%eax)而不是取消引用。 -
你确定第一个例子是
MOV,而不是LEA? -
错误的教程是最糟糕的。避免这个;谁知道你还会发现什么其他令人困惑的错误。对于已经了解 NASM 的人来说,如果你真的尝试代码,这只是一个简单的错误/错误,但对于尝试学习 NASM 语法的人来说,有两个相互冲突的东西会非常令人困惑。 TutorialsPoint 以拥有大量不完全正确的信息而闻名。