したがって、整数のビットをカウントする必要があります。これは私のコードですが、なぜ機能しないのかわかりません。c main から 16 進値を送信し、どういうわけかそれをシフトしてマスクする必要があります。私はちょっと迷っています。シフトとマスクの方法がわからないので、間違った答えを得ていると思います。繰り返しますが、ゼロではなく 1 であるビットを 32 までカウントする必要がありますが、間違った答えが得られます。たとえば、6 110 は 2 ビットになります。これは宿題なので、組み込み関数などを使用することはできません。
.global hi
hi:
save %sp,-1024,%sp
clr %i0
clr %i1
clr %i2
loop:
cmp %i2,32
be,a away
mov %l7,%i0
add 1,%i2,%i2
and %i0,1,%l1
cmp %l1,1
be count
nop
!srl %i0,%l2,%10
!mov %l2,%i0
!and %i0,1,%i0
srl %i0,1,%i0
ba loop
nop
!mov %l2,%i0
count:
add 1,%l7,%l7
away:
ret
restore
なぜこれがまだ機能していないのですか?私はそのC実装に従いましたが、まだビット数を返していません:/。戻り値は %i0 で、カウンターをインクリメントした後にループに戻る方法がわかりません。
それで、これは何をしているのですか?ba loop と表示されたら、ループに戻るべきではありませんか?
質問が多いかどうかはわかりませんが、この問題を解決する方法について何か考えはありますか? :pよくわからないので、マニュアルを見ていますが、私に役立つものは何もありません:/。