将两个字节复制到整个寄存器中

时间:2012-03-20 00:08:15

标签: assembly x86

我正在努力解决汇编问题,我必须取十六进制代码的第一个字节(FF):

0x045893FF and copy it over the entire hex code:  

0xFFFFFFFF.

我做的是:

movl $0x04580393FF, %eax
shl $24, %eax     # to get only the last byte 0xFF000000

现在我想将这个字节复制到寄存器的其余部分。

如何做到这一点?谢谢!

3 个答案:

答案 0 :(得分:3)

你可以这样做:

mov %al, %ah    #0x0458FFFF
mov %ax, %bx    #0xFFFF
shl $16, %eax   #0xFFFF0000
mov %bx, %ax    #0xFFFFFFFF

另一种方式是:

movzx %al, %eax
imul $0x1010101, %eax

最后一个可能在现代架构上更快。

答案 1 :(得分:1)

我习惯于NASM汇编语法,但这应该相当简单。

; this is a comment btw
mov eax, 0x045893FF ; mov to, from

mov ah, al
mov bx, ax
shl eax, 16
mov ax, bx

; eax = 0xFFFFFFFF

答案 2 :(得分:0)

仅使用一个寄存器(EAX)的另一种解决方案:

            (reg=dcba)
mov ah, al  (reg=dcaa)
ror eax, 8  (reg=adca)
mov ah, al  (reg=adaa)
ror eax, 8  (reg=aada)
mov ah, al  (reg=aaaa)

这比上述解决方案慢一点。