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

时间:2014-02-09 20:07:54

标签: assembly mov

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

如果是的话会发生什么情况?

还会发生什么:MOV EBX,AX?

(使用NASM,8086架构)

3 个答案:

答案 0 :(得分:1)

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

使用movsx ebx,ax将ax移动到符号扩展名为

的ebx

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

答案 1 :(得分:1)

假设英特尔语法,

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年前,我不知道)。

简而言之,查阅文档试用

答案 2 :(得分:0)

MOV AX,EBX ......如果这样可以编译,你可能会在AX中获得BX。

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

我现在手边没有汇编程序,但请试着看看会发生什么......