该程序旨在使用BIOS int 10h显示char表,并且只有当我在td中逐步执行时才会执行此操作。我想也许在调试器中未初始化的寄存器包含零,但是在运行时它们可能包含垃圾,因此我把mov ax,0003h代替mov al,3并添加了xor dx,dx;但它也不起作用。
.model tiny
.code
org 100h
start:
mov ax, 0003h
int 10h
xor dx, dx
mov si, 256
mov ax, 0900h
mov cx, 1
xor bh, bh
mov bl, 00011111b
cloop:
int 10h
push ax
mov ah, 2
inc dl
int 10h
mov ax, 0920h
int 10h
mov ah, 2
inc dl
int 10h
pop ax
inc al
test al, 0Fh
jnz con_loop
mov ah, 2
inc dh
xor dl, dl
int 10h
pop ax
con_loop:
dec si
jnz cloop
ret
end start
答案 0 :(得分:0)
您的pop
指令与push
不对应:
push ax
...
pop ax
inc al
...
int 10h
pop ax <-- HERE
con_loop:
应删除最后pop
。
答案 1 :(得分:0)
你需要一个额外的推动力。即使它不是输出寄存器,您也不应该相信BIOS / DOS /其他人保留AX。
test al,0Fh
jnz con_loop
push ax ;You forgot this!!!
mov ah,2
inc dh
xor dl,dl
int 10h
pop ax
con_loop: