装配程序中的无限循环

时间:2012-04-28 06:06:51

标签: 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         

1 个答案:

答案 0 :(得分:5)

我不知道您检查和重新检查了什么,但是您正在将其中一个字符串中的字节读入bl,然后将整个bx与'$'进行比较,而不是比较{{ 1}}与'$'。

您是否考虑过调试代码?

此外,我不知道您使用bl的原因。如果中断被禁用,您的程序将永远不会返回。

最后,如果这是DOS的.COM程序,hltorg 100之间存在“微小”差异。