Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012 ЛР Ассемблер Архитектура ВС 6 семестр.doc
Скачиваний:
7
Добавлен:
03.05.2019
Размер:
454.66 Кб
Скачать

Исследование механизмов работа с видеопамятью персонального компьютера типа ibm. Тестирование и отладка ассемблерных программ.

Все, что изображено на мониторе – и графика, и текст, одновременно присутствует в памяти, встроенной в видеоадаптер. Чтобы изображение появилось на мониторе, оно должно быть записано в память видеоадаптера. Для этой цели отводится специальная область памяти, начинающаяся с абсолютного адреса 0В800h:0000h (для текстовых режимов) и заканчивающаяся 0В800h:0FFFFh. Все, что программы пишут в эти область памяти, немедленно пересылается в память видеоадаптера. В текстовых режимах для хранения каждого изображенного символа используются два байта: байт с ASCII кодом символа и байт с его атрибутом, так что по адресу 0В800h:0000h лежит байт с кодом символа, находящегося в верхнем левом углу экрана; по адресу 0В800h:0001h расположен атрибут этого символа; по адресу 0В800h:0002h – код второго символа в верхней строке экрана и т.д. Таким образом, любая программа может вывести текст на экран простой командой пересылки данных, не прибегая ни к каким специальным функциями DOS или BIOS.

;dirout.asm

;Выводит на экран все ASCII-символы без исключения, используя ;прямой вывод на экран.

;

.model tiny

.code

.386 ;Будет использоваться регистр ЕАХ

;и команда STOSD

org 100h ;Начало com-файла

start:

mov ax, 0003h

int 10h ;Видеорежим 3 (очистка экрана).

cld ;Обработка сток в прямом направлении

;Подготовка данных для вывода на экран:

mov eax, 1F201F00h;первый символ 00 с атрибутом 1Fh.

;затем пробел (20h) c атрибутом 1Fh

mov bx, 0F20h ;Пробел с атрибутом 0Fh

mov cx, offset ctable ;ES:DI – начало таблицы.

cloop:

stosd ;Записать символ и пробел в таблицу ctable.

inc al ;AL содержит следующий символ.

test cx, 0Fh ;Если СХ не кратен 16,

jnz continue_loop ;продолжить цикл.

push cx ;Иначе: сохранить значение счетчика.

mov cx, 80-32 ;Число оставшихся до конца строки символов.

xchg ax, bx

rep stosw ;Заполнить остаток строки пробелами

; с атрибутом 0F.

xchg bx, ax ;Восстановим значение ЕАХ.

pop cx ;Восстановим значение счетчика.

continue_loop

loop cloop

stosd ;Записать последний (256-й)символ и ;пробел.

;Вывод на экран.

mov ax, 0B800h ;Сегментный адрес видео памяти.

mov es,ax

xor di, di ;DI=0, адрес начала видеопамяти в ES:DI.

mov si, offset ctable ;Адрес таблицы в DS:SI.

mov cx, 6 ;15 строк по 80 символов, последняя строка-32.

rep movsw ;Скопировать таблицу ctable в ;видеопамять.

ret ;Завершение com-файла.

end start

Варианты заданий:

  1. Вывести на экран с помощью видеопамяти 1-10 символы ASCII-таблицы.

  2. Вывести на экран с помощью видеопамяти 10-20 символы ASCII-таблицы.

  3. Вывести на экран слово «Привет», красными буквами на синем фоне.

  4. Вывести на экран с помощью видеопамяти 20-30 символы ASCII-таблицы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]