Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Организация ЭВМ и сетей - Лаба 01.rtf
Скачиваний:
2
Добавлен:
10.07.2019
Размер:
764.62 Кб
Скачать

Команды арифметических операций.

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

Числа занимают 1 или 2 байта, в беззнаковых все разряды значащие, в знаковых старший разряд определяет знак числа 0 - положительное, 1 - отрицательное. Знаковые числа хранятся в дополнительном коде. Диапазон значений -128 +127 для байтовых и -32768 +32767 для двухбайтовых. Признаки (особенности) результата арифметических операций записываются в регистр флагов.

СЛОЖЕНИЯ.

ADD dst, src ; dst := (dst) + (src) Команда складывает содержимое источника и приемника и помещает результат в приемник. Например:

Используется индексная адресация. Перед выполнением операции должны быть определены аргументы - первый аргумент в регистре AX, второй в ячейке с адресом (DS) * 16 + (DI) + 8. Результат в AX. Складываются два отрицательных числа. Результат больше 2 байт. Устанавливаются флаги переноса CF = 1 и отрицательного результата SF = 1

ADD AX, [DI + 8]

(AX) = FFF0

(DI) = 3000

(DS) = 1000

(13008) = 1000

AX = 0FF0.

ADD CX, 123h Непосредственная адресация. Складывается число и содержимое

(CX)= 123h регистра CX. Результат в CX.

(CX) = 246h, все флаги =0

ADС dst, src ; dst := (dst) + (src) + (CF) Сложение с переносом. К младшему биту результата сложения прибавляется значение флага переноса CF. Например:

Индексная адресация. Складывается содержимое ячейки с адресом (DS) * 16 + (DI), регистра AX и флага CF. Результат в ячейку памяти. (123000) = 5h, все флаги нулевые.

ADC [DI], AX

(AX) = 2h

(DI) = 0300

(DS) = 1200

(12300) = 2h

(CF) = 1

INC dst ;dst := dts + 1 Увеличивает содержимое регистра или ячейки памяти на 1. Команда не изменяет флаг CF. Например:

INC SI

(SI) = FFFF

(SI) = 0, CF = 0.

ВЫЧИТАНИЯ.

Аналогичны сложению, только операция другая. Флаги переноса становятся флагами заема и устанавливаются в 1 когда уменьшаемое меньше вычитаемого.

SUB dst, src ; dst := (dst) - (src) Команда вычитает содержимое источника из приемника и помещает результат в приемник. Например:

Базовая адресация. Из содержимого регистра CL вычитается содержимое ячейки с адресом (SS) * 16 + (BP) + 8. Т. к. используется регистр BP обращение происходит к сегменту стека. Результат записывается в CL. Результат положительный, значит SF = 0 и не было заема, значит CF = 0.

SUB CL, [BP + 8]

(CL) = 30h

(BP) = FFFE

(SS) = 1000

(20006) = 20h

(CL) = 10h

SBB dst, src ; dst := (dst) - (src) - (CF) Команда вычитания с заемом. Из разности вычитает еще значение флага CF. Например:

Базовая адресация, но через регистр BX. Значит обращение будет происходить к ячейке в сегменте данных с адресом (DS) * 16 + (BX) + 40.

SBB [BX + 40], 5555h

(BX) = 2000h

(DS) = 1000h

(21000) = 2000h

(CF) = 1

(2100) = CAAA, CF = 1 (уменьшаемое меньше вычитаемого) и SF = 1 (отрицательный результат)

DEC dst ;dst := dts - 1 Уменьшает содержимое регистра или ячейки памяти на 1. Команда не изменяет флаг CF. Например:

DEC AL

(AL) = 10h

(AL) = F СРАВНЕНИЯ

CMP dst

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

CMP DX, [SI + 10]

(DX) = 5h

(DS) = 2000

(SI) = 8000

(28010) = 28h

(DX) = 5h, (28010) = 28h, устанавливаются флаги SF(знак) = 1 и CF(перенос) =1.

УМНОЖЕНИЯ

Имеются две команды умножения: для знаковых и беззнаковых чисел.

MUL src ; ac := (ac) * (src) Беззнаковое умножение адресуемого операнда и содержимого регистра AX (AL при операциях над байтами). Произведение длиной 4 байта хранится в регистрах DX - AX (или в паре AH -AL при операциях над байтами). Флаги OF (переполнение) и CF(перенос) устанавливаются в 1 если старшая половина произведения (регистр DX) ненулевая. Остальные флажки не определены. Например:

MUL AX ;Регистровая адресация. Возводим в квадрат содержимое AX

(AX) = 1000h

(AX) = 0h, (DX) = 100h, Флаги CF = 1, OF = 1.

MUL DL ;Умножаем байт из регистра DL на байт в регистре AL. Содержимое AH

(DL) = 20 игнорируется, т. к. работаем с байтами.

(AX) = A510

(AX) = 200, или тоже самое (AH) = 02h, (AL) = 00h. Флаги CF = 1, OF = 1 т. к. старший байт произведения не нулевой.

IMUL src ; работает со знаковыми числами

ДЕЛЕНИЯ

Их тоже две, знаковая и беззнаковая.

DIV src ;Деление пары DX - AX (или AH - AL для операций над байтами) на содержимое адресуемого операнда. Частное записывается в регистр AX (AL) , остаток в DX (AH). Состояние всех флажков не определено. Если частное превышает разрядность регистра или происходит деление на ноль, генерируется внутренне прерывание типа 0. Например:

DIV CL ;Деление слова в AX на байт в CL

(AX) = 002Dh

(CL) = 06h

(AX) = 0307h Результат деления в (AL) = 07h, остаток в (AH) = 03h