1
我在課上學到了將16位寄存器移動到8位寄存器不是一個有效的指令。例如,這命令是無效的:x86彙編中mov命令的有效性
mov al,bx
但有這樣的指令:
mov bx,al
,或者必須在2個寄存器的大小是相等?如在下面:
mov al,bl
mov bx,ax
我在課上學到了將16位寄存器移動到8位寄存器不是一個有效的指令。例如,這命令是無效的:x86彙編中mov命令的有效性
mov al,bx
但有這樣的指令:
mov bx,al
,或者必須在2個寄存器的大小是相等?如在下面:
mov al,bl
mov bx,ax
我可以寫命令: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位通用寄存器。
所以你說如果我明白我不能寫bx,al,mov al,bx – 2013-03-27 13:08:58
它是一樣的嗎? – 2013-03-27 13:09:13
對。您可以使用sx/zx變體來擴大移動範圍。儘管沒有縮小的動作,所以必須使用'mov al,bl'而不是'mov al,bx'(假設你需要'bx'的低8位)。 – Michael 2013-03-27 13:15:18