【问题标题】:How do I store and use 32 bit values in 16 bit mode [duplicate]如何在 16 位模式下存储和使用 32 位值 [重复]
【发布时间】:2019-07-13 04:48:24
【问题描述】:

我可以在 16 位模式下使用 E*X 寄存器吗?如果不是,我应该如何存储和使用 32 位和 64 位值(DWORDS 和 QWORDS)。我知道一起使用 ax 和 dx 来存储一个 32 位值,但是我如何处理这样的内存呢?我觉得我做不到push [ax dx],还是可以吗?

非常感谢任何信息如何做到这一点,我在网上查了一下,似乎我只是没有受过教育才能弄清楚,因为似乎没有人和我有同样的问题......

【问题讨论】:

  • 首先,[ax dx] 不是有效的寻址模式,16 位寻址模式不能使用 AX 或 DX 作为基址或索引。 IDK 你想要做什么,但也许是 push dxpush ax(寄存器 values 的两个单独推送指令,而不是内存源操作数)是您想要将 32 位 DX:AX 放入堆栈的内容。或shl edx, 16/mov dx, ax/push edx。如果知道 EAX 的高 16 位为零,也可以与 or edx, eax 合并。
  • 通用整数寄存器 (rax..rdi) 的 64 位操作数大小需要 64 位长模式。 16 位模式下的操作数大小前缀只能获得 32 位操作数大小和/或地址大小(由 386 引入)

标签: assembly x86-16 cpu-registers real-mode dword


【解决方案1】:

Is it possible to use 32 bits registers/instructions in real mode?

上面的链接解决了我的问题...我只是在谷歌中错误地表述了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多