当我单步执行时,程序在Turbo Debugger中工作,但是当我在TD或DOS中运行它时它会停止并且Ctrl + Alt + Delete成为唯一选项

时间:2015-01-24 11:29:12

标签: debugging assembly dos bios tasm

该程序旨在使用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

2 个答案:

答案 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: