ЛАБОРАТОРНАЯ РАБОТА №2
ИЗУЧЕНИЕ СРЕДСТВ РАБОТЫ С ПАМЯТЬЮ И ПОРТАМИ ВВОДА-ВЫВОДА
НА ПРИМЕРЕ РАБОТЫ С ВИДЕОПАМЯТЬЮ И ПОЛУЧЕНИЯ СВЕДЕНИЙ ОБ ОБОРУДОВАНИИ ПЭВМ
Цель работы: изучить и освоить специальные средства языка С для составления системных программ: возможности работы с памятью и портами ввода-вывода, средства BIOS, MS-DOS и языка С для получения информации об оборудовании ПЭВМ.
Порядок выполнения работы
При домашней подготовке самостоятельно на основе материалов лекций, справочной системы, рекомендуемой литературы, а также электронных ресурсов Internet изучить:
-
специальные средства ЯВУ С наиболее часто используемые при составлении системных программ: поразрядные логические операции (&,|,^,~), операции сдвига влево и вправо (<<,>>), классы памяти (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()) ;
-
карту памяти IBM PC в реальном режиме процессора Intel x86;
-
способы хранения информации об имеющемся оборудовании и способы программного обращения к ней.
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 |
Видеопамять организована в виде последовательности пар байт, первый из которых содержит код символа, а второй – атрибуты его изображения (цвет символа и фона). Логически эту последовательность можно представить в виде двумерного массива.
Относительный адрес в памяти для любого символа, выводимого на экран дисплея в режиме 8025 символов определяется по формуле:
относительный адрес = ((y*80 + x)*2) + (страница*4096)
Структура видеопамяти в текстовом 16-цветном режиме 8025 символов
Формат байта атрибутов символа приведен на рис.
Способом, или режимом адресации называют процедуру нахождения операнда для выполняемой команды. Если команда использует два операнда, то для каждого из них должен быть задан способ адресации, причем режимы адресации первого и второго операнда могут как совпадать, так и различаться. Операнды команды могут находиться в разных местах: непосредственно в составе кода команды, в каком-либо регистре, в ячейке памяти; в последнем случае существует несколько возможностей указания его адреса. Способы адресации являются элементом архитектуры процессора, отражая заложенные в нем возможности поиска операндов.
Регистровая адресация. Операнд (байт или слово) находится в регистре. Этот способ адресации применим ко всем программно-адресуемым регистрам процессора.
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
;Сегмент команд