汇编程序编程 - 将 32 位寄存器的内容移动到 16 位寄存器



是否可以执行以下操作:MOV AX,EBX

如果是,在这种情况下会发生什么?

另外会发生什么:MOV EBX,AX?

(使用 NASM、8086 架构)

假设英特尔语法,其中

MOV AX, EBX

如果允许,会将 EBX 的内容复制到 AX。

试试吧。我记得它不受支持。但是您可以复制任何 16 位组,例如

MOV AX, BX

然而,关于相反的情况,扩展一个位模式,就像假设的

MOV EBX, AX

如何做到这一点取决于你想要什么。

如果 AX 表示无符号整数,只需清除 EBX 并复制到下半部分,例如

XOR EBX, EBX
MOV BX, AX

但是,如果 AX 表示有符号整数(二进制补码),则需要在整个 16 个上位中一直复制符号位,这称为符号扩展

谷歌搜索"x86 标志扩展"给了我

MOVS EBX, AX

但我还没有尝试过(也就是说,我现在没有尝试过,但也许 20 年前,我不知道)。

简而言之,请查阅文档试用一下

使用 mov ax,bx 将 bx 的低 16 位移动到 ax 中。

使用 movsx ebx,ax 将 ax 移动到带有符号扩展的 ebx 中

使用 movzx ebx,ax 将 ax 移动到 ebx 中,将 ebx 的高 16 位归零。

MOV AX, EBX ...如果这将编译您可能会在 AX 中获得 BX。

MOV EBX,AX 将在 BX 中获得 AX,并在它之前获得零......

我现在手边没有组装机,但请尝试看看会发生什么......

最新更新