装配位移

时间:2012-12-17 10:03:54

标签: assembly x86 bit-manipulation

给定%ecx%edx中的32位十进制数,当尝试使用shlshr左右移动原始数字的每个副本时,然后移动如果相等,我会写一个8位寄存器ahal进行比较(正好被切断的位):

movl    $32, %esi   #counter
xor     %eax, %eax
.LOOP:
shl     %ecx
setb    %ah
shr     %edx
setb    %al
cmp     %ah, %al
jnz     .np
decl    %esi
jnz     .LOOP

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您正在比较两侧的2个数字。您的程序会在ecx[i] == edx[32-i]期间继续循环。所以你实际在做的是检查ecx是否包含edx的反转值(即重新排序的位)。例如,对于值ecx的{​​{1}}和值为0x200000的{​​{1}},它将返回true。