課題の最後の部分に問題があります。ビットなどのストリームを取得します。ストリームは、テキスト部分の 1 の数を含む整数です。その整数と正しい 24 を取得し、取得したテキスト データをループして、そこにあるすべての 1 をカウントしようとしました。しかし、私のプロシージャは常にゼロを返します。
適切にループしていることを確認できました。
テキスト = 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 を次のバイトに移動してもう一度実行します。