装配程序中的无限循环

use*_*375 -2 assembly x86-16

我用这个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         
Run Code Online (Sandbox Code Playgroud)

Ale*_*nze 5

我不知道你检查和重新检查了什么,但你正在从其中一个字符串中读取字节,bl然后将整个字符bx与'$'进行比较bl,而不是与'$'进行比较.

你有没有考虑调试你的代码?

另外我不知道你为什么用hlt.如果禁用中断,您的程序将永远不会返回.

最后,如果这是DOS的.COM程序,则org 100和之间存在"小"差异org 100h.