我想使用内联汇编程序实现一个取eax
寄存器值的函数,并将xor
中每个4位的eax
的结果放入ebx
,我想用左移来实现它。
假设
的值eax value is : 1101.1010.0010.0011
ebx value is : 0
我想从eax
和xor
左移4位,丢失的值为ebx
值:
所以结果必须是:
eax : 1010.0010.0011.0000
ebx : 1101
下一步:
eax : 0010.0011.0000.0000
ebx : 1101 xor 0010 = 1111
下一步:
eax : 0011.0000.0000.0000
ebx : 1111 xor 0010 = 1101
下一步:
eax : 0000.0000.0000.0000
ebx : 1101 xor 0011 = 1110
如何获得失去的价值?
答案 0 :(得分:0)
事先保存。
例如:
mov ebx, eax
shr eax, 4
and ebx, 15 ; this is the "lost" value
mov edx, eax
shr eax, 4
and edx, 15
xor ebx, edx
; etc
所有这些and
都不是必需的,因为高位不会与任何其他位进行交互,您可以在计算过程中忽略它们并最终将它们全部丢弃单and
(我将其作为练习留给读者)。
更好的是,由于xor是关联的,我们可以将顺序重新排列到我们的优势,并行地使用几对。例如:
; first step
mov ebx, eax
shr eax, 8
xor eax, ebx ; xor the first nibble with the third, and the second with the fourth
; second step
mov ebx, eax
shr eax, 4
xor ebx, eax ; (first ^ third) ^ (second ^ fourth) and some leftover junk
; clean up
and ebx, 15 ; remove junk