【发布时间】: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 dx;push 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