【问题标题】:How do I get a register to store an offset value in at&t syntax?如何获得一个寄存器以在 at&t 语法中存储偏移值?
【发布时间】:2016-02-05 16:00:03
【问题描述】:

我正在使用它来写入视频内存(%es = 0xb800):

movw $0x074b,%es:(0x0)

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

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

我做错了什么?

【问题讨论】:

    标签: assembly gnu-assembler att x86-16


    【解决方案1】:

    在 16 位模式下,可用地址形式受到限制。您无法使用%ax 寻址。有效的表格是:

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

    因此,例如,movw $0x074b, %es:(%di) 会起作用。另见表 2-1。官方英特尔® 64 和 IA-32 架构软件开发人员手册第 2 卷:指令集参考,A-Z

    中带有 ModR/M 字节的 16 位寻址形式

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

    【讨论】:

    • 谢谢,现在好像可以了。错误是“错误的内存操作数”。
    • 对不起,昨天想马上做,但是太快了,系统不接受。我现在正在做。
    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多