Государственное Образовательное Учреждение высшего профессионального образования Московский Авиационный Институт Государственный Технический Университет "маи" кафедра 304. конспект

Вид материалаКонспект

Содержание


В командах ЯА
Система команд МП Intel 80x86 Арифметические команды Команды сложения и вычитания
Десятичная коррекция
Дополнительные команды
Команды умножения и деления
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   15

В командах ЯА:


Мнемоника

Адресная часть

Машинные команды МП занимают от 1 до 6 байтов, причём операционная часть занимает 1 или 2 первых байтов команды, остальное адресная часть.

Операнды могут быть указаны:
  • В самой команде(непосредственная адресация)
  • В одном из регистров, тогда в команде указывается этот регистр (регистровая адресация)
  • В оперативной памяти (ОП) по адресу, который тем или иным образом описан в команде (прямая, базовая или индексная адресация)
  • Некоторые команды требуют, чтобы один из операндов находился в определённом регистре (например в AX), тогда он не указывается в команде( подразумеваемая адресация)

Результат выполнения команды обычно помещается на место первого операнда. Форматы команд разнообразны (в основном двухадресные).

В общем виде запишем : op1 := op1 * op2, где * - какая-то команда, заданная МНК(мнемоникой); op1 – регистр или ячейка памяти, 1 байт или одно слово (2 байта); op2 – непосредственный операнд - регистр или ячейка памяти, 1 байт или одно слово (2 байта).

Система команд МП Intel 80x86



Арифметические команды
  1. Команды сложения и вычитания


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

Перечислим команды, относящиеся к группе команд сложения и вычитания:

Группа а) ADD op1, op2 ; op1 := op1+op2

SUB op1, op2 ; op1 := op1 – op2

Сложение (вычитание) операндов в дополнительном двоичном коде, результат помещается на место первого операнда, второй операнд не изменяется.

Команды корректируют регистр флагов FLAGS в соответствии с результатом операции, а именно:

ZF – нулевой рез-т,

SF – знак результата,

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

CF, AF – флаги переносов,

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


Примеры:

ADD AH, 12 ; AH := AH + 12 (1Б)

SUB z, BX ; z := z – BX (2Б)


Группа б) ADC op1, op2 ; op1 := op1+op2+CF

SBC op1, op2 ; op1 := op1 – op2 – CF

Сложение (вычитание) операндов с переносом, образованным предыдущей командой.Модифицирует флаги аналогично группе а.

Например, если требуется сложить двойные слова, расположенные в парах регистров

(AX, BX) := (AX, BX) + (CX, DX),

причем AX, CX – старшие байты слагаемых,

BX, DX – младшие байты.

Сложение выполняется двумя командами:

ADD BX, DX

ADC AX, CX


Группа в) Специальный случай сложения – изменение операнда на единицу.

INC op ; op := op +1 (инкремент)

DEC op ; op := op –1 (декремент)

Операнд может быть регистр, или ячейка памяти, байт или слово.

Группа г) Десятичная коррекция - анализ и преобразование сложения(вычитания) для BCD кодов. BCD-операнды обрабатываются обычными командами сложения и вычитания, а затем размещается команда десятичной коррекции, которая обрабатывает только один байт данных, находящихся в AL, поэтому команды десятичной коррекции операндов не имеют (подразумеваемая адресация).

DAA; коррекция после сложения

DAS; коррекция после вычитания.

Например:

ADD AL, y

DAA

SUB AL, DH

DAS

BCD-операнды, представленные более, чем одним байтом должны обрабатываться побайтно.

Команды десятичной коррекции модифицирует флаги аналогично п.(а), за исключением флагов AF и OF.
  1. Дополнительные команды



Группа а) Команда сравнения

CHP op 1, op 2; op 1 - op2

Результат нигде не запоминается, команда корректирует арифметические флаги ZF, SF,PF,CF,AF,OF.


Группа б) Команда изменения знака

NEG op ; op := -op.

Операнд может быть байт или слово в регистре или в ячейке памяти.

Пример,

MOV AH, 1 ; AH := 1

NEG AH ; AH := -1

Если операнд равен нулю, то его значение не изменяется.

Команда корректирует флаги аналогично группе а; причем

CF=1, кроме случая, когда операнд равен нулю;

OF=0, кроме случая, когда op=-128 (для 1Б) = 80h (это значит, что число заняло всю разрядность), тогда OF=1, а операнд остается без изменения.
  1. Команды умножения и деления




Группа а) Умножение

MUL op ; умножение целых чисел без знака

IMUL op ; умножение целых чисел со знаком

Операнд может быть слово или байт в регистре или в ячейке памяти, но не непосредственный операнд.

Команды действуют одинаково:

- для байтов AX := AL*op

- для слов (DX,AX) := AX*op

Т.к. результат получается удвоенной разрядности относительно операндов, то при умножении слов он располагается в стандартной паре регистров (DX,AX), причем DX хранит старшие разряды. Команды модифицируют флаги:

СF=OF=0 , если старшая половина результата AH нулевая или совпадает по знакам.

СF=OF=1 , если старшие разряды не нулевые.


Группа б) Деление

DIV op; деление целых чисел без знака

IDIV op; деление целых чисел со знаковом

где op – аналогично умножению.

Команды выполняют деление нацело и формируют два результата: целое частное и остаток.

Деление слова на байт выполняется по схеме

АН:=АХ mod op (остаток)

AL:=AX div op (частное)


Деление двойного слова на слово

DX := (DX,AX) mod op

AX := (DX,AX) div op

При делении слова на байт делимое заранее должно быть размещено в аккумуляторе и сдвинуто в сторону младшего байта в АХ или AL соответственно. Деление является дополнительной к умножению командой.

Флаги не модифицируются, но может возникнуть ошибка «деление на ноль или переполнение», которая возникает, если делитель нулевой или частное не помещается в соответствующее ему место.

При появлении этой ошибки микропроцессор прекращает выполнение программы.