2016-08-03 3 views
0

Я использую 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 
+5

Я просто побежал ваш код и он работал нормально для меня. Попробуйте инициализировать сегмент данных вручную, вставьте следующие две строки сразу после '.code':' mov ax, @ data mov ds, ax'. –

+0

@ JoseManuelAbarcaRodríguez я полностью забыл об инициализации сегмента данных, и это была ошибка, спасибо за уведомление – Kordy

+1

«Не знаю». Предположим: вы используете 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

ответ

1

Я только что запустил ваш код, и это сработало хорошо для меня. Попробуйте инициализировать сегмент данных вручную, вставьте две следующие строки сразу после .code:

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

Кто-то предложил мне, чтобы мой комментарий был лучше в качестве ответа. –