装配程序帮助

时间:2010-12-01 16:36:27

标签: assembly windows-xp masm32

我有一个程序应该清除屏幕并打印我的名字,然后换行并重新打印我的名字。但是当我跑的时候没有任何东西出现。只是程序正常化了。我正在使用debug在Windows命令提示符下执行此操作。

    call 010E
    call 0125
    call 012D
    call 0125
    int 20

    push ax     #clearscreen(010E)
    push bx
    push cx
    push dx
    xor al, al
    xor cx, cx
    mov dh, 18
    mov dl, 4f
    mov bh, 07
    mov ah, 06
    int 20
    pop dx
    pop cx
    pop bx
    pop ax
    ret

    mov dx, 0200    #printline(0125)
    mov ah, 09
    int 21
    ret

    push ax         #new line( 012D)
    push dx
    mov ah, 02
    mov dl, 0d
    int 21
    mov dl, 0a
    int 21,
    pop dx
    pop ax
    ret

    DB' Antarr$ #(0200)

2 个答案:

答案 0 :(得分:2)

您的第一个也是最明显的错误是使用int 20函数调用int 10,终止程序,而不是BIOS中断clearscreen

编辑:但为什么不为此使用汇编程序?例如,尝试NASM。此外,该程序:Tech,将帮助您找到正确的DOS或BIOS功能。

答案 1 :(得分:1)

您正在尝试调用硬件中断(int 20)。由于受保护模式,您将无法进入模式20.换句话说,Windows将阻止您直接与硬件通信。