Я использую 16-битную сборку для создания программы DOS для образовательной цели о том, как программировать VGA, я написал код для записи цвета в некоторые пиксели, печатает строку, код прошло хорошо с изменением цвета пикселей, но когда я пытаюсь напечатать строку, она печатает странные символы, выделить из них я использую MASM 5.00 и 3.60 Ссылки и работаю на DOSBoxМой код печатает мусор вместо нужного текста
Это мой код
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
Я просто побежал ваш код и он работал нормально для меня. Попробуйте инициализировать сегмент данных вручную, вставьте следующие две строки сразу после '.code':' mov ax, @ data mov ds, ax'. –
@ JoseManuelAbarcaRodríguez я полностью забыл об инициализации сегмента данных, и это была ошибка, спасибо за уведомление – Kordy
«Не знаю». Предположим: вы используете DOS 21h в графическом режиме, возможно, ваш dosbox + dos имеет проблемы с выходом символов в режиме gfx ? Можете ли вы попробовать вывести некоторый символ с помощью int 10h ah, 9? Вероятно, это приведет к тому же, но просто чтобы быть уверенным. (Я думаю, что 21h называет 10h в любом случае, так что не ожидайте чуда) BTW 'mov ax, 0'' mov al, 013h' = вы знаете, что это можно сделать с помощью одного 'mov ax, 13h'? Если нет, попробуйте перечитать, что такое 'ax' и' al'. (EDIT: о, это 'ds', скорее всего, проблема). – Ped7g