
- •Лучший курс лекций по лучшему языку программирования – языку ассемблера Блок управления памятью (mcb)
- •Программирование на Ассемблере для ibm pc
- •Программная модель 8086
- •Программная модель мп
- •Сегментная память
- •Вывод на экран
- •Вывод строки символов
- •Вывод на экран шестнадцатеричного числа
- •Процедуры
- •Ввод символов
- •Вывод на экран двоичного числа
- •Работа с дисковыми файлами
- •Префикс сегмента программы (psp)
- •Структура префикса программного сегмента.
- •Прерывания.
- •Табличные вызовы подпрограмм.
- •Макрокоманды.
- •Макроопределения.
- •Использование параметров в макроопределениях.
- •Директива local
- •Использование библиотек макроопределений.
- •Конкатенация. (&)
- •Директивы повторения.
- •Условные директивы.
- •Перечисление условных директив.
- •Пример использования ifnb.
- •Пример использования макроопределений.
- •Резидентные программы tsr (terminate and stay resident)
- •Защита резидентной программы от повторной загрузки.
- •Выгрузка резидентной программы.
- •Переключение стека в резидентной программе.
- •Обработчик прерываний от таймера
- •Контроллер прерываний и его программирование
- •Взаимодействие прикладных и системных обработчиков прерываний
- •Резидентный обработчик прерываний от клавиатуры с подключением до системного
- •Резидентный обработчик прерывания от клавиатуры с подключением после системного обработчика
- •Резидентный обработчик прерываний от клавиатуры с подключением как до, так и после системного.
- •Вывод на экран текста средствами bios
- •Режимы дисплея
- •Работа с видеобуфером.
- •Логическая организация текстового видеобуфера.
- •Программирование портов. Звук.
- •Программирование звукового канала таймера.
- •Интерфейс с Си
- •Программы с несколькими сегментами команд.
- •Программы с несколькими сегментами данных.
- •Директива assume. Инициализация сегментных регистров и замена сегментов.
- •Структуры и записи.
Программирование на Ассемблере для ibm pc
Литература:
Д.Бредли. Программирование на языке ассемблера для персональной ЭВМ фирмы IBM. М.: Р. и С.1988
Л. Скэнлон. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера. М.: РиС. 1989
Р. Джордейн. Справочник программиста персональных компьютеров типа IBM PC, XT и АТ. М.: ФиС. 1992.
П. Нортон. Программно-аппаратная организация IBM PC. РиС
П. Нортон. Персональный компьютер фирмы IBM и операционная система MS DOS. М.: РиС, 1991.
Ю.-Чжен Ли, Г.Гибсон. Микропроцессоры семейства 8086/8088. М.: РиС, 1987
П.И.Рудяков, У.Г.Финотенов. Программируем на языке ассемблера IBM PC в 2х частях. Москва ЭНТРОП, 1995 г.
Абель. Язык ассемблера для IBM PC. 1994 г.
Нортон. Программирование на языке ассемблера для IBM PC.
Программная модель 8086
AX |
AH |
AL |
000 |
группа HL |
аккумулятор |
BX |
BH |
BL |
001 |
базовый регистр |
|
CX |
CH |
CL |
010 |
регистр счетчик |
|
DX |
DH |
DL |
011 |
регистр данных |
|
SI |
110 |
группа PI |
индекс источника |
|
DI |
111 |
индекс приемника |
|
|
BP |
101 |
указатель базы |
|
SP |
указатель стека |
|
IP |
указатель команд |
|
FLAG |
регистр флагов |
|
CS |
сегментные регистры |
|
DS |
|
|
ES |
|
|
SS |
МП 8086 – 16 разрядный МП (выпуск 1979 год)
8088 – 8 разрядный вариант 8086 (8 линий данных), но имеет все функциональные возможности 8086.
Отечественный аналог 8086 – КР1810ВМ86.
В 8086 имеется определенная совместимость с 8080. 8086 – базовый МП в семействе 80х86.
Число линий адреса возросло с 16 до 20, то есть мы можем адресовать 1Мб.
Программная модель мп
набор РОН |
AX |
AH |
AL |
аккумулятор |
BX |
BH |
BL |
базовый регистр |
|
CX |
CH |
CL |
регистр счетчик |
|
DX |
DH |
DL |
регистр данных |
|
|
8 разр. |
8 разр. |
|
|
|
SI |
индекс источника |
||
|
DI |
индекс приемника |
||
|
BP |
указатель базы |
||
|
SP |
указатель стека |
||
|
16 разр. |
|
|
CS |
|
сегмент кода |
|
DS |
|
сегмент данных |
|
ES |
|
дополнительный сегмент |
|
SS |
|
сегмент стека |
|
16 разр |
4 разр |
|
|
IP |
указатель команд |
|
|
FLAGH |
FLAGL |
регистр флагов |
SI, DI, BP, SP – могут использоваться и в разных целях (в частности для сравнения 16-разрядных адресов), но чаще по названию.
Регистры АX, BX, CX, DX – 16 разрядные. Имеют старшую и младшую половину, которые могут быть использованы самостоятельно. В этом случае эти 8-битные регистры обозначаются AH, AL, BH, BL, CH, CL, DH, DL. Буквы A, B, C, D являются начальными буквами слов Аккумулятор, База, Счетчик, Данные.
С точки зрения программной совместимости с МП 8080 имеется следующее соответствие:
-
МП 8086
МП 8080
AL
A
BH
H
BL
L
CH
B
CL
C
DH
D
DL
E
Cлово состояния МП имеет 16 бит, но 7 из них не используются.
Флажки разделены на условные (флажки условий) – отражают результат предыдущих операций,
и управляющие (флажки управления), от которых зависит выполнение специальных функций.
Младший байт PSW соответствует 8-битному PSW МП 8080 и содержит все флажки кроме OF.
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
OF |
DF |
IF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
СF |
|
флажки 8080 |
|
флажок |
|
||
SF |
знак |
|
||
ZF |
ноль |
|
||
PF |
паритет |
1, если младшие 8 бит результата содержит четное число единиц |
||
CF |
перенос |
при сложении/вычитании происходит перенос (заем) из старшего бита. |
||
AF |
полуперенос |
перенос-заем из 4 бита |
||
OF |
переполнение |
|
||
|
флажки управления |
|
||
DF |
флажок направления |
применяется в командах манипуляции с цепочками. если сброшен – цепочка обрабатывается с 1-го элемента если установлен – от наибольшего элемента к меньшему |
||
IF |
разрешение прерываний |
если установлен, МП распознает маскируемые прерывания, в противном случае они игнорируются. |
||
TF |
трассировка |
после каждой команды генерируется внутреннее прерывание |
Регистры SS, DS, ES и BS – сегментные регистры – они содержат неявные адреса сегментов. Эти регистры 16-разрядные, но они смещены на 4 разряда влево по отношению к другим. Физический адрес, выдаваемый на шину адреса, определяется следующим образом:
-
смещение
16 бит
+
сегментный адрес
16 бит
0000
физический адрес
20 бит
Применение сегментных регистров разделяет пространство памяти на неперекрывающиеся сегменты, каждый из которых имеет размер 64 Кбайт и начинается на 16-байтной границе, то есть на физическом адресе, кратном 16-ти.
Далее будем называть содержимое сегментного регистра – сегментным адресом. Сегментный адрес 16 – начальным сегментным адресом.
Пример
С
341B -
смещение
Нач. адрес +123А0
сегмента 157ВВ