2010-12-01 83 views
1

我有一個程序,應該清除屏幕並打印我的名字,然後換行並再次打印我的名字。但是當我運行它時什麼都沒有顯示出來。只是程序正常運行。我在使用調試的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) 
+0

1)爲什麼要調試? 2)你爲什麼確定例程的確切長度? 3)是什麼讓你認爲你的名字將在偏移量0x200? 4)在`clearscreen`中,是int 20還是21? 5)你確定CS和DS是平等的嗎? – ruslik 2010-12-01 16:43:18

+0

我確切的長度,因爲我手工輸入它,然後回去修改調用 – 2010-12-01 16:55:30

+0

我在清除屏幕中將int 20更改爲21。這有助於用換行符打印我的名字,但沒有清晰的屏幕 – 2010-12-01 17:00:18

回答

2

你的第一個也是最明顯的錯誤是調用int 20終止程序,而不是BIOS中斷int 10clearscreen函數。

編輯:但你爲什麼不使用匯編程序呢?例如,嘗試NASM。此外,該程序:Tech,將幫助您找到正確的DOS或BIOS功能。

1

您正試圖調用硬件中斷(int 20)。由於保護模式,您將無法進入模式20.換句話說,Windows將阻止您直接與硬件通話。