- •Щемелева т.К.
- •Архитектура и программирование реального режима микропроцессоров фирмы 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
9.1.3. Создание исполняемого файла
Создание исполняемого файла производится программами LINK.EXE или TLINK.EXE, для этих программ исходным является файл типа *.оbj, полученный на предыдущем этапе работы транслятора. Для запуска в командной строке MS DOS ввести строку:
LINK.EXE MYPROG.OBJ
В случае отсутствия ошибок будут получены файл карты памяти *.map и исполняемый файл *.exe. Вашей программы с расширением *.exe. В случае использования LINK.EXE в процессе работы будут заданы несколько запросов об именах файла карты памяти и файлов подключаемых библиотек (можно просто нажимать на ENTER на каждый запрос). После запуска своего EXE-файла вы уже можете судить о правильности написанной программы: если ЭВМ зависнет - что-то неверно. Но завершение исполняемого exe-файла без зависания, о чем свидетельствует возврат в NC , не гарантирует отсутствие ошибок. Семантические (смысловые) ошибки может выявить только программист на этапе отладки программы.
9.1.4.Отладка программы в turbo debugger’е
Для отладки программы ее необходимо загрузить в отладчик TURBO DEBUGGER, где в пошаговом режиме можно проследить работу программы. Инструкция по применению TURBO DEBUGGER приводится в ПРИЛОЖЕНИИ.
9.2. Контрольные вопросы и задания
1. Если регистр AX содержит 1A2BH, то что содержат регистры AL и AH:
1) AH=1A 2) AH=2B 3) AH=0000 4) AH=1A2B
AL=2B AL=1A AL 1A2B AL=0000
2. Какая команда используется для передачи для передачи данных из стека в аккумулятор:
1)MOV AX 2) POP AX 3) PUSH AX 4) STA AX
3. Какая команда используется для передачи для передачи данных из аккумулятора в стек:
1)MOV AX 2) POP AX 3) PUSH AX 4) STA AX
4. Каково назначение директивы DB в следующей записи: TEMP DB ?:
1) Резервирует байт под переменную TEMP;
2) Задает начальное значение переменной TEMP;
5. С помощью каких регистров, в основном, осуществляется доступ к сегменту данных программы:
1)AX, BX, CX, DX 2) DS, ES 3) EAX, EBX 4) BP, IP
6.Какими директивами отмечают конец и начало каждой процедуры:
1)SEGMENT, ENDS 2) ASSUME 3) PROC, ENDP
7. Переменные определены указанным способом. Какую из них можно переопределить в последующем:
1)K EQU 1024 2) K=1024
8. С помощью каких регистров осуществляется доступ к сегменту стека:
1)AX, BX, CX, DX 2) DS, ES 3) EAX, EBX 4) SS
9. Какими директивами отмечают конец и начало каждого сегмента:
1) SEGMENT, ENDS 2) ASSUME 3) PROC, ENDP
Тема 10. Организация ветвлений.
10.1.Флаги и их назначение.
Подавляющее большинство программ имеют вид сложных ветвленных алгоритмов. В такой программе нередко требуется принять решение на основании результата только что исполненной команды. В этом случае используется регистр флагов (признаков) - в него АЛУ МП автоматически записывает некоторые результаты полученные при выполнении операций. Каждый флаг может иметь два значения: истинно (флаг=1) и ложно (флаг=0).
Регистр флагов:
15 7 0
|
|
|
|
OF |
DF |
IF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
|
Все флаги можно разделить на две группы:
1) Неоперационные - флаги управления МП. Они выставляются программистом с помощью специальных команд. Предназначены для переключения режимов работы МП:
DF - флаг НАПРАВЛЕНИЯ. Устанавливается командами CLD и STD. Используется в командах обработки строк для указания направления продвижения по строке данных. Если DF = 0, то строка сканируется от меньших адресов к большим.
IF - флаг ПРЕРЫВАНИЙ. Устанавливается командами CLI и STI. Используется для запрещения ВНЕШНИХ прерываний (ЗА ИСКЛЮЧЕНИЕМ НЕМАСКИРУЕМЫХ). Если IF = 0, то прерывания не возникают.
TF - флаг ТРАССИРОВКИ. Устанавливается комбинацией команд через стек (смотрите применение команды PUSHF). Используется для перевода микропроцессора в одношаговый режим. Если TF = 1, включен режим трассировки.
2) Операционные - флаги устанавливаются автоматически в зависимости от результата выполнения предыдущей операции. Используются для управления ветвлением в программах:
OF - флаг ПЕРЕПОЛНЕНИЯ. Устанавливается арифметическими операциями. Используется для определения переполнения в операциях с числами, представленными в дополнительном коде. Если OF = 1, то результат арифметической операции вышел за допустимые пределы.
SF - флажок ЗНАКА. Устанавливается арифметическими операциями. Используется для определения знака числа в знаковой арифметике по старшему биту результата операции. Если SF = 1, то результат отрицательный.
ZF - флаг НУЛЯ. Устанавливается арифметическими операциями. Показывает, был ли равен нулю результат последней операции. Если ZF = 1, то результат равен нулю.
AF - флаг ДОПОЛНИТЕЛЬНОГО ПЕРЕНОСА. Устанавливается арифметическими операциями. Используется в командах десятичной арифметики. Фиксирует перенос из младшей тетрады результата в старшую. Если AF = 1, то произошел перенос.
PF- флаг ЧЕТНОСТИ. Устанавливается арифметическими операциями. Используется для контроля правильности передачи данных. Фиксирует наличие четного количества единиц в младших 8 битах результата последней операции. Если PF = 1, то количество единиц четное.
CF - флаг ПЕРЕНОСА. Устанавливается арифметическими операциями. Используется для определения переноса (при сложении) или заема (при вычитании), а также значения выдвигаемого бита после операций сдвигов. Если CF = 1, то произошел перенос (заем).
Состояние некоторых флагов можно изменить с помощью команд управления состоянием отдельных флажков.
CLC сбросить флаг CF в 0
STC Установить флаг CF в 1
CMC Инвертировать флаг CF
CLD Сбросить флаг DF в 0
STD Установить флаг DF в 1
CLI Сбросить флаг IF в 0
STI Установить флаг IF в 1
Для организации ветвлений используются команды передачи управления или переходов. Их выполнение заключается в изменении содержимого регистров CS и IP.