1

%ecx给定and中的 32 位十进制数,当尝试使用然后 将进位(刚刚被剪切的位)移动到 8 位寄存器并比较是否相等%edx时,尝试左移和右移原始数的每个副本时,我写道:shlshrahal

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

我究竟做错了什么?

4

1 回答 1

1

您正在比较来自相反两侧的 2 个数字。您的程序继续循环 while ecx[i] == edx[32-i]。所以你实际上在做的是检查是否ecx包含edx. 例如,它会返回 true for ecxwith value0x200000edxwith value 0x400

于 2012-12-17T10:43:10.323 回答