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