1

とで32ビットの10進数が与えられた場合、元の数値の各コピーを使用して左右にシフトし 、キャリー(カットされたばかりのビット)を8ビットレジスタに移動して等しいかどうかを比較しようとすると、次のように記述します%ecx%edxshlshrahal

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つの数値を比較しています。プログラムはループを続けecx[i] == edx[32-i]ます。したがって、実際に行っているのはecx、の反転値(つまり、並べ替えられたビット)が含まれているかどうかを確認することですedx。たとえば、withvalueおよびwithvalueに対してtrueecx0x200000返しedxます0x400

于 2012-12-17T10:43:10.323 に答える