2013-03-27 101 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