ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 06.02.2025

Просмотров: 8944

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Системное программирование

Контрольные вопросы

2. Программная модель микропроцессора 8086

2.1. Представление информации

2.2. Регистры микропроцессора

2.3. Формат машинной команды

2.4. Способы задания операндов команды

Контрольные вопросы

3. Основные понятия языка ассемблера

3.1. Предложения

3.2. Директивы определения данных

3.3. Выражения

Контрольные вопросы

4. Сегментированная модель памяти

4.1. Сегментирование адресов

4.2. Директивы сегментации

4.3. Общая структура программы

4.4. Модели памяти

Контрольные вопросы

5. Основные группы команд

5.1. Соглашению по описанию команд

5.2. Команды пересылки данных

5.3. Арифметические команды

5.4. Логические команды

5.5. Команды переходов

5.6. Команды организации циклов

5.7. Команды обработки строк

5.8. Стековые команды

5.9. Команды ввода-вывода

5.10. Команды прерываний

5.11. Команды управления микропроцессором

Контрольные вопросы

6. Подпрограммы

Контрольные вопросы

7. Разработка одномодульной программы

7.1. Трансляция и компоновка программы

7.2. Отладка программы

Контрольные вопросы

8. Разработка многомодульных программ

8.1. Принципы разработки модулей

8.2. Расширенное применение директивы сегментации

9. Упражнения

Контрольные вопросы

Программирование микропроцессорных устройств

10. Программирование системного таймера

10.1. Описание таймера-счетчика 8254

10.2. Режимы работы таймера

10.3. Структура регистров таймера

10.4. Упражнения

Контрольные вопросы

11. Программирование контроллера прерываний

11.1. Механизм обработки прерываний

11.2. Типы прерываний

11.3. Приоритеты прерываний

11.4. Контроллер прерываний 8259

11.5. Идентификация прерываний

11.6. Прерывания bios и ms-dos

11.7. Упражнения

Контрольные вопросы

12. Программирование параллельного порта

12.1. Интерфейс Centronics

12.2. Работа с параллельным портом на низком уровне

12.3. Стандартные средства работы с параллельным портом

12.4. Упражнения

Контрольные вопросы

13. Программирование последовательного порта

13.1. Основы последовательной передачи данных

13.2. Последовательный интерфейс rs-232c

13.3. Универсальный асинхронный приемо-передатчик 8250

13.4. Порты асинхронного адаптера

13.5. Стандартные средства программирования последовательного порта

13.6. Упражнения

Контрольные вопросы

Литература

141 Кафедра Вычислительной Техники и Программирования Московского Государственного Открытого Университета

Начиная с этой главы, будут рассмотрены методы разработки программ на языке ассемблера для микропроцессора 8086 компании Intel, положившего начало самой распространенной в настоящее время ветви микропроцессорной архитектуры. В последующих главах будут описаны способы программирования различных микропроцессорных устройств и плат сбора данных, используемых при разработке средств измерительных техники.


Контрольные вопросы

  1. Что такое машинный язык?

  2. Какие существуют разновидности трансляторов?

  3. Какая область применения языков низкого и высокого уровня?

2. Программная модель микропроцессора 8086

2.1. Представление информации

Представление целых чисел.Для хранения данных и кодов команд исполняемой программы используетсяоперативная память. Вся доступная оперативная память разбита на ячейки размером 8 разрядов –байты(Byte). Разряды байта нумеруются справа налево от 0 до 7 (рис. 4). Порядковый номер байта называют егоадресом. В микропроцессоре 8086 используются 20-разрядные адреса, поэтому максимальный объем оперативной памяти составляет 220байтов.

7

6

5

4

3

2

1

0

Рис. 4. Представление байта.

Словом(Word) обозначают два соседних байта. Размер слова составляет 16 разрядов, которые нумеруются справа налево от 0 до 15 (рис. 5). Адресом слова считается адрес первого байта (с меньшим адресом).

А

А+1

15 8

7 0

Рис. 5. Представление слова.

Двойным словом(DoubleWord) обозначают четыре смежных байта или два смежных слова. Размер двойного слова составляет 32 разряда, которые нумеруются справа налево от 0 до 31 (рис. 6). Адресом двойного слова считается адрес первого байта с наименьшим адресом.

А

А+1

А+2

А+3

31 24

23 16

15 8

7 0

Рис. 6. Представление двойного слова.

В системе команд микропроцессора 8086 имеются команды для работы с байтами, словами и двойными словами. Слова и двойные слова можно обрабатывать и побайтно.

Целые беззнаковые числав памяти могут храниться в зависимости от их размера в виде байта, слова или двойного слова. Например, если для числа 99 отведен байт, то содержимым ячейки будет двоичное число 01100011 (63h), а если отведено слово, то оно будет иметь вид 00000000 01100011 (0063h). Поскольку в ячейке изkразрядов можно записать 2kразличных кодовых комбинаций, то в виде байта можно представить целые от 0 до 255, в виде слова – целые от 0 до 65535, в виде двойного слова – целые от 0 до 4 294 967 295.


Операции сложения и вычитания многозначных чисел начинаются с действий над младшими цифрами, а затем постепенно переходят к более старшим цифрам. Поскольку в первых моделях микропроцессоров многозначное число нельзя было считывать из па­мяти целиком, то в первую очередь необходимо было считать байт младших цифр, а для этого требовалось, чтобы такой байт хранился в па­мяти первым. Поэтому числа разме­ром в слово и двойное слово хранятся в памяти в обратном порядке: старшие 8 битов размещаются во втором байте, младшие – в первом байте. Например, число 0062h хранится в памяти как показано на рис. 7.

A

A+1

62

00

Рис. 7. Хранение числа 0062h.

В последующих моделях микропроцессоров можно было сразу считать из памяти все число, однако для сохранения преемственности оставили такое «перевернутое» представление.

Целые знаковые числатакже представляются в виде байта, слова и двойного слова. Знаковые числа записываются вдополнительном коде: неотрицательное число записывается как беззнаковое, а отрицательное число х представляется беззнаковым числом:

Число kопределяет количество разрядов в ячейке. Правило формирования дополнительного кода следующее: во всех разрядах, кроме знакового, формируется дополнение до 9 к цифрам разрядов, а затем прибавляется единица в младший разряд. Например, дополнительный код числа +99 – байт 63h или слово 0063h, а дополнительный код числа -99 – байт 9Dh или слово FF9Dh.

В дополнительном коде самый левый бит играет роль знакового. Для неотрицательных чисел этот разряд равен 0, для отрицательных – 1. Знаковые числа размером в слово и двойное слово записы­ваются в памяти также в обратном порядке. При этом знаковый бит оказывается во втором (правом) байте слова.

Представление двоично-десятичных чисел.Существует классы задач, для которых характерен ввод большого массива числовых данных с последующим применением к ним одной или двух арифметических операций и выводом большого количе­ства результатов. В таких условиях переводы чисел из десятичной системы в дво­ичную и обратно занимают большую долю общих временных затрат.

В двоично-десятичном коде(Binary Coded Decimal, BCD-числа) каждая цифра десятичного числа заменяется натетрады(четверки битов от 0000 до 1001), обозначающие эту цифру в двоичной системе. Например, число 193 будет представлено как 0001 1001 0011. Двоично-десятичные числа не требуют перевода из десятичной системы, т.к. двоично-десятичное представление есть последовательность цифр числа.


Существует два способа представления двоично-десятичных чисел: упакованное и неупакованное. При упакованном форматекаждый байт содержит две соседние цифры числа (при нечетном количестве цифр старшая половина последнего байта будет содержать ноль). Принеупакованном форматев каждом байте размещается только по одной цифре, причем в младшей половине. Например, число 193 в упакованном виде будет храниться как 0000 0001 1001 0011, а в упакованном как 0000 0001 0000 1001 0000 0011.

Недостаток такого представления за­ключается в том, что имеющиеся команды позволяют выполнять арифмети­ческие операции только над однозначными двоично-десятичными числами, а операции над многозначными числами приходиться реализовывать программным способом. Однако операции над многозначными двоичными числами реализуются, как правило, аппаратно, а потому выполняются быстрее.

Представление вещественных чисел.В микропроцессоре 8086 не существует команд, выполняющих арифметические операции над вещественными числами. Поэтому для работы с вещественными числами следует использовать арифметичес­кий сопроцессор 8087, либо самостоятельно разрабатывать подпрограммы выполнения арифметических операций на основе доступных команд.

Представление символьных данных.Символьные данные хранятся в па­мяти в двоичном виде. Каждому символу ставится в соответствие неотрицательное число, называемое кодом символа. Соответствие между символами и их кодами называетсясистемой кодировки.

Общеупотребительной является кодировка ASCII (American Standard Code for Information Interchange – американский стандартный код обмена информации), в которой на каждый символ отводится по одному байту, и кодировка UNICODE с двумя байтами на символ. Кодировка ASCII позволяет закодировать 256 различных символов, а UNICODE – 65536. В кодировке ASCII не предусмотрены коды для букв русского алфавита, поэтому используются варианты этой системы кодировки, например, «альтернативная кодировка ГОСТ».


2.2. Регистры микропроцессора

Помимо ячеек оперативной памяти для кратковременного хранения данных используются регистры, расположенные в центральном процессоре и доступные из машинных команд. Доступ к регистрам осуществляется быстрее, поэтому использование регистров заметно уменьшает время исполнения программы. По назначению и способу использования регистры разбивают на группы:

  • восемь 32-битных регистров, которые могут использоваться для хранения данных и адресов (регистры общего назначения, РОН): EAX/AX/AH/AL, EBX/BX/BH/BL, EDX/DX/DH/DL, ECX/CX/CH/CL, EBP/BP, ESI/SI, EDI/DI, ESP/SP;

  • шесть сегментных регистров: CS, DS, SS, ES, FS, GS;

  • регистры состояния и управления: регистр флагов EFLAGS/FLAGS и регистр указателя команды EIP/IP.

Некоторые регистры указаны с наклонной разделительной чертой – это части одного большого 32-разрядного регистра. Сделано так для обеспечения совместимости программ созданных как для 16-разрядных моделей микропроцессоров начиная с 8086, так и для 32-разрядных моделей, начиная с микропроцессора 80386. Количество регистров, за исключением сегментных, такое же, как у 8086, но размерность в два раза больше, что и отображено в обозначениях.

Регистры общего назначенияразбиты на подгруппы:

  • регистры данных;

  • регистры указателей и индексов;

  • регистры сегментов.

Регистры данных предназначены для выполнения арифметических, логических и других машинных операциях. К этой группе относятся 8 регистров (рис. 8):регистр аккумулятораAX,регистр базыBX,регистр счетчикаCX,регистр данныхDX. Для всех этих регистров возможен независимый доступ к старшей и младшей половинам. Старший байт обозначают буквой Н (High), младший L (Low) и первой буквой из названия регистра: АН и AL – в АХ, ВН и BL – в ВХ и т.д. Таким образом, возможен доступ ко всему регистру и к любой его половине.

Рис. 8. Регистры общего назначения.

Каждый из регистров имеет определенную специализацию: некоторые команды требуют, чтобы их операнды находились в определенных регистрах. Например, команда деления требует, чтобы первый операнд находился в регистре АХ или в регистрах АХ и DX (в зависимости от размера операнда), а команды управления циклом используют регистр СХ в качестве счетчика.

Регистры указателей и индексовявляются неделимыми. К ним относятсяуказатель стекаSP,указатель базыBP,индекс источникаSI ииндекс приемникаDI (рис. 9). Они используется для модификации адресов. Если в команде операнд извлекается из памяти, то сослаться на него можно, указав некоторый адрес и некоторый регистр. В этом случае команда работает сисполнительным адресом, который вычисляется как сумма адреса, указанного в команде, и текущего значения указанного регистра. Из ячейки с таким адресом команда и будет извлекать операнд. Замена адреса, указанного в команде, на исполнительный адрес называетсямодификацией адреса, а используемый регистр –регистром-модификатором.