-2

この 8086 アセンブル プログラムを文字列比較用に作成しましたが、無限ループが含まれています。確認して再確認しました。誰かが私が間違っている場所を見つけることができますか?

org 100
jmp start
str1: db "hello$"
str2: db "ello$"


start: 
lea bx,str1
mov si,bx
lea ax,str2
mov di,ax  
mov ax,1234
jmp compare

compare:
mov bl,[si]
cmp [di],bl
jne notequal
cmp bx,'$'
je equal
inc si
inc di
jmp compare

notequal:
mov ax,0000h 
hlt

equal:
mov bx,0001h
hlt
  ret         
4

1 に答える 1

5

何をチェックして再チェックしたかはわかりませんが、文字列の 1 つからバイトを読み込んでblいて、「$」と比較するのではなく、全体bxを「$」と比較blしています。

コードのデバッグを検討しましたか???

また、なぜあなたが を使用するのかわかりませんhlt。割り込みが無効になっている場合、プログラムは決して戻りません。

最後に、これが DOS 用の .COM プログラムである場合、 と の間に「わずかな」違いがorg 100ありorg 100hます。

于 2012-04-28T06:23:16.463 に答える