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
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'. –
@ JoseManuelAbarcaRodríguez Ich habe total vergessen über die Initialisierung des Datensegments, und das war der Fehler, danke für die Nachricht – Kordy
"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