2012-12-17 16 views
0

鉴于%ecx%edx一个32位的十进制数注册ahal到如果相等比较,我写道:组装位,试图左移,并且当右使用<code>shl</code>和<code>shr</code>原数的每个副本,则进位(刚切割位)移动到一个8比特移位

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

你想达到什么目的?你有什么? – Oren

+0

遍历各边的比特如果相等进行比较,对于除0之外的所有内容,程序返回0作为输入 – winuall

+0

您定位的操作系统是什么? (Linux 32位,Linux 64位,DOS,Windows ...)对于大多数汇编程序来说,这不是一个可用的x86汇编程序。你如何定义程序的返回值? – nrz

回答

1

您正在对比来自对面的2个数字。你的程序继续循环,而ecx[i] == edx[32-i]。所以你实际上在做的是检查ecx是否包含edx的倒数值(即重新排序的位)。例如,它将返回值为ecx,其值为0x200000edx,值为0x400

+0

,但是一旦我比较了一个二进制回文的小数,它应该返回true,因为比较反转的位应该导致相同的数字。为什么不为3例如返回true? – winuall

+1

,因为您正在比较32位数字(根据'ecx'和'edx'的大小)。二进制中的'3'实际上是'00000000000000000000000000000011' - 所以它不是回文,计算机不会切断前导零,执行这样的逻辑不是他的工作,他知道的只有32'0'和'1' 。 – SomeWittyUsername