Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ассемблер-шпоры.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
372.2 Кб
Скачать

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

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

размером 0-FFFFh $ в области транзитных программ.

Учет свободной и занятой памяти ведется с помощью спец. блоков MCB (Memory Control Blocks)=16байт

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

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

быть получен с помощью ф-ции 52h прерывания int 21h, в результате кот. в ES:BX система вернет полный логический

адрес списка сегментов. ПО смещению «-2» хранится адрес

первого MCB. При загрузке программы ей выделяется 2 блока:

под переменные окружения и под саму программу.

Формат MCB

Тип (1)

Адрес владельца (2)

Размер (2)

Резерв(3)

Имя прог-мы, если блок прог-мы(8)

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

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

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

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

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

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

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

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

13(Пример) Организация взаимодействия мп i8086 с клавиатурой.

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

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