如何获取一个寄存器来存储 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
寻址。有效形式为:
- 可选
bx
或 bp
之一,加上
- 可选
si
或di
之一,加上
- 可选的恒定位移
因此,例如,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: 下次显示你遇到了什么错误。
我正在使用它写入显存 (%es = 0xb800):
movw [=10=]x074b,%es:(0x0)
但是,如果我希望偏移量在 %ax 中怎么办?
我尝试了 %es:%ax
或 %es:(%ax)
,但没有任何效果,而且我不断收到错误。
我做错了什么?
在 16 位模式下,您可以使用的地址形式有限。您不能使用 %ax
寻址。有效形式为:
- 可选
bx
或bp
之一,加上 - 可选
si
或di
之一,加上 - 可选的恒定位移
因此,例如,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: 下次显示你遇到了什么错误。