- •Щемелева т.К.
- •Архитектура и программирование реального режима микропроцессоров фирмы 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
3.2. Способ адресации ячеек сегментированной памяти
С учетом сегментной адресации памяти, адрес любой ячейки памяти определяется в МП суммированием двух составляющих (логических адресов). Первая составляющая – это адрес сегмента, в котором находится искомая ячейка. Вторая – это адрес ячейки, отсчитываемый от начала этого сегмента, и называемый поэтому адресом смещения ячейки в сегменте. Кратко будем называть эти адреса Асегм и Асмещ. Покажем в карте памяти размещение некоторого сегмента и его содержимого. Следует помнить, что нумерация в ЭВМ принята с цифры 0.
На рис. 3.1 выделена ячейка с номером 5, содержащая байт, то есть Асмещ1=5. Если в памяти размещено слово (рис.3), оно указывается (адресуется) через свой младший байт: Асмещ2 слова в памяти = 3.
Память имеет байтовую организацию – двухбайтовое слово размещается в смежных ячейках, причем старший байт занимает ячейку с большим номером. Адресом слова служит адрес младшего байта.
Рис. 3.1. Размещение в памяти байта. Рис. 3.2. Размещение в памяти слова.
Такой способ адресации ячеек памяти удобен тем, что при смене Асегм не требуется изменять Асмещ: значения адресов смещений всегда отсчитываются от начала сегмента и не зависят от значения адреса сегмента.
ЕслиАсегм является постоянной величиной для программы, то в адресных полях А1 и А2 команды достаточно указывать только Асмещ (данных и результата). Напомним форматы команд:
Рис. 3.3. Форматы команд а) с двумя операндами; б)с одним операндом.
Таким образом, в МП должны храниться адреса всех сегментов исполняемой программы. При каждом обращении к памяти с целью прочитать команду или операнд или записать результат, в МП должен быть сформирован исполнительный адрес требуемой ячейки как сумма Асегм и Асмещ, который МП выбирает из команды или вычисляет по данным команды.
3.4. Программистская модель мп i8086. Назначение регистров.
Совокупность регистров, доступных программисту и используемых им при составлении программ на языке АССЕМБЛЕР или другом машинно-ориентированном языке, называется программистской моделью.
На рис. 3.4 представлена программистская модель МП i8086, содержащая программно-доступные регистры. К их числу относятся регистры общего назначения, сегментные регистры, регистр – указатель команд и регистр признаков - флагов. Все они являются 16-разрядными регистрами.
Регистры общего назначения – это те регистры, которые могут использоваться в любых арифметических, логических и т.п. машинных операциях.
Регистры данных AX, BX, CX, DX служат для хранения операндов и результатов операций. Возможна адресация как целых регистров, так и их младшей и старшей частей, называемых L и H соответственно. Некоторым регистрам наряду с общим назначениями придаются и специальные. В последнем случае в соответствующих командах эти регистры указываются неявно самим кодом операции. Так, в некоторых командах
регистр АХ используется в качестве аккумулятора т.е. регистра, в котором находится один из операндов и в который помещается результат операции;
Регистр ВХ – как базовый регистр, используется при косвенной адресации;
Регистр СХ – как счетчик количества сдвинутых бит в командах сдвига, счетчик числа повторов в командах управления вычислительными циклами и в операциях с цепочками байт;
РегистрDX неявно адресуется в командах умножения и деления, а в некоторых операциях ввода-вывода хранит адрес порта ввода-вывода.
Рис. 3.4. Программистская модель МП i8086.
Как отмечалось выше, любая программа может использовать четыре типа сегмента:
кодов (где хранятся машинные коды команд);
данных;
дополнительных данных;
стека.
Хотя все регистры смещений и сегментов являются 16-разрядными, МП выдает на шину адреса при обращениях к оперативной памяти (ОП) 20-разрядные исполнительные (физические) адреса, позволяющие обращаться к ОП емкостью 1 Мбайт. Это становится возможным благодаря механизму сегментации памяти. Размер сегмента не может превышать 64 Кбайта. Допускается перекрытие сегментов. Базовые (начальные) 16-разрядные адреса сегментов, хранящиеся в соответствующих сегментных регистрах, трактуются как 20-разрядные с нулями в четырех младших разрядах. Другими словами, начальные адреса должны быть кратны 16.
Физический адрес операнда или команды формируется, как это показано на рис. 3.4, суммированием начального адреса соответствующего сегмента (содержимого сегментного регистра, сдвинутого на четыре разряда влево, т.е. дополненного нулями в четырех младших разрядах) и адреса смещения, так же называемого эффективным адресом ЕА. Адрес смещения вычисляется в МП на основе содержащейся в команде информации о способе формирования адреса операнда.
Рис. 3.5. Формирование физического адреса.
МП i8086 имеет для хранения адресов сегментов текущей программы 4 сегментных регистра: CS – для сегмента кода, DS, - для сегмента данных, SS – для сегмента стека, ES – для дополнительного сегмента. Ни в каких арифметических, логических и т.п. машинных операциях эти регистры участвовать не могут. Можно лишь записывать в них и считывать из них, да и то есть определенные ограничения.
Группу указательных и индексных регистров, задающих внутрисегментные смещения, образуют следующие регистры: указателя стека (SP), указателя базы стека (BP), индекса операнда (источника) (SI) и индекса результата (приемника) (DI). К этой группе можно отнести и регистр указателя (счетчика) команд - IP, часто называемого счетчиком команд. Причем сегментные, индексные и указательные регистры применяются попарно, в соответствии с сегментной адресацией следующим образом:
CS и IP- адресуют вместе содержимое сегмента кода программы;
SS и BP или SS и SP- адресуют сегмент стека;
DS и один из регистров BX, SI, DI - адресуют сегмент данных;
Специальное назначение регистров приведено ниже.