Государственное Образовательное Учреждение высшего профессионального образования Московский Авиационный Институт Государственный Технический Университет "маи" кафедра 304. конспект
Вид материала | Конспект |
СодержаниеВ командах ЯА Система команд МП Intel 80x86 Арифметические команды Команды сложения и вычитания Десятичная коррекция Дополнительные команды Команды умножения и деления |
- Инновационной образовательной программы, 1090.47kb.
- Самостоятельная работа 2 часа в неделю всего часов, 28.69kb.
- Самостоятельная работа 2 часа в неделю всего часов, 45.89kb.
- Самостоятельная работа 2 часа в неделю всего часов, 73.46kb.
- Самостоятельная работа 2 часа в неделю всего часов, 46.6kb.
- Самостоятельная работа 2 часа в неделю всего часов, 41.37kb.
- Самостоятельная работа 2 часа в неделю всего часов, 41.08kb.
- Самостоятельная работа 2 часа в неделю всего часов, 64.33kb.
- Самостоятельная работа 2 часа в неделю всего часов, 29.72kb.
- Самостоятельная работа 2 часа в неделю всего часов, 33.42kb.
В командах ЯА:
Мнемоника | Адресная часть |
Машинные команды МП занимают от 1 до 6 байтов, причём операционная часть занимает 1 или 2 первых байтов команды, остальное адресная часть.
Операнды могут быть указаны:
- В самой команде(непосредственная адресация)
- В одном из регистров, тогда в команде указывается этот регистр (регистровая адресация)
- В оперативной памяти (ОП) по адресу, который тем или иным образом описан в команде (прямая, базовая или индексная адресация)
- Некоторые команды требуют, чтобы один из операндов находился в определённом регистре (например в AX), тогда он не указывается в команде( подразумеваемая адресация)
Результат выполнения команды обычно помещается на место первого операнда. Форматы команд разнообразны (в основном двухадресные).
В общем виде запишем : op1 := op1 * op2, где * - какая-то команда, заданная МНК(мнемоникой); op1 – регистр или ячейка памяти, 1 байт или одно слово (2 байта); op2 – непосредственный операнд - регистр или ячейка памяти, 1 байт или одно слово (2 байта).
Система команд МП Intel 80x86
Арифметические команды
Команды сложения и вычитания
Операции сложения и вычитания одинаково для знаковых и беззнаковых целых. Используются две формы операндов: байт или слово, причем операнды должны быть одинаковой длины. Операнды могут храниться в регистре или в ОП, но второй операнд может быть непосредственным.
Перечислим команды, относящиеся к группе команд сложения и вычитания:
Группа а) 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.
-
Дополнительные команды
Группа а) Команда сравнения
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, а операнд остается без изменения.
-
Команды умножения и деления
Группа а) Умножение
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 соответственно. Деление является дополнительной к умножению командой.
Флаги не модифицируются, но может возникнуть ошибка «деление на ноль или переполнение», которая возникает, если делитель нулевой или частное не помещается в соответствующее ему место.
При появлении этой ошибки микропроцессор прекращает выполнение программы.