【问题标题】:Validity of the mov command in x86 assemblyx86 程序集中 mov 命令的有效性
【发布时间】:2013-03-27 12:39:02
【问题描述】:

我在课堂上了解到,将 16 位寄存器移动到 8 位寄存器不是有效指令。例如此命令无效:

mov al,bx

但是有没有这样的指令:

mov bx,al

或者两个寄存器的大小必须相等?如下:

mov al,bl        
mov bx,ax

【问题讨论】:

    标签: assembly x86 mov


    【解决方案1】:

    我可以写命令吗:mov bx,al

    不,但你可以做

    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 位通用寄存器。

    【讨论】:

    • 所以你说什么如果我明白我不能写 move bx,al ,mov al,bx
    • 对。您可以使用 sx/zx 变体来扩大移动范围。但是没有缩小范围,因此必须使用 mov al,bl 而不是 mov al,bx(假设您想要 bx 的低 8 位)。
    猜你喜欢
    • 2011-08-15
    • 2012-11-05
    • 1970-01-01
    • 2012-09-30
    • 2011-08-18
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多