jul*_*aad 2 x86 assembly bit-manipulation
我正在努力解决汇编中的问题,我必须获取十六进制代码的第一个字节 (FF) 并将其复制到整个值上:
0x045893FF input
0xFFFFFFFF output
Run Code Online (Sandbox Code Playgroud)
我所做的是:
movl $0x04580393FF, %eax
shl $24, %eax # to get only the last byte 0xFF000000
Run Code Online (Sandbox Code Playgroud)
现在我想将此字节复制到寄存器的其余部分。
例如,您可以这样做:
mov %al, %ah #0x0458FFFF
mov %ax, %bx #0xFFFF
shl $16, %eax #0xFFFF0000
mov %bx, %ax #0xFFFFFFFF
Run Code Online (Sandbox Code Playgroud)
另一种方法是:
movzx %al, %eax
imul $0x1010101, %eax
Run Code Online (Sandbox Code Playgroud)
最后一个在现代架构上可能更快。