2010-12-01 2 views
1

У меня есть программа, которая должна очистить экран и напечатать мое имя, затем новую строку и снова напечатать мое имя. но когда я запускаю, ничего не появляется. просто программа, запрограммированная нормально. Я делаю это в командной строке Windows, используя debug.Сборка программы help

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

+0

Я точно по длине, потому что я набрал его вручную, а затем вернулся и изменил вызовы –

+0

Я изменил int 20 на 21 на ясном экране. это поможет напечатать мое имя с помощью новой строки, но без ясного экрана –

ответ

2

Ваша первая и самая очевидная ошибка вызывает int 20, Terminate Program, вместо прерывания BIOS int 10 с функцией clearscreen.

EDIT: но почему бы вам не использовать ассемблер для этого? Например, попробуйте NASM. Кроме того, эта программа: Tech, поможет вам найти правильную функцию DOS или BIOS.

+0

У меня нет доступа к этой машине для установки программного обеспечения –

+0

O не читал, я думаю, прерывание 10 работало несколько. очистить верхнюю часть экрана –

1

Вы пытаетесь вызвать аппаратное прерывание (int 20). Из-за защищенного режима вы не сможете войти в режим 20. Другими словами, Windows будет блокировать вас от прямого общения с оборудованием.

+0

Он запускается в консоли, где вы можете запустить старый 16 DOS-код. Большинство вызовов прерываний эмулируются Windows. 'int 20' означает Exit program,' int 21' - Call DOS. – ruslik

+0

Я не понимаю. У меня нет проблем при запуске короткой программы, такой как mov dx, 0200; mov ah, 09; int 21; int 20 –