assembly - 如何将两个不同大小的寄存器内容相加以形成 x86 汇编中的有效地址?

标签 assembly x86 nasm x86-64 low-level

考虑 x86 汇编中的以下错误指令:

imul    edx, [eax+cl], 2

Nasm 提示有效地址不正确。我知道我不能添加两个不同大小的寄存器内容。应该如何正确地做到这一点?也许我应该以某种方式添加一个偏移量 - 我怎样才能在 nasm 中做到这一点?注意:我无法添加整个 ecx,因为较高位包含数据。

最佳答案

一种方法是像这样存储 ecx 的低 8 位:(猜测它应该可以工作)

movzx   edx, cl
imul    edx, [eax+edx], 2

另一种方法是运行一段自修改代码,将“cl”替换为应用程序在需要时更新的“立即”偏移量。请注意,修改正在运行的代码会在较新的 CPU 中产生额外的延迟,因此很少实用。

关于assembly - 如何将两个不同大小的寄存器内容相加以形成 x86 汇编中的有效地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107730/

相关文章:

assembly - x86 XOR 操作码差异

assembly - "DS:[40207A]"在汇编中是什么意思?

c - 缓冲区溢出视频中的 jmp *%esp

sorting - x86 尝试进行冒泡排序时出现段错误

linux - 汇编中的 ROT13 密码

nasm - 短跳超出范围

assembly - 如何在 x86 实模式引导加载程序中初始化堆栈以防止与 BIOS 冲突?

assembly - 一个32位寄存器和一个常量的指令怎么可能只占用三个字节呢?

assembly - 将 scanf 与 x86-64 GAS 组件结合使用

assembly - nasm 指令和宏的缩进