2013-03-27 81 views
1

我在课上学到了将16位寄存器移动到8位寄存器不是一个有效的指令。例如,这命令是无效的:x86汇编中mov命令的有效性

mov al,bx 

但有这样的指令:

mov bx,al 

,或者必须在2个寄存器的大小是相等?如在下面:

mov al,bl   
mov bx,ax 

回答

6

我可以写命令:MOV BX,人

没有,但你可以做

movsx bx,al ; sign-extend al into bx 
      ; the upper half of bx will be filled with the most significant 
      ; bit of al. For example 0x40 becomes 0x0040, while 0xC0 
      ; becomes 0xFFC0. 

movzx bx,al ; zero-extend al into bx 
      ; the upper half of bx will be filled with zeroes 


和类似的从16位通用寄存器到32位通用寄存器。

+0

所以你说如果我明白我不能写bx,al,mov al,bx – 2013-03-27 13:08:58

+0

它是一样的吗? – 2013-03-27 13:09:13

+0

对。您可以使用sx/zx变体来扩大移动范围。尽管没有缩小的动作,所以必须使用'mov al,bl'而不是'mov al,bx'(假设你需要'bx'的低8位)。 – Michael 2013-03-27 13:15:18