Записать символ в видеобуфер MASM

Я пытаюсь написать букву "D" синим цветом на белом фоне, переместив ее в видеобуфер. Что не так с этим кодом?

ВКЛЮЧИТЬ Irvine16.inc

.код
основной ПРОЦ

мув топор,@data
мов дс, топор

мов си, 0b800h
мов слово ptr [si], 44 ч
MOV слово PTR [Си +2] 0701h

мов ах, 08ч
в 21 час

выход

основной ENDP

Внесены изменения в выше. Теперь он собирается, но ничего не отображается.

3 ответа

Решение

Пример примера:

название "привет-мир"
орг 100ч; установить режим видео     
мов топор, 3; текстовый режим 80x25, 16 цветов, 8 страниц (ах =0, ал =3) 
int 10h; сделай это!; отмени мигание и включи все 16 цветов: 
мов топор, 1003ч
MOV BX, 0
10 ч; установить сегментный регистр: 
мов топор, 0b800h
мов дс, топор; печать "Привет, мир"; первый байт является кодом ASCII, второй байт является кодом цвета. 

мов [02h], 'h'

mov [04h], 'e'

мов [06h], 'l'

мов [08h], 'l'

mov [0ah], 'o'

mov [0ch], ','

mov [0eh], 'w'

mov [10h], 'o'

mov [12h], 'r'

mov [14h], 'l'

мов [16h], 'd'

mov [18h], '!'; раскрасить все символы: 
mov cx, 12; количество символов. 
мов ди, 03h; начать с байта после 'h' 

с: мов [ди], 11101100b; светло-красный (1100) на желтом (1110) 
    добавить ди, 2; пропустить следующий код ASCII в памяти VGA. 
    петля с; дождитесь нажатия любой клавиши: 
мов ах, 0
в 16 часов

RET

Надеюсь, этот образец поможет вам

1) 0b800h - адрес сегмента видеобуфера. mov word ptr [si], 44h адреса только смещение (здесь: 0b800h) адреса сегмента в DS - а также DSне указывает на видео буфер Я предлагаю загрузить видео сегмент в ES и использовать переопределение сегмента (ES:).

2) Буква плюс цвет образуют слово. В буфере видео сначала идет буква, затем цвет. Цвет фона и переднего плана использует каждый кусочек (4 бита). Из-за "немного порядкового номера" (Google для него) слово должно иметь формат цвет / буква, например, белый / синий /'D' = 7144h

Это совместимый с Irvine16 пример:

INCLUDE Irvine16.inc
INCLUDELIB Irvine16.lib

.CODE
main PROC
;   mov ax,@data                ; No .DATA in this example
;   mov ds,ax

    mov si, 0b800h              ; Initialize ES with video buffer
    mov es, si

    xor si, si                  ; Position 0 is top left
    mov word ptr es:[si], 7144h ; White background ('7'), blue foreground (1), letter 'D' (44)

    mov ah, 08h                 ; Wait for key - http://www.ctyme.com/intr/rb-2561.htm
    int 21h

    exit                        ; Irvine16: end of program
main ENDP

END main

Посмотрите на листинг 15 здесь:

http://stuff.pypt.lt/ggt80x86a/asm8.htm

Другие вопросы по тегам