Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СП - ASM / Лабораторная работа №2 Видеопамять, методы адресации.doc
Скачиваний:
18
Добавлен:
03.03.2016
Размер:
293.89 Кб
Скачать

25

ЛАБОРАТОРНАЯ РАБОТА №2

ИЗУЧЕНИЕ СРЕДСТВ РАБОТЫ С ПАМЯТЬЮ И ПОРТАМИ ВВОДА-ВЫВОДА

НА ПРИМЕРЕ РАБОТЫ С ВИДЕОПАМЯТЬЮ И ПОЛУЧЕНИЯ СВЕДЕНИЙ ОБ ОБОРУДОВАНИИ ПЭВМ

Цель работы: изучить и освоить специальные средства языка С для составления системных программ: возможности работы с памятью и портами ввода-вывода, средства BIOS, MS-DOS и языка С для получения информации об оборудовании ПЭВМ.

Порядок выполнения работы

При домашней подготовке самостоятельно на основе материалов лекций, справочной системы, рекомендуемой литературы, а также электронных ресурсов Internet изучить:

      1. специальные средства ЯВУ С наиболее часто используемые при составлении системных программ: поразрядные логические операции (&,|,^,~), операции сдвига влево и вправо (<<,>>), классы памяти (auto, register, extern, static volatile), структуры и объединения (особенно структуры с битовыми полями), средства доступа к регистрам (псевдорегистры, объединения REGS, SREGS, REGPACK), средства доступа к оперативной памяти (функции peek(), peekb(), poke(), pokeb(), указатели и операции взятия адреса & и разыменования *, особенности арифметических и логических операций с указателями, макросы FP_SEG(), FP_OFF(), MK_FP(),функции malloc(), free(), realloc() и т.п.), функции доступа к портам ввода-вывода (функции inport() inportb(), outport(), outportb()) ;

      2. карту памяти IBM PC в реальном режиме процессора Intel x86;

      3. способы хранения информации об имеющемся оборудовании и способы программного обращения к ней.

I Изучение способов адресации

В соответствии с индивидуальным вариантом задания составить на ЯВУ С программу вывода на экран сведений об авторе (фамилия, имя отчество) с использованием обращения к видеопамяти (без использования стандартных функций вывода) с использованием различных способов адресации (фамилия) и функций языка С poke (имя), pokeb (отчество). Каждую букву выводить различным цветом символа и цветом фона.

Сведения из теории

Оперативная память IBM PC-совместимого ПК, работающего под управлением MS-DOS, в пределах 1 Мбайт распределяется в соответствии со следующей таблицей.

Адрес

Наименование и описание

0000:0000

Таблица векторов прерываний (256 4-байтовых адресов)

0040:0000

Область данных BIOS

0050:0000

Область данных DOS

XXXX:0000

Код BIOS (считанный из IO.SYS)

XXXX:0000

Обработчик прерываний DOS, включая INT 21h (MSDOS.SYS или IBMDOS.COM)

XXXX:0000

DOS: буфера, области данных и устанавливаемые драйверы

XXXX:0000

Резидентные программы и данные

XXXX:0000

Текущая выполняемая программа (типа .COM или .EXE). Сначала программе выделяется память до адреса A000:0000 или до максимального для данного компьютера адреса

XXXX:0000

Транзитная часть СOMMAND.COM. Перезагружается, если была чем-то перекрыта

Граница 640 К зоны

A000:0000

VGA-память для некоторых видеорежимов

B000:0000

Видеопамять монохромного адаптера и адаптера Hercules

B800:0000

Видеопамять EGA (также страница 2 для Hercules)

C800:0000 E000:0000

Внешний код ПЗУ. (Дополнительный BIOS НЖМД или EGA)

E000:0000 E000:FFFF

Модули ПЗУ материнской платы в блоках по 64 К (только AT)

F600:0000

Обработчик ошибок при загрузке, ПЗУ-резидентный интерпретатор BASIC (для PC фирмы IBM)

FE00:0000

ПЗУ - BIOS: POST и код загрузки, обработчики прерываний и прочее

F000:FFF0

Команда JMP на программу, выполняемую при включении или сбросе

F000:FFF5

Дата издания BIOS (в коде ASCII)

F000:FFFE

Идентификационный код IBM PC

Видеопамять организована в виде последовательности пар байт, первый из которых содержит код символа, а второй – атрибуты его изображения (цвет символа и фона). Логически эту последовательность можно представить в виде двумерного массива.

Относительный адрес в памяти для любого символа, выводимого на экран дисплея в режиме 8025 символов определяется по формуле:

относительный адрес = ((y*80 + x)*2) + (страница*4096)

Структура видеопамяти в текстовом 16-цветном режиме 8025 символов

Формат байта атрибутов символа приведен на рис.

Способом, или режимом адресации называют процедуру нахождения операнда для выполняемой команды. Если команда использует два операнда, то для каждого из них должен быть задан способ адресации, причем режимы адресации первого и второго операнда могут как совпадать, так и различаться. Операнды команды могут находиться в разных местах: непосредственно в составе кода команды, в каком-либо регистре, в ячейке памяти; в последнем случае существует несколько возможностей указания его адреса. Способы адресации являются элементом архитектуры процессора, отражая заложенные в нем возможности поиска операндов.

Регистровая адресация. Операнд (байт или слово) находится в регистре. Этот способ адресации применим ко всем программно-адресуемым регистрам процессора.

inc СН ;Плюс 1 к содержимому СН

push DS ;DS сохраняется в стеке

xchg ВХ,ВР ;ВХ и ВР обмениваются содержимым

mov ES, АХ ;Содержимое АХ пересылается в ES

Непосредственная адресация. Операнд (байт или слово) указывается в команде и после трансляции поступает в код команды; он может иметь любой смысл (число, адрес, код ASCII), а также быть представлен в виде символического обозначения.

int 21h ;Команда прерывания с аргументом 21h

mov АН, 40h ;Число 40h загружается в АН

mov AL,'*' ;Код ASCII символа "*' загружается в AL

Команда mov, использованная в последнем предложении, имеет два операнда; первый операнд определяется с помощью регистровой адресации, второй - с помощью непосредственной. Важным применением непосредственной адресации является пересылка относительных адресов (смещений). Чтобы указать, что речь идет об относительном адресе данной ячейки, а не об ее содержимом, используется описатель offset (смещение):

mes db “Hello World!”

mov DX,offset mes ;Адрес строки засылается в DX

В приведенном примере относительный адрес строки mes, т.е. расстояние в байтах первого байта этой строки от начала сегмента, в котором она находится, заносится в регистр DX.

Прямая адресация памяти. Адресуется память; адрес ячейки памяти (слова или байта) указывается в команде (обычно в символической форме) и поступает в код команды:

;Сегмент данных

meml dw 0 ;Слово памяти содержит 0

mem2 db 230 ;Байт памяти содержит 230

;Сегмент команд