- •Щемелева т.К.
- •Архитектура и программирование реального режима микропроцессоров фирмы intel
- •Учебное пособие
- •Пермь 2001
- •Содержание
- •1.2.Переводы между позиционными системами счисления
- •1.3.Система кодирования символов ascii
- •1.4. Преобразование строки ascii-кодов в двоичное и шестнадцатеричное число
- •1.5. Применение систем счисления в эвм
- •1.6. Контрольные вопросы и задания
- •Тема 2. Представление данных на языке ассемблера и их хранение в памяти пк
- •2.1. Биты, байты и слова
- •2.3. Размещение различных типов данных в памяти пк
- •2.4. Отрицательные числа
- •2.5. Контрольные вопросы и задания
- •Тема 3. Элементы архитектуры персонального компьютера: сегментная память и регистровая структура микропроцессора
- •3.1. Понятие сегмента
- •3.2. Способ адресации ячеек сегментированной памяти
- •3.4. Программистская модель мп i8086. Назначение регистров.
- •Регистры общего назначения
- •Регистры сегментов и указатель команд
- •3.5. Контрольные вопросы и задания
- •Тема 4. Создание программы в ехе-формате
- •4.1. Программы на языке транслятораMasm.
- •4.1.1. Определение сегментов и данных.
- •4.1.2. Структура программы.
- •4.2. Программы на языке транслятораTasm.
- •4.2.1. Особенности транслятора.
- •4.2.2. Определение сегментов и данных .
- •4.2.3. Директива model.
- •4.2.4. Директивы упрощенного описания сегментов.
- •4.2.5. Структура программы.
- •4.2.6. Директивы startupcode и exitcode.
- •4.3. Контрольные вопросы и задания
- •Тема 5. Способы адресации данных в командах языка ассемблер
- •5.1. Регистровая адресация
- •5.2. Непосредственная адресация.
- •5.3. Прямая адресация.
- •5.4. Косвенная регистровая.
- •5.5. Адресация по базе.
- •5.6. Индексная адресация.
- •5.7. Адресация по базе с индексированием.
- •5.8. Контрольные задания.
- •Тема 6. Основные команды языка Ассемблер
- •6.1. Команды пересылки.
- •1) Пересылка данных
- •2) Пересылка адресов
- •4) Пересылка в стек и из стека
- •6.2. Арифметические операции.
- •2) Арифметические операции над двоичными кодами.
- •3) Команда сравнения:
- •6.3. Команды корректировки.
- •6.4. Команды логических операций.
- •1) Поразрядные логические операции:
- •2) Команды сдвига
- •6.5. Команды передачи управления.
- •6.6. Команды организации цикла.
- •6.7. Команды вызова процедур и возврата из них.
- •6.8. Команды прерываний и возврата из них.
- •6.8.1. Функции ввода/выводаDos.
- •6.8.2. ФункцииBios управления экраном.
- •Тема 7. Стек
- •7.1.Стек и сегмент стека
- •7.2.Стековые команды
- •7.3. Доступ к элементам стека
- •Тема 8. Практическая работа на пк.
- •Тема 9. Создание линейных программ
- •9.1 Создание линейной программы.
- •9.1.1. Составление текста программы.
- •9.1.2 Трансляция.
- •9.1.3. Создание исполняемого файла
- •9.1.4.Отладка программы в turbo debugger’е
- •9.2. Контрольные вопросы и задания
- •Тема 10. Организация ветвлений.
- •10.1.Флаги и их назначение.
- •10.2 Команда безусловного перехода jmp
- •10.3 Команды условных переходов
- •10.4. Создание разветвленной программы.
- •10.4.1. Составление текста программы.
- •10.4.2.Трансляция.
- •10.4.3. Создание исполняемого файла.
- •10.5. Контрольные вопросы и задания
- •Тема 11. Организация циклов
- •11.1. Команды управления циклом
- •11.2.Создание циклической программы.
- •11.2.1.Составление текста программы.
- •11.2.2.Трансляция.
- •11.2.3.Создание исполняемого файла
- •11.2.4.Отладка программы в turbo debugger’е
- •11.3. Контрольные вопросы и задания
- •Тема 12. Циклическая разветвленная программа
- •12.1.Создание программы.
- •12.1.1.Составление программы
- •12.1.2.Трансляция.
- •12.1.3.Создание исполняемого файла.
- •12.1.4. Отладка программы в turbo debugger’е
- •12.2.Контрольные вопросы
- •12.3. Контрольные задания
- •Тема 13. Связь ассемблера с языкомPascal.
- •13.1 Общие положения
- •13.2 Организация связи
- •13.3 Передача аргументов (и возврат результата в случае функции)
- •13.4 ДирективаArg
- •13.5 Использование операндов директивыmodel
- •13.6 Передача данных остальных типовPascal
- •13.7 Возврат значения в программу наPascal
- •13.8 КомандыEnter иLeave
- •13.9 Итоги
- •Листинг 1.2. Ассемблерное представление.
- •Тема 16. Рекомдации начинающему программисту
- •Тема 17. Контрольная работа
- •Список литературы
- •Приложение 1 Инструкция по работе с программой Turbo Debugger.
- •Приложение 2 Практическая работа на пк
- •Приложение 3 ключи командной строкиtasmиtlink
5.1. Регистровая адресация
Регистровая адресация имеет место, если в команде указывается имя регистра, при этом учитывается размер операнда:
если в команде указан, например, AL, то операнд хранится в регистре AL и его размер равен одному байту. То же для всех однобайтных регистров.
Если в команде, например, BX, то операнд хранится в BX и имеет размер слова (два байта). То же для всех двухбайтных регистров.
Для хранения операндов и результатов могут использоваться РОН, индексные регистры и регистры-указатели.
Пример:
MOV AX, BX ; AX:=BX
ADD CX, AX ; CX:=AX
PUSH CX ; Затолкнуть в стек содержимое CX
5.2. Непосредственная адресация.
Операнд (8- или 16-разрядная константа) содержится непосредственно в теле команды, т.е. непосредственная адресация имеет место, если операнд указывается в команде численным значением (константа), в любой допустимой системе счисления (2,10,16). Т.к. результат по умолчанию сохраняется в первом операнде, нельзя адресовать непосредственно операнд, размещённый первым (т.е. нельзя MOV 15, AX).
Пример:
MOV AX, 100 ; AX:=100
ADD AX, 5 ; AX:=AX+5
MOV CX, 0FFFFH ; CX:=65535
5.3. Прямая адресация.
Прямая адресация имеет место, если операнд указывается именем, определённым в одном из сегментов.
Например:
MOV AX, X ; AX:=X ( Слово! )
ADD AH, B ; AH:=AH+B ( Байт! )
; где X и B ранее описаны
5.4. Косвенная регистровая.
Исполнительный адрес операнда (точнее, его смещение) содержится в одном из регистров BX, BP, SI или DI. Для указания косвенной адресации этот регистр должен заключаться в скобки:
MOV AX, [BX] ; AX:= слово, содержащееся по адресу DS:BX
Каждый из регистров по умолчанию работает со своим сегментным регистром: DS:BX; SS:BP; DS:SI; ES:DI. Допускается явное указание сегментного регистра, если он отличается от принятого по умолчанию:
MOV AX, ES:[BX]
Рис. 5.1. Косвенная адресация. Рис. 5.2. Адресация по базе.
5.5. Адресация по базе.
Базовый регистр BX или BP содержит базу (адрес начала некоторого сегмента памяти), относительно которой ассемблер вычисляет смещение.
Пример:
MOV AX, [BX]+10
5.6. Индексная адресация.
Один из индексных регистров SI или DI указывают положение элемента относительно начала некоторой области памяти. Пусть, например, AOB – массив байтов. Тогда:
MOV SI, 15 ; SI:=15
MOV AH, AOB[SI] ; AH:=[AOB+15], т.е. 16-й по порядку
; байт от начала массива
MOV SI, 0 ; SI:=0 MOV AOB[SI], AH
; пересылаем AH в первый элемент массива
Рис.5.3. Индексная адресация. Рис. 5.4. Адресация по базе с индексированием.
5.7. Адресация по базе с индексированием.
Вариант индексной адресации для случая, когда индексируемая область памяти задается своей базой.
Пример:
MOV AX, [BX][SI]
Этот тип индексации удобен при обработке двумерных массивов. Если, например, AOB рассматриваем как массив 10x10 байт, то для доступа к элементу AOB[2, 3] можно использовать фрагмент:
MOV BX, 20 ; BX:=20, база строки 2
MOV SI, 2 ; SI:=2, номер 3-го элемента
MOV AX, AOB[BX][SI] ; доступ к элементу
5.8. Контрольные задания.
1. Укажите правильную запись команды при непосредственной адресации второго операнда:
1) MOV AX, CX 4) MOV AL, 10
2) MOV AX, [BX] 5) MOV AX, TABLE
3) MOV AX, offset TABLE 6) MOV AX, [DI]
2. Укажите правильную запись команды при прямой адресации второго операнда:
1) MOV AX, CX 4) MOV AL, 10
2) MOV AX, [BX]+10 5) MOV AX, TABLE
3) MOV AX, OFFSET TABLE 6) MOV AX, [DI]
3. Укажите правильную запись команды для косвенной регистровой адресации второго операнда:
1) MOV AX, CX 4) MOV AL, 10
2) MOV AX, [BX] 5) MOV AX, TABLE
3) MOV AX, OFFSET TABLE 6) MOV AX, [DI]
4. Укажите правильную запись команды для адресации по базе второго операнда:
1) MOV AX, CX 4) MOV AL, 10
2) MOV AX, [BX]+10 5) MOV AX, TABLE
3) MOV AX, OFFSET TABLE 6) MOV AX, [DI]
5. Укажите правильную запись команды с индексированием второго операнда:
1) MOV AX, CX 4) MOV AL, 10
2) MOV AX, [BX] 5) MOV AX, TABLE
3) MOV AX, OFFSET TABLE 6) MOV AX, [DI]
6. Укажите правильную запись команды при регистровой адресации обоих операндов:
1) MOV AX, CX 4) MOV AL, 10
2) MOV AX, [BX] 5) MOV AX, TABLE
3) MOV AX, OFFSET TABLE 6) MOV AX, [DI]
7. Укажите правильную запись команды для прямой адресации первого операнда:
1) MOV AX, CX 4) MOV AX, TABLE [DI]
2) MOV AX, [BX] 5) MOV TABLE, AX
3) MOV AX, OFFSET TABLE
8. Укажите правильную запись команды для косвенной регистровой адресации первого операнда:
1) MOV AX, CX 4) MOV ES:[BX], 10
2) MOV [DI], [BX] 5) MOV AX, TABLE
3) MOV CX, OFFSET TABLE 6) MOV AX, [DI]
9. Укажите правильную запись команды с индексированием по базе второго операнда:
1) MOV AX, CX 4) MOV AX, TABLE [BX][DI]
2) MOV AX, TABLE [BP] 5) MOV TABLE[BP][SI], AX
3) MOV AX, OFFSET TABLE
10. Определить тип адресации второго операнда. Составить операционную схему выполнения команд.
1) MOV AL,20 3) PUSH AX
2) MOV AX,TAB 4) MOV TAB,20
5) MOV AX,CX 10) MOV BX,SI
6) MOV TAB,AL 11) MOV BP,20
7) MOV CX,[BX] 12) MOV [BP],20
8) MOV CX,ES:[BX+5] 13) MOV ES:[BP],20
9) MOV AX,[BX][DI+2] 14) MOV DS:[BP],20
11. Для каждой команды задания 10 нарисовать операционную схему, включить в эту схему УУ МП и указать все управляющие сигналы, которые выставляет УУ МП и для каких блоков и устройств ПК при исполнении
этой команды
закодированной в команде операции
чтения операндов в МП
записи результата операции
12. Для каждой команды задания 10 нарисовать операционную схему и регистр флагов, а в нем указать на какие флаги влияет результат операции.
13. Для каждой команды задания 10 нарисовать функциональную схему выполнения команды, включив в схему блоки МП и ОЗУ, а также шин адреса, данных, управления, связывающие эти блоки. На схеме указать имена и направления передачи сигналов для выполнения заданной команды, например, для этапа чтения команды из регистра команд схема может выглядеть как :
МП
ОЗУ
CS:[IP]
чт
14. Для каждой команды, операционные схемы которых даны на рис. 5.5, 5.6, 5.7, 5.8 определить : размер выделенного штриховкой элемента; тип сегмента, в котором находится операнд; способы адресации операндов. Написать все допустимые варианты команд.
15. Составить команды для пересылки операнда из источника в приемник. Размер операнда, способ адресации, источники и приемники указаны в табл.5.1.
Таблица 5.1.
№ |
Размер операндов |
Способ адресации | |
Источника |
Приемника | ||
1 |
Байт |
Базово-индексн. в доп. сегменте |
Регистровый |
2 |
Байт |
Регистровый |
Базовый со сдвигом |
3 |
Слово |
Индексн. со сдвигом в доп. сегменте |
Регистровый |
4 |
Слово |
Непосредственный |
Прямой |
5 |
Байт |
Косвеная в стеке |
Регистровый |
6 |
Слово |
Непосредственный |
Регистровый |
7 |
Слово |
Непосредственный |
Прямой в стеке |
8 |
Байт |
Регистровый |
Индексн. В доп. Сегменте |