给定%ecx
和%edx
中的32位十进制数,当尝试使用shl
和shr
左右移动原始数字的每个副本时,然后移动如果相等,我会写一个8位寄存器ah
和al
进行比较(正好被切断的位):
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
我做错了什么?
答案 0 :(得分:1)
您正在比较两侧的2个数字。您的程序会在ecx[i] == edx[32-i]
期间继续循环。所以你实际在做的是检查ecx
是否包含edx
的反转值(即重新排序的位)。例如,对于值ecx
的{{1}}和值为0x200000
的{{1}},它将返回true。