获得左移损失值(内联汇编程序)

时间:2015-02-07 12:01:21

标签: assembly x86

我想使用内联汇编程序实现一个取eax寄存器值的函数,并将xor中每个4位的eax的结果放入ebx ,我想用左移来实现它。

假设

的值
eax value is : 1101.1010.0010.0011
ebx value is : 0

我想从eaxxor左移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

如何获得失去的价值?

1 个答案:

答案 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