如何获取一个寄存器来存储 at&t 语法中的偏移值?

How do I get a register to store an offset value in at&t syntax?

我正在使用它写入显存 (%es = 0xb800):

movw [=10=]x074b,%es:(0x0)

但是,如果我希望偏移量在 %ax 中怎么办?

我尝试了 %es:%ax%es:(%ax),但没有任何效果,而且我不断收到错误。

我做错了什么?

在 16 位模式下,您可以使用的地址形式有限。您不能使用 %ax 寻址。有效形式为:

  • 可选 bxbp 之一,加上
  • 可选sidi之一,加上
  • 可选的恒定位移

因此,例如,movw [=15=]x074b, %es:(%di) 会起作用。另见 Table 2-1。 ModR/M 字节 的 16 位寻址形式在官方 Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2: Instruction Set Reference, A-Z

PS: 下次显示你遇到了什么错误。