2016-08-03 30 views
0

Ich benutze 16-Bit-Assembly, um ein DOS-Programm für Bildungszwecke zu erstellen, wie VGA zu programmieren, schrieb ich einen Code, um Farbe zu einigen Pixeln die Drucke eine Zeichenfolge, den Code weg gut mit der Änderung der Pixel Farbe, aber wenn ich versuche, um die Zeichenfolge zu drucken, druckt es seltsame Zeichen, Zut von ihnen ich bin mit MASM 5.00 und Link-3.60 und läuft auf DOSBoxMein Code druckt Müll anstelle des gewünschten Textes

Dies ist mein Code

org 100h 
.model small 
.stack 100h 
.data 
msg   db  'Hello VGA','$' 
.code 
main proc 
mov ax, 0         
mov al, 013h        
int 10h 

mov ah, 02h         ;function code for setting cursor pos. 
mov bh, 0         ;setting page number 
mov dx, 0         ;setting dh, dl to row and column 
int 10h 

mov ah, 0ch         
mov al, 00001110b      
mov cx, -1 

ploop: 
inc cx           ;x point pos. 
mov dx, 0         ;y point pos. 
int 10h 
cmp cx, 9919 
jne ploop 
;keyboard services 

mov ah, 00h         ;read key function code 
int 16h    

;set cursor position 
mov ah, 02h 
mov bh, 0          ;Display page 
mov dh, 04h         ;Row 
mov dl, 00h         ;Column 
int 10h 

;print msg 
mov ah, 09h 
lea dx, msg 
int 21h 
mov ax, 4c00h 
int 21h 
main endp 
     end main 
+5

ich Ihren Code nur lief und es funktionierte gut zu mir. Versuchen Sie, das Datensegment manuell zu initialisieren, fügen Sie die nächsten zwei Zeilen unmittelbar nach '.code' ein:' mov ax, @ data mov ds, ax'. –

+0

@ JoseManuelAbarcaRodríguez Ich habe total vergessen über die Initialisierung des Datensegments, und das war der Fehler, danke für die Nachricht – Kordy

+1

"Keine Ahnung" rate: Sie verwenden DOS 21h im grafischen Modus, vielleicht Ihre DOSBOX + DOS hat Probleme, Zeichen im GFX-Modus auszugeben ? Können Sie versuchen, einige Zeichen mit int 10h ah, 9 auszugeben? Es wird wahrscheinlich dasselbe ergeben, aber nur um sicher zu gehen. (Ich denke, die 21h ruft die 10h trotzdem an, also erwarte kein Wunder) BTW 'mov ax, 0'' mov al, 013h' = du weißt, dass das mit single' mov ax, 13h' gemacht werden kann? Wenn nicht, versuchen Sie erneut zu lesen, was "Axt" und "A" bedeutet. (EDIT: Oh, das 'ds' ist sehr wahrscheinlich das Problem). – Ped7g

Antwort

1

Ich habe gerade Ihren Code ausgeführt und es hat mir gut funktioniert. Versuchen Sie, das Datensegment manuell zu initialisieren, legen Sie sofort nächste zwei Zeilen nach .code:

.code 
    mov ax, @data 
    mov ds, ax 
    . 
    . 
    . 
+0

Jemand schlug mir vor, dass mein Kommentar als Antwort besser war. –