我正在努力解决汇编问题,我必须取十六进制代码的第一个字节(FF):
0x045893FF and copy it over the entire hex code:
0xFFFFFFFF.
我做的是:
movl $0x04580393FF, %eax
shl $24, %eax # to get only the last byte 0xFF000000
现在我想将这个字节复制到寄存器的其余部分。
如何做到这一点?谢谢!
答案 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)
这比上述解决方案慢一点。