为了实现题目要求的功能编写了一段汇编代码,发现直接运行该代码生成的exe文件会陷入死循环无法结束。而如果debug单步调试的话能够正常跳转到int 21h程序结束部分,请问直接运行exe为什么会陷入死循环?
(如果没有该教材的话可以看链接视频中关于这个问题的讲解https://www.bilibili.com/video/av28132657?p=53)
assume cs:code
data segment
db 16 dup (0)
data ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
show_str: mov si,bx
mov bx,0
mov bl,160
mov al,dh
mul bl
mov bx,ax
mov al,dl
mul cl
add bl,al
mov ax,0b800h
mov es,ax
mov cx,si
dec si
s0: mov al,ds:[si]
add al,30h
mov es:[bx],al
mov byte ptr es:[bx+1],24h
dec si
add bx,2
loop s0
ret
dtoc:mov bx,0
s:mov cx,10d
div cx
mov byte ptr ds:[bx],dl
inc bx
mov cx,ax
jcxz ok
mov dx,0
jmp short s
ok: ret
code ends
end start