2010-12-01 27 views
1

J'ai un programme qui est censé effacer l'écran et imprimer mon nom, puis une nouvelle ligne et imprimer à nouveau mon nom. mais quand je cours, rien ne se montre. juste programme teminé normalement. Je le fais dans l'invite de commande Windows en utilisant le débogage.Aide du programme d'assemblage

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) Pourquoi déboguer? 2) Pourquoi êtes-vous sûr de la longueur exacte des routines? 3) Qu'est-ce qui te fait penser que ton nom sera au décalage 0x200? 4) Dans 'clearscreen', est-ce int 20 ou 21? 5) êtes-vous sûr que CS et DS sont égaux? – ruslik

+0

Je suis exact sur la longueur parce que je l'ai tapé à la main et puis suis retourné et modifié les appels –

+0

J'ai changé le int 20 à 21 dans l'écran clair. cette aide pour imprimer mon nom avec la nouvelle ligne, mais pas d'écran clair –

Répondre

2

Votre première erreur la plus évidente est l'appel int 20, Terminate Program, au lieu de l'interruption du BIOS int 10 avec la fonction clearscreen.

EDIT: mais pourquoi n'utilisez-vous pas un assembleur pour cela? Essayez NASM par exemple. En outre, ce programme: Tech, vous aidera à trouver la bonne fonction DOS ou BIOS.

+0

Je n'ai pas accès à cette machine pour installer le logiciel –

+0

Je n'ai pas lu je suppose que l'interruption 10 a fonctionné un peu. effacé le haut de l'écran –

1

Vous essayez d'appeler une interruption matérielle (int 20). En raison du mode protégé, vous ne serez pas en mesure d'entrer dans le mode 20. En d'autres termes, Windows va vous empêcher de parler directement au matériel.

+0

Il doit s'exécuter dans la console, où vous pouvez exécuter l'ancien code 16 DOS. La plupart des appels aux interruptions sont émulés par Windows. 'int 20' signifie programme de sortie,' int 21' s'appelle DOS. – ruslik

+0

Je ne comprends pas. Je n'ai aucun problème lors de l'exécution d'un programme court comme mov dx, 0200; mov ah, 09; int 21; int 20 –