Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров / Язык АССЕМБЛЕРА.doc
Скачиваний:
63
Добавлен:
20.03.2015
Размер:
149.5 Кб
Скачать

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

Введем следующие обозначения

Местонахождение операнда

Обозначение

Запись в ЯА

в команде

i8, i16, i32

константное выражение

в регистре общего назначения

r8, r16

имя регистра

в сегментном регистре

sr

CS, DS, SS, ES

в ячейки памяти

m8, m16, m32

адресное выражение

Цифра в обозначении операнда определяет количество бит, занимаемое этим операндом.

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

MOVop1, op2

По этой команде на место первого операнда пересылается значение второго операнда. Флаги команда не меняет.

В команде MOVдопустимы следующие комбинации операндов:

op1

op2

r8

i8, r8, m8

m8

i8, r8

r16

i16, r16, sr, m16

sr (кромеCS)

r16, m16

m16

i16, r16, sr

Пример,

MOV AX, 100

MOV DS, AX ;DS := 100

Оператор указания типа (PTR)

<тип> PTR<выражение>, где <тип> - этоBYTE,WORDилиDWORD(имеются и другие варианты).

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

XCHGop1,op2 – перестановка (exchange). Эта команда меняет местами свои операнды. Флаги эта команда не меняет.

Пример

MOV AX, 100 ;AX = 100

MOV BX, 50 ;BX = 50

XCHG AX, BX ;AX = 50, BX = 100

В команде XCHGдопустимы следующие комбинации операндов:

op1

op2

r8

r8, m8

m8

r8

r16

r16, m16

m16

r16

Команды сложения и вычитания

Сложение (Addition): ADD op1, op2

Вычитание (Subtraction): SUB op1, op2

В этих командах допустимы следующие типы операторов:

op1

op2

r8

i8, r8, m8

m8

i8, r8

r16

i16, r16, m16

m16

i16, r16

Примечание. Результат операции ADDиSUBзаносится в первый операнд.

Увеличить на 1 (increment):INC op

Уменьшить на 1 (decrement):DEC op

Изменение знака (negative):NEG op

Сложение с учетом переноса (addwithcarry):ADC op1, op2

Вычитание с учетом заема (subtract with borrow): SBB op1, op2

Команды умножения и деления

Команды умножения

Умножение целых без знака (multiply):MUL op

Умножение целых со знаком (integermultiply):IMUL op

(op:r8,m8, r16, m16)

Второй операнд берется: при умножении байтов из регистра AL, а при умножении слов из регистраAX.

При умножении байтов результат имеет размер слово и записывается в весь регистр AX, а при умножении слов результат имеет размер двойного слова и записывается в два регистра – в регистрDXзаносятся старшие цифры произведения, а регистрAX– младшие цифры.

Команды деления

Деление целых без знака (divide):DIV op

Деление целых со знаком (integerdivide):IDIV op

(op:r8,m8, r16, m16)

Примечание. При делении слова на байт делимое должно находится в регистре AX, а делитель обязан иметь тип байт. При делении двойного слова на слово делимое обязано находится в двух регистрах – вDX(старшая часть делимого) и вAX(младшая часть) и делитель должен быть словом.

Результат:

При делении слова на байт

AH := AX mod op; AL := AX div op.

При делении двойного слова на слово:

DX := (DX, AX) mod op; AX := (DX, AX) div op.

Изменение размера числа

Расширение байта до слова (convertbytetoword):CBW

Операнд всегда берется из AL,а результат записывается вAX.

Расширение слова до двойного слова (convertwordtodoubleword):CWD

Операнд всегда берется из AX,а результат записывается в (DX,AX).