2017-04-16 4 views
2

C'est le code que j'ai écrit qui fonctionne parfaitement sauf que je n'arrive pas à comprendre comment enlever la chose de la console (d: \). Le code imprime bonjour au milieu de l'écran.J'essaye d'imprimer un message en mode graphique en assembleur mais la console d: est toujours là

IDEAL 
MODEL small 
STACK 100h 
DATASEG 
; -------------------------- 
msg db 'hello' 
; -------------------------- 
CODESEG 
start: 
    mov ax, @data 
    mov ds, ax 
; -------------------------- 
;fullscreen 
MOV AL, 13H 
MOV AH,0 
INT 10H 

mov si,@data;moves to si the location in memory of the data segment 

mov ah,13h;service to print string in graphic mode 
mov al,0;sub-service 0 all the characters will be in the same color(bl) and cursor position is not updated after the string is written 
mov bh,0;page number=always zero 
mov bl,00001111b;color of the text (white foreground and black background) 
;  0000    1111 
;|_ Background _| |_ Foreground _| 
; 

mov cx,5;length of string 
;resoultion of the screen is 244x126 
mov dh,63;y coordinate 
mov dl,122;x coordinate 
mov es,si;moves to es the location in memory of the data segment 
mov bp,offset msg;mov bp the offset of the string 
int 10h 








; -------------------------- 

exit: 
    mov ax, 4c00h 
    int 21h 
END start 

Il y a un fond noir comme prévu et texte blanc au milieu, mais dans le coin supérieur gauche il y a d: \

Merci de nous aider! Lorsque votre programme a fini d'afficher le message, vous le laissez revenir au système d'exploitation à l'aide de la fonction DOS 4Ch.

+1

Je n'ai pas exécuter votre code ... mais que pensez-vous qui va se passer lorsque votre code termine l'exécution? –

Répondre

2

Cela signifie que DOS mettra à nouveau son invite sur l'écran. C'est le "d:" que vous voyez.

Pour avoir assez de temps pour afficher le message, vous devez reporter le retour au DOS.
Attendez pour l'utilisateur d'appuyer sur une touche:

mov ah, 07h ;Input from keyboard without echo to the screen 
int 21h 
mov ax, 4C00h ;Terminate 
int 21h 

;resoultion of the screen is 244x126 
mov dh,63;y coordinate 
mov dl,122;x coordinate 

Je ne vois pas où vous avez obtenu ces données de résolution particulières.
L'écran 13h que vous utilisez a une résolution graphique de 320x200, mais la fonction BIOS 13h que vous avez utilisée pour afficher le texte attend les coordonnées du curseur dans les registres DL et DH. Ceux-ci vont de 0 à 39 pour la colonne et de 0 à 24 pour la ligne.
Pour afficher le texte « bonjour » au milieu de l'écran, vous devez:

mov dl, 18 ;Column 
mov dh, 12 ;Row 
+1

Merci beaucoup! – Emil

+0

Mais que se passe-t-il si je veux que l'utilisateur appuie sur une touche et que le message disparaisse et reste en mode graphique (sans l'invite). Comme un menu avec "Appuyez sur n'importe quelle touche pour continuer". – Emil