我正在阅读 Richard C. Detmer 撰写的一本关于 80x86 汇编语言的书,题为“80x86 汇编语言和计算机体系结构第二版简介”。我很难理解注册间接模式,我的书是这样说的:
“我们的示例程序没有带有寄存器间接内存操作数的指令。这是一个样子。注释给出了您将在列表文件中看到的目标代码。
add eax, [edx] ; 03 02
第一个操作数 EAX 显然是寄存器模式,第二个操作数是寄存器间接模式。请注意,目标代码只有 2 个字节,不足以包含 32 位内存地址。相反,第二个字节包含表示使用 EDX 寄存器中的地址来定位第二个双字操作数的位。换句话说,第二个数字不在 EDX 中,但它的地址在。方括号符号 ([ ]) 表示汇编语言中的间接寻址。” - 底部的第 65 页(如果您可能有教科书)。
这本书显示了内存插槽的图片和 EDX 在内存中的地址(操作数的地址)位置及其突出显示。
好的,我输入了那个小部分,因为我不明白,它说使用 EDX 中的地址来定位第二个 dword,但它说第二个数字不在 EDX 中,但它的地址是。什么??所以我们获取了 EDX 的地址,但是这如何给我们一个内存中的数字呢?我认为地址只是针对 EDX,以及寄存器中包含的任何内容,那么你怎么能不从 EDX 获得一个数字而只使用内存地址呢?地址指向 EDX 及其包含的内容,所以如果您使用地址而不是通常在 EDX 中获得值?那么下面的这个说法不一样吗?:
add eax, edx
如果有人能给我更多关于寄存器间接模式的见解,并提供一些示例、解释和对我上面问题的答案,我将非常感激。