Assembly 获取左移位丢失值(内联汇编程序)

Assembly 获取左移位丢失值(内联汇编程序),assembly,x86,Assembly,X86,我想用内联汇编程序实现一个函数,该函数取eax寄存器的值,并将eax中每4位的xor结果放入ebx,我想用左移位实现它 假设 eax value is : 1101.1010.0010.0011 ebx value is : 0 我想从eax和xor用ebx值对丢失的值进行4位左移位: 因此,结果必须是: eax : 1010.0010.0011.0000 ebx : 1101 下一步: 下一步: 下一步: 如何获取丢失的值?事先保存 例如: mov ebx, eax shr eax, 4

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

假设

eax value is : 1101.1010.0010.0011
ebx value is : 0
我想从
eax
xor
ebx
值对丢失的值进行4位左移位:

因此,结果必须是:

eax : 1010.0010.0011.0000
ebx : 1101
下一步:

下一步:

下一步:


如何获取丢失的值?

事先保存

例如:

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
所有这些
实际上都不是必需的,因为高位不与任何其他位交互,您可以在计算过程中忽略它们,并在最后使用单个
一次性丢弃它们(我将此作为练习留给读者)

更妙的是,由于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

哦,别这样。你知道,无论C还是C++,这都是绝对零的。不要给它贴上这样的标签。人们跟随这些标签是因为这是他们感兴趣的。你没有任何权利欺骗那些人阅读你的问题。好吧,对不起,别紧张@新加坡请尊重礼节并接受这个回答。
 eax : 0000.0000.0000.0000
 ebx : 1101 xor 0011 = 1110
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
; 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