Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Распределение адресного пространства (карта памяти)



Для пользовательских программ выделяется память блоками

размером 0-FFFFh $ в области транзитных программ. Учет свободной и занятой памяти ведется с помощью спец. блоков MCB (Memory Control locks)=16байт.

Размещается непосредственно над тем блоком памяти, кот. он контролирует. MCB соединены в цепочку Формат: см. ↓

Адрес первого MCB хранится в области данных ОС и может

Быть получен с помощью ф-ции 52h прерывания int 21h, в результате кот. в ES:BX система вернет полный логический адрес списка сегментов. ПО смещению «-2» хранится адрес первого MCB. При загрузке программы ей выделяется 2 блока:под переменные окружения и под саму программу.

Формат MCB

 

Управление памятью в реальном режиме

1) 48h – выделяет блок памяти

2) 49h освобождает блок памяти

3) 4Ah – изменяет размер блока памяти

Эти ф-ции могут быть использованы программой в след. случаях:

1) когда требуется выделить доп. память под динамические данные

2) если требуется сократить размер выделенного блока до реального размера программы,

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

 

Организация взаимодействия МП i8086 с клавиатурой

Контроллер клавиатуры распознает каждую нажатую клавишу и помещает ее в скэн-код или номер порта 60h. Любой клавише соответствует два скэн-кода: код нажатия и код отпускания(на 80h больше).

При нажатии клавиши вырабатывается сигнал аппаратного прерывания, по которому вызывается процедура int 09 – стандартного обработчика клавиатуры. Int09 считывает из порта 60h скэн-код нажатой клавиши и анализирует его значение. В соответствии с состоянием байта флагов вырабатывается соответствующий ASCII-код нажатой клавиши и помещается вместе со скэн-кодем в кольцевой буфер ввода. Буфер располагается в области данных BIOS, в ячейке 41Eh-43Ch адресуется двумя указателями. Адрес хвостового символа - первая свободная ячейка. Адрес головного символа- самый старый код помещает в буфер. При запросе прикладной программы из буфера считывается самый старый код, адрес головного символа увеличился на 2. при нажатии клавишей скэн-код и ASCII-код помещаются по адресу хвоста, при этом значение хвостового указателя увеличится на 2. если буфер пуст – оба указателя равны между собой, причем в начале работы они равны 1E. Буфер переполнен, когда адрес головы на 4 больше, чем адрес хвоста.

 

Организация текстового видеобуфера. Пример работы с текстовым видеобуфером.

Текстовый видеобуфер находится по адресу 0b800h. Количество страниц зависит от адаптера. Размер страницы=4кб. Страницы нумеруются с 0. Любой код, записывающийся в видеобуфер, сразу отображается на экране в определенной позиции. Символ занимает в видеобуфере 2 байта: код символа и атрибуты. Байты записываются в видеобуфер в том порядке, в котором должны появиться на экране, управляющие коды значения не имеют. Чтоб получить доступ в видеобуфер, требуется в сегментный регистр ES занести сегментный адрес буфера. Значение смещения определяет позицию символа на экране. Вывод осуществляется командами пересылки строк

Mov ax, 0b800h

Mov es,ax

Mov di, 80*2*17+25*2 ; начальный символ на экране

Lea si, message

Mov cx, len_mes

Rep mov sb

; вобласти данных

Message DB ‘П’,65,’Р’,65,‘И’,65, ‘М’,65, ‘Е’,65, ‘Р’,65

Len_mes equ $-message

80*2*12+35*2, 80 – количество мест, 12 – строка, 35 – позиция в строке

 




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.