質問
課題の最後の部分に問題があります。ビットなどのストリームを取得します。ストリームは、テキスト部分に1の数を持つ整数です。その整数と正しい24を取得し、取得したテキストデータをループして、そこにあるすべての1をカウントしようとします。しかし、私のprocは常にゼロを返します。
適切にループしていることを確認できました。
テキスト= Hello これは16の1で、ここにテキストをループしてその中の1の数をカウントするためのprocがあります。
sub AX,AX
sub SI,SI
mov bx,[bp+6] ;get message offset
@@mainLoop:
mov cx,8
mov dh,80h
cmp byte ptr [bx + si],0
je @@endChecker
@@innerLoop:
test byte ptr [bx + si],dh
jz @@zeroFound
inc AX
@@zeroFound:
shr bh,1
loop @@innerLoop
@@continue:
inc si
jmp @@mainLoop
残りのprocはプッシュ/ポップのみです。これが実際にしたいことは、TESTを使用して100000000をバイトと比較することです。その1 inc AXがマスクを右に1シフトし、incを次のバイトにループしてからバイト全体をループして再度実行する場合。
解決
'shr bh、1'はおそらく 'shr dh、1'である必要がありますか?
他のヒント
内部ループの代替のより短い実装を提供するだけです:
mov cx, 8
mov dh, byte ptr [bx+si]
@@innerLoop:
add dh, dh
adc ax, 0
loop @@innerLoop
ここでは、ビットをまったくテストしません。代わりにdhを追加すると、dhは最上位ビットをキャリーにシフトし、1つの命令でshl dh、1と同じことを行います。
addc ax、0は、キャリーをAXに追加するだけです。
所属していません StackOverflow