- •3 Методическое пособие для лабораторных работ по курсу «Организация эвм и периферийные устройства» Оглавление
- •1.Введение в архитектуру эвм.
- •1.1.Структура персонального компьютера.
- •2.Архитектура реального режима работы м/п семейства 8086
- •2.1.Форматы данных микропроцессора
- •2.1.1.Числа
- •2.1.2.Символы
- •2.1.3.Указатели
- •2.1.4.Цепочки
- •2.2.Адресация памяти
- •2.3.Внутренние регистры процессора
- •2.3.1.Регистры общего назначения
- •2.3.2.Сегментные регистры
- •2.3.3.Регистры смещения
- •2.3.4.Регистр флагов
- •2.4.Режимы адресации
- •2.4.5.Базовая адресация
- •2.5.1.1. Общие команды.
- •2.5.1.2. Команды push и pop .
- •2.5.1.3. Команды ввода-вывода.
- •2.5.1.4. Адресные команды (пересылки адреса)
- •2.5.1.5. Флажковые команды (команды пересылки флагов).
- •2.5.2.Арифметические команды.
- •2.5.2.1. Команды сложения.
- •2.5.2.2.Команды вычитания.
- •2.5.2.3.Команды умножения и деления.
- •2.5.2.4.Команды расширения знака.
- •2.5.2.5.Десятичная арифметика.
- •2.5.3.Логические команды.
- •2.5.3.1.Булевы команды.
- •2.5.3.2.Команды сдвигов.
- •2.5.3.3.Команды циклических сдвигов.
- •2.5.3.4.Команды двойного сдвига
- •2.5.3.5.Команды работы с двоичными цепочками
- •2.5.4.Команды передачи управления.
- •2.5.4.1.Команды безусловной передачи управления.
- •2.5.4.2. Команды условных переходов.
- •2.5.4.3.Команды SetCondition
- •2.5.4.4 Команды управления циклами.
- •2.5.5.Цепочечные (строковые) команды.
- •2.5.5.1.Команды пересылки цепочки.
- •2.5.5.2.Команды сравнения цепочек.
- •2.5.5.3.Команды сканирования цепочек.
- •2.5.5.4.Команды загрузки.
- •2.5.5.5.Команды сохранения цепочек.
- •2.5.5.6.Команды ввода и вывода цепочек.
- •2.5.5.7.Замена сегмента.
- •2.5.6.Команды управления микропроцессором.
- •2.5.6.1.Команды управления флагами.
- •2.5.6.2.Команды синхронизации.
- •2.5.6.3.Команда холостого хода.
- •2.5.6.4.Команды прерываний.
- •2.5.7.Новые команды микропроцессора 80486
- •3.Директивы и операторы ассемблера
- •3.1.Структура программы
- •3.2.Организация программы.
- •3.2.1. Модели памяти
- •3.2.2. Процедуры
- •3.2.3. Директивы задания набора допустимых команд
- •3.3.Примеры использования директив в программах типа .Exe и .Com.
- •4.Архитектура и система команд арифметического сопроцессора
- •4.1.Форматы чисел сопроцессора
- •4.1.1.`Целые числа
- •4.1.2. Вещественные числа
- •4.1.3.Диапазоны вещественных чисел в х87.
- •4.2.Особые случаи вещественной арифметики
- •4.3.Формирование специальных значений в особых случаях
- •4.3.1. Случай неточного результата.
- •4.3.2.Численное антипереполнение.
- •4.3.3. Денормализованный операнд.
- •4.3.4. Деление на ноль.
- •4.3.5.Численное переполнение.
- •4.3.6.Недействительная операция.
- •4.4.Регистры математического сопроцессора.
- •4.4.1.Численные регистры (регистровый стек).
- •4.4.2.Регистр управления (cw)
- •4.4.3.Регистр состояния.
- •4.4.4. Регистр тэгов (признаков).
- •4.4.5.Указатели особого случая.
- •4.5.Система команд арифметического сопроцессора.
- •4.5.1.Команды передачи данных.
- •4.5.2.Арифметические команды
- •4.5.3.Дополнительные арифметические команды
- •4.5.4.Команды сравнений
- •4.5.5.Трансцендентные команды
- •4.5.6.Административные команды
- •4.6.Совместная работа двух процессоров в системе.
- •4.6.1.Синхронизация по командам.
- •4.6.2.Синхронизация по данным.
- •5.Примеры программ
- •Список рекомендуемой литературы
2.5.1.1. Общие команды.
Команда MOV - переслать данные, основная команда группы.
Команда MOV осуществляет пересылку байт, слов или двойных слов.
Форматы команды MOV приведены в таблице 2.2.
Таблица 2.2. Форматы команды MOV.
Передача данных |
Слово |
Байт |
Регистр в регистр |
MOV AX, BX |
MOV AH, BH |
Операнд в регистр или память |
MOV CX, 850 |
MOV BL, 35 |
|
MOV PW, 850 |
MOV PB, 35 |
Память в регистр |
MOV DX, PW |
MOV CL, PB |
Регистр в память |
MOV PW, DX |
MOV PB, CL |
Регистр в сегментный регистр |
MOV ES, BX |
|
Сегментный регистр в регистр |
MOV AX, DS |
|
Сегментный регистр в память |
MOV PW, CS |
|
Исключения:
Нельзя пересылать данные из одной ячейки памяти в другую.
Нельзя загрузить в регистр сегмента операнд с непосредственной адресацией.
Нельзя переслать значение одного регистра сегмента в другой.
Нельзя использовать регистры CS и IP в качестве приемника в команде MOV.
Команды MOVSX и MOVZX - новые команды пересылки данных, введенные в систему команд микропроцессора 80386. Форматы команд:
, где
reg- только регистры общего назначения, mem - ячейка памяти.
MOVSX - пересылает данные и расширяет регистр знаковым разрядом операнда - источника,
MOVZX - пересылает данные и расширяет регистр нулями.
Команда XCHG - осуществляет обмен байт или слов. Один из ее операндов может быть в регистре или памяти, другой - в регистре. Различий между приемником и источником нет. Примеры использования команды прведены в таблице 2.3.
Таблица 2.3. Примеры использования команды XCHG.
Обмен данными |
Слово |
Байт |
Регистр с регистром |
XCHG CX, DX |
XCHG AL, AH |
Регистр с памятью |
XCHG BX, PW |
XCHG BL, PB |
Исключение:
Нельзя выполнить обмен значений регистров сегментов.
2.5.1.2. Команды push и pop .
PUSH - передает слово из источника в стек, а команда POP осуществляет противоположное действие: передает слово из стека в приемник. Регистр SP содержит смещение последнего включенного в стек слова (вершину стека).
! Стек растет по направлению уменьшения адресов !
PUSH начинается с уменьшения содержимого SP на 2, а команда POP завершается увеличением содержимого SP на 2.
Операндами команд PUSH и POP могут быть сегментный регистр, несегментный (шестнадцатиразрядный) регистр или слово в памяти. Кроме того, в команде PUSH можно указывать непосредственный операнд, что не допускается в команде PUSH для процессора 8086. POP- не может содержать непосредственный операнд. Форматы команд приведены в таблице 2.4.
Таблица 2.4. Форматы команд PUSH и POP.
Операнд |
Включение |
Извлечение |
Регистр |
PUSH AX |
POP BX |
Память |
PUSH PW |
POP PW |
Сегментный регистр |
PUSH DS |
POP ES |
Непосредственный операнд |
PUSH 856 |
|
Все 16-битные регистры |
PUSHA |
POPA |
Все 32-битные регистры |
PUSHAD |
POPAD |
Исключение:
POP CS и POP IP - недействительные операции.
PUSHA и POPA являются эффективным средством для сохранения содержимого всех регистров (кроме сегментных и IP) в начале выполнения процедуры и восстановления их в конце работы. PUSHA включает в стек регистры в следующем порядке: AX, CX, DX, BX, SP, BP, SI, DI. Значение SP то, что было в нем до выполнения команды PUSHA. PUSHA уменьшает содержимое SP на 2 при включении в стек содержимого каждого регистра. POPA вызывает увеличение содержимого SP на ту же величину, что и PUSHA, ей не требуется запомненное в стеке содержимое регистра SP и она его просто уничтожает. Команды PUSHAD, POPAD работают аналогично с 32-битными регистрами процессора.
Команда XLAT - преобразует значение в регистре AL: она его заменяет на байт из таблицы, адресуемой регистром BX, причем индексом таблицы служит исходное содержимое регистра AL. Удобна для преобразования из одного кода в другой.
Пример использования команды для перевода цифр из 10 системы счисления в код “2 из 5” - любой код, содержащий 2 единичных бита.
Код “2 из 5” приведен в таблице.
Цифра |
Код |
0 |
11000 |
1 |
00011 |
2 |
00101 |
3 |
00110 |
~ |
~ |
9 |
10100 |
TABLE DW 11000B, 00011B, 00101B, 00110B, 01001B, 01010B, 01100B, 10001B, 10010B, 10100B, 11000B
MOV BX, OFFSET TABLE
MOV AL, 7
XLATTABLE