汇编寻址模式

标签 assembly x86 masm masm32 addressing-mode

有人可以解释一下以下两者之间的区别吗?我发现理解寻址模式背后的概念有点困难

mov ax, [bx + di + 10]
mov ax, [bx + di] + 10

非常感谢!

最佳答案

您将此标记为 MASM32,但这两条指令对于 x86 都是不合法的。除非您正在进行 16 位编程,否则您应该明确这一点。

mov ax, [bx+di+10]

在 x86 中是不合法的,因为它使用 16 位寻址。但是,允许以下内容:

mov ax, [ebx+edi+10]

这意味着获取 ebx 的值,将其添加到 edi 的值,然后将 10 添加到该值。然后将最终值视为指针。取该地址指向的(2字节)并将值赋给ax。

mov ax, [bx+di]+10

同样不合法(16 位寻址)。如果你要这样做:

mov ax, [ebx+edi]+10

这也是不允许的,因为 mov 不允许在 [ebx+edi] 之后进行额外输入

关于汇编寻址模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7292005/

相关文章:

math - 在我的汇编程序中,我试图计算(((((2 ^ 0 + 2 ^ 1)* 2 ^ 2)+ 2 ^ 3)* 2 ^ 4)+ 2 ^ 5)的等式

visual-studio-2010 - 程序集 fatal error LNK1190 : invalid fixup found, 类型 0x0001

assembly - MASM 代码的 NASM 等效项

汇编 x86 MASM 循环分析

assembly - 在不同 CPU 上表现不同的 X64 指令

c - 快速 x86 asm 问题

assembly - 在 x86 asm 中输出变量值

assembly - 如何将 bin 文件(512 字节)写入软盘的第一个扇区(扇区 0)?

C++ 内联程序集运行时检查失败 #0

caching - 为什么 mem_load_retired.l1_hit 和 mem_load_retired.l1_miss 没有添加到加载总数中?