- •Щемелева т.К.
- •Архитектура и программирование реального режима микропроцессоров фирмы 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
4.2.3. Директива model.
Директива MODELиспользуется в режиме IDEAL и позволяет задавать в программе одну из нескольких стандартных моделей сегментации. Синтаксис директивыMODEL:
МODEL [модификатор] модель_памяти [имя_кодового_сегмента]
[, [модификатор_языка] язык] [, модификатор]
В режиме Masmиспользуется тот же синтаксис, но с директивой .MODELПараметр модель_памяти может принимать одно из следующих значений:TINY(крошечная),SMALL(маленькая),MEDIUM(средняя),LARGE(большая),HUGE(огромная).
Модель |
Код |
Данные |
Предполагаемые значения регистров | |
TINY |
near |
Near |
CS=DGROUP |
DS=SS=DGROUP |
SMALL |
near |
Near |
CS=_TEXT |
DS=SS=DGROUP |
MEDIUM |
far |
Near |
CS=<имя_модуля>_TEXT |
DS=SS=DGROUP |
COMPACT |
near |
Far |
CS=_TEXT |
DS=SS=DGROUP |
LARGE |
far |
Far |
CS=<имя_модуля>_TEXT |
DS=SS=DGROUP |
HUGE |
far |
Far |
CS=<имя_модуля>_TEXT |
DS=SS=DGROUP |
TCHUGE |
far |
Far |
CS=<имя_модуля>_TEXT |
DS=SS=NOTHING |
TPASCAL |
near |
Far |
CS=CODE |
DS=DATA SS=NOTHING |
FLAT |
near |
Near |
CS=_TEXT |
DS=SS=FLAT |
Каждая модель_памяти предназначена для какого-то типа организации выполняемого файла:
TINY- код и данные объеденены в одну группуDGROUP. Эта модель используется для создания программ типа .COM. Во многих языках высокого уровня эта модель не поддерживается.
SMALL- код программы находится в одном сегменте. Все данные объеденены в группуDGROUP. Такая модель памяти чаще всего используется в программах, написанных на языках высокого уровня.
MEDIUM- код находится в нескольких сегментах, по одному на каждый программный модуль. Данные объеденены в группуDGROUP.
COMPACT- код находится в одном сегменте. Все данные имеют ближний тип и находятся в группеDGROUP. Для ссылки на данные из кода применяются указатели дальнего типа.
LARGE- код может размещаться в нескольких сегментах, на каждый модуль - новый сегмент. Все данные имеют ближний тип и находятся в группеDGROUP. Для ссылки на данные из кода применяются указатели дальнего типа.
HUGE- так же, как и для моделиLARGE, но возможностиTASMпо использованию всего объема памяти для размещения программы исполтзуются в полной мере.
TCHUGE- так же, как и для моделиLARGE, но с иным использованием сегментных регистров.
TRANSCAL- модель предназначена для поддержки ранних версийBorlandPascal. Для более поздних версий не используется.
FLAT- так же, как и для моделиSMALL, но для создания программ дляOS/2.
Необязательный параметр модификатор в объявлении директивы MODELпозволяет изменять некоторые черты указанной модели, причем при необходимости можно задавать несколько модификаторов. Ниже перечислены все доступные модификаторы:
NEARSTACK- указывает, что сегмент стека будет включен вDGROUP(еслиDGROUPприсутствует) иSSбудет указывать наDGROUP.
FARSTACK- сегмент стека не должен включаться вDGROUPиSSне будет инициализирован.
USE16- указывает (если выбран процессор 80386 или 80486), что все сегменты текущей модели должны использоваться как 16-битовые.
USE32- то же, как 32-битовые.
DOS,OS_DOS - указывает, что данная программа предназначена для использования вDOS.
OS2,OS_OS2- то же,OS/2.
По умолчанию TASMиспользует модификаторыNEARSTACK,DOSиUSE16(USE32, если выбран процессор 80386 или 80486).
Параметр имя_кодового_сегмента, который также является необязательным, может использоваться в модели LARGEи ей подобным для переопределении имени, назначенного кодовому сегменту по умолчанию (обычно это имя модуля с добавлением к нему _TEXT).
Параметры язык и модификатор_языка определяют соглашения для вызова процедур, а также стиль пролога и эпилога процедуры, они определяют, как представляются внешние имена для использования их компоновщиком. TASMавтоматически генерирует код входа и выхода из процедур в стиле одного из следующих языковых соглашений:PASCAL, C, CPP (C++), SYSCALL, STDCALL, BASIC, FORTRAN, PROLOG и NOLANGUAGE. Если язык не указан,TASMиспользуетNOLANGUAGE.
Параметр модификатор_языка указывает на необходимость добавить в код процедур специальные прологи и эпилоги при разработке программ для WINDOWSилиBorland Overlay Loader. Значениями этого параметра могут быть:NORMAL, WINDOWS, ODDNEAR и ODDFAR. По умолчанию установленNORMAL.