Система команд микропроцессора Intel 8086




Методические указания к лабораторным работам

По курсу

««Микропроцессорная техника в мехатронике и робототехнике»

Часть 1

 

 

Москва 2012

Лабораторная работа №1.

Цель работы - ознакомление с командами микропроцессора Intel 8086 с помощью языка низкого уровня Assembler.

Теоретические положения

Организация памяти микропроцессора Intel 8086

Память логически организована как одномерный массив байтов, каждый из которых имеет 20-битный физический адрес в диапазоне 00000-FFFFF. Полная информация, необходимая для определения физического адреса, содержится в адресном объекте “сегмент:смещение”, который называется указателем адреса и содержит адрес сегмента и внутрисегментное смещение. Сегмент состоит из смежных ячеек памяти и является независимой и отдельно адресуемой единицей памяти объемом 64 Кбайт. Каждому сегменту программой назначается начальный (базовый) адрес, являющийся адресом первого байта сегмента в пространстве памяти. Начальные адреса четырех сегментов, выбранных в качестве текущих, записываются в сегментные регистры CS, DS, SS, ES микропроцессора, тем самым фиксируя текущие сегменты кода (программы), данных, стека и дополнительных данных. Для обращения к данным, находящимся в других сегментах, необходимо изменять содержимое сегментных регистров, что позволяет использовать все пространство памяти. Сегменты могут быть соседними (смежными), частично или полностью перекрывающимися.

Логический адрес ячейки памяти состоит из двух 16-ти разрядных беззнаковых значений: начального адреса сегмента, который называется также просто базой или сегментом, и внутрисегментного смещения, которое определяет расстояние от начала сегмента до этой ячейки. Для получения физического адреса база сегмента сдвигается влево на 4 бита и суммируется со смещением.

Режимы адресации микропроцессора Intel 8086

1. Режим непосредственной адресации. В качестве одного из операндов в команде используется константа длиной 8 или 16 бит.

Пример. MOV DX, 100

2. Режим регистровой адресации. Операнд находится в одном из внутренних регистров микропроцессора.

Пример. MOV DX, AX

3. Режим прямой адресации. В команде используется метка, указываю­щая на смещение ячейки памяти, содержащей операнд, внутри текущего сегмента данных (начальный адрес которого хранится в регистре DS).

Пример. MOV BX, myans

4. Режим косвенной регистровой адресации. В данном случае используется значе­ние операнда по адресу, который содержится в одном из внутренних регистров микропроцессора (обычно SI, DI или BX).

Пример. MOV AX, [SI]

Система команд микропроцессора Intel 8086

Команды передачи данных

Название команды Мнемоника Описание
Переслать MOV Dst, Src Src ® Dst
Обменять XCHG Dst, Src Src «Dst
Поместить в стек PUSH Src Src ® Стек
Извлечь из стека POP Dst Стек ® Dst
Ввести IN AL, номер порта IN AX, номер порта Порт ® AL Порт ® AX
Вывести OUT номер порта, AL OUT номер порта, AX AL ® Порт AX ® Порт

Замечание 1. В командах MOV и XCHG только один из операндов может находится в памяти.

Замечание 2. В командах IN и OUT номер порта может быть указан косвенно - через регистр DX. В этом случае в команде вместо номера порта указывается регистр DX, например: IN AX, DX.

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

Название команды Мнемоника Описание
Сложить ADD Dst, Src Dst + Src ® Dst
Сложить с переносом ADC Dst, Src Dst + Src + CF ® Dst
Инкремент INC Dst Dst + 1 ® Dst
Вычесть SUB Dst, Src Dst - Src ® Dst
Вычесть с заемом SBB Dst, Src Dst - Src - CF ® Dst
Декремент DEC Dst Dst - 1 ® Dst
Сравнить CMP Dst, Src Dst - Src ® Флаги
Изменить знак NEG Dst 0 - Dst ® Dst
Умножить MUL Src AL * Src8® AX AX * Src16® DX, AX
Умножить со знаком IMUL Src AL * Src8® AX AX * Src16® DX, AX
Разделить DIV Src AX / Src8® AL, остаток в AH DX, AX / Src16® AX, остаток в DX
Разделить со знаком IDIV Src AX / Src8® AL, остаток в AH DX, AX / Src16® AX, остаток в DX

Замечание 1. Большинство арифметических команд устанавливают или сбрасывают некоторые флаги состояния, показывающие определенные свойства результата:

* флаг CF устанавливается, если операция дала беззнаковый результат вне диапазона;

* флаг OF устанавливается, если операция дала знаковый результат вне диапазона (так называемое “знаковое переполнение”);

* флаг ZF устанавливается, если результат операции равен нулю;

* флаг SF устанавливается, если старший бит результата операции равен 1, показывая тем самым отрицательное число.

Замечание 2. Различие между знаковыми и беззнаковыми числами заключается в интерпретации двоичных наборов. Беззнаковые числа - это обычные двоичные числа (все биты значащие), а знаковые числа представлены в дополнительном коде. Операции сложения и вычитания одинаковы для обоих типов чисел. Операции умножения и деления существуют в двух вариантах: для беззнаковых чисел (MUL и DIV), и для знаковых чисел (IMUL и IDIV).

Замечание 3. Команда ADC используется при работе с беззнаковыми числами многократной точности, длина которых более 16 бит. Такие числа разделяются на 8- или 16-битные поля, а затем операция сложения циклически выполняется над всеми полями, начиная с младших. Для того, чтобы учесть возможный перенос из старшего разряда на каком-либо шаге сложения и служит команда ADC, учитывающая при каждом следующем сложении возможное возникновение переноса.

Пример. Пусть даны 2 32-х разрядных числа, размещенных в регистрах AX, BX и CX, DX соответственно. Сложение их выполняется следующим образом:

 

1. складываются младшие поля ADD CX, DX

2. складываются старшие поля с учетом переноса ADC AX, BX

 

результат операции находится в регистрах AX, CX.

Аналогично, для вычитания чисел многократной точности используется команда вычитания с заемом SBB.

Замечание 4. Команда CMP используется для сравнения двух чисел. Фактически, она выполняет вычитание, но результат не запоминается, а установившиеся в процессе вычитания флаги позволяют судить о соотношении операндов.

Замечание 5. При выполнении команды деления, если частное не помещается в регистре результата, генерируется специальное прерывание «Деление на 0» с номером вектора 0. Такая ситуация может возникнуть в случае, если делимое слишком велико или делитель слишком мал, в результате чего полученный результат не помещается в регистре соответствующего размера. А также в случае явного деления на 0. Пример:

MOV AX, 6000

MOV DL, 20

DIV DL

результатом операции должно было бы быть значение 300, но оно не помещается в 8-разрядном регистре результата AL.

 

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

Название команды Мнемоника Описание
Логическое И AND Dst, Src Dst AND Src ® Dst
Побитовая проверка TEST Dst, Src Dst AND Src ® флаги
Логическое ИЛИ OR Dst, Src Dst OR Src ® Dst
Исключающее ИЛИ XOR Dst, Src Dst XOR Src ® Dst
Логическое НЕ NOT Dst NOT Dst ® Dst
Логический сдвиг влево SHL Dst, 1 SHL Dst, CL CF Dst 0
Логический сдвиг вправо SHR Dst, 1 SHR Dst, CL 0 ® Dst ® CF
Арифметический сдвиг влево SAL Dst, 1 SAL Dst, CL CF Dst 0
Арифметический сдвиг вправо SAR Dst, 1 SAR Dst, CL Знак ® Dst ® CF
Циклический сдвиг влево ROL Dst, 1 ROL Dst, CL  
Циклический сдвиг вправо ROR Dst, 1 ROR Dst, CL  

Замечание 1. Команда TEST, выполняя объединение по “И” соответствующих бит операндов, сохраняет только состояние флагов, а не результат.

Замечание 2. Второй вариант синтаксиса команд сдвига предполагает, что количество разрядов, на которое выполняется сдвиг, хранится в регистре CL.

Замечание 3. Команды арифметического сдвига можно использовать для быстрого умножения и деления на числа, кратные 2-м. Легко видеть (из свойств двоичной системы счисления), что сдвиг вправо на n разрядов эквивалентен делению на 2 в степени n, а сдвиг влево на n разрядов эквивалентен умножению на 2 в степени n. При этом команды сдвига выполняются в несколько раз быстрее, чем команды умножения и деления MUL и DIV.

Команды передачи управления

Название команды Мнемоника Описание
Безусловный переход JMP met переход на метку met
Перейти, если равно JE met переход, если ZF=0
Перейти, если не равно JNE met переход, если ZF¹0
Перейти, если меньше JL met переход, если SF¹OF
Перейти, если больше JG met переход, если SF=OF и ZF=0
Перейти, если ниже JB met переход, если CF=1
Перейти, если выше JA met переход, если CF=0 и ZF=0

Замечание 1. Команды JL и JG используются при работе со знаковыми данными, JB и JA - с беззнаковыми.

Замечание 2. Команды условных переходов проверяют состояние флагов, и на основании этого выполняют или не выполняют передачу управления на метку met. Состояние флагов устанавливается по результатам выполнения предыдущей (арифметической или логической) команды.

Пример 1. Выполнить переход на метку met1, если содержимое регистра AX равно содержимому регистра BX.

CMP AX, BX

JE met1

Пример 2. Выполнить переход на метку met2, если содержимое регистра AX больше содержимого регистра BX (с учетом знака).

CMP AX, BX

JG met2

Общие сведения о работе

Лабораторная работа выполняется с помощью программы afdn.exe, представляющей собой полноэкранный отладчик реального режима. Рабочий экран отладчика состоит из следующих областей (рис. 1):

Рис. 1

1. Область регистров. В ней отображается текущее значение каждого из внутренних регистров микропроцессора:

AX - аккумулятор

BX - базовый регистр

CX - счетчик

DX - регистр данных

SI - индекс источника

DI - индекс приемника

SP - указатель стека

BP - указатель базы

CS - регистр кодового сегмента

DS - регистр сегмента данных

ES - регистр дополнительного сегмента данных

SS - регистр стекового сегмента

IP - указатель команд

2. Область регистра флагов. Отображается общее текущее значение регистра флагов и отдельно значения каждого из флагов:

CF - флаг переноса

PF - флаг четности

AF - флаг вспомогательного переноса

ZF - флаг нуля

SF - флаг знака

OF - флаг переполнения

DF - флаг направления

IF - флаг разрешения прерываний

TF - флаг трассировки

3. Область стека. Показываются значения 4-х слов, лежащих в вершине стека.

4. Окно кода. В нем отображается текущий участок трассируемой программы.

5. Окно данных. Имеются два окна данных, в каждом из которых возможно отображение заданного участка памяти.

6. Окно командной строки. В командной строке вводятся команды управления отладчиком (см. ниже).

С помощью клавиш F7, F8, F9, F10 производится перемещение между окнами. При нажатии на клавишу F1 происходит выполнение очередной команды (выделенной цветом в окне кода). Клавиша F4 позволяет вывести на экран подсказку.

Основные команды управления отладчиком:

1. R=знач устанавливает значение указанного регистра;

2. A - переход в окно кода с возможностью редактирования текущей команды (выход из этого режима осуществляется путем нажатия комбинации клавиш Ctrl+Home).

3. M n адр. - вывод в окне данных номер n (1 или 2) области памяти, начиная с адреса адр.

4. QUIT - окончание работы с отладчиком;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-07-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: