Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Ассемблеру.docx
Скачиваний:
12
Добавлен:
09.11.2018
Размер:
125.1 Кб
Скачать
    1. Арифметические команды

Мнемоника

Формат

Комментарии

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

ADD

ADD приемник, источник

Сложить

ADC

ADC приемник, источник

Сложить, добавить перенос

INC

INC приемник

Увеличить на единицу

Команды вычитания

SUB

SUB приемник, источник

Вычесть

SBB

SBB приемник, источник

Вычесть с заемом

DEC

DEC приемник

Уменьшить на единицу

NEG

NEG приемник

Обратить знак

СМР

СМР приемник, источник

Сравнить

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

MUL

MUL источник

Умножить без знака

IMUL

IMUL источник

Умножить со знаком

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

DIV

DIV источник

Делить без знака

IDIV

IDIV источник

Делить со знаком

Команды расширения знака

CBW

CBW

Преобразовать байт в слово

CWD

CWD

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

При использовании арифметических команд следует помнить о том, что МП может обрабатывать знаковые числа, числа без знака, а также двоично-десятичные числа. В беззнаковых числах для представления значения используются все биты, т.е. они эквивалентны типам Byte и Word, в то время как знаковые числа в старшем разряде хранят знак числа и эквивалентны типам Shortint и Integer.

    1. Битовые команды

Мнемо­ника

Формат

Комментарий

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

AND

AND приемник, источник

Выполнить AND -

OR

OR приемник, источник

Выполнить OR -

XOR

XOR приемник, источник

Выполнить XOR ~~

NOT

NOT приемник

Выполнить NOT

Сдвиговые команды

SAL/SHL

SAL приемник, счетчик

Сдвинуть влево

SAR/SHR

SAR приемник, счетчик

Сдвинуть вправо

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

    1. Строковые команды

Мнемоника

Формат

Комментарий

Пересылка строк

M0VSB

MOVS

Пересылать байты

MOVSW

MOVSW

Пересылать слова

Сравнение строк

CMPSB

CMPSB

Сравнивать байты

CMFSW

CMPSW

Сравнивать слова

Сканирование

SCASB

SCASB

Искать байт

SCASW

SCASW

Искать слово

Загрузка и сохранение

LODSB

LODSB

Загружать байты

LODSW

LODSW

Загружать слова

ST0SB

STOSB

Сохранять байты

STOSW

STOSW

Сохранять слова

Строковые команды рассчитаны на обработку строк. Термин «строка» отнюдь не эквивалентен аналогичному термину Турбо Паскаля и означает произвольную цепочку байт или слов длиной до 64 Кбайт. Эти команды оперируют пятью примитивами, каждый из которых обрабатывает лишь один байт или одно слово за раз. Перед примитивом обычно указывается префикс повторения REP/REPE/REPNE, заставляющий выполняться примитив до тех пор, пока не обнулится счетчик повторений СХ или не будет нарушено соответствующее условие.

При использовании строковых команд важно помнить два обстоятельства.

Во-первых, эти команды всегда берут адрес строки-источника из пары DS:SI, а строки-приемника - из пары ES:DI. Таким образом, перед исполнением строковой команды необходимо инициировать сегментные регистры нужным образом.

Во-вторых, строковые команды используют индексную адресацию с автоматическим изменением смещения в SI/DI после однократного исполнения примитива. Содержимое этих регистров изменяется на 1 при обработке байтов и на 2 при обработке слов, причем наращивается, если флаг направления DF сброшен, и уменьшается, если он равен 1.

Вот как можно осуществить пересылку массива А в массив В:

var

А,В: array [1..250] of Integer;

asm

lea si, A

push ds

pop es

lea di,B

mov сx,250 сld

rep movsw

end;

{Смещение А - в SI (источник))

{Инициируем ES := DS}

(Смещение В - в DI (приемник)}

{Счетчик переноса)

{Направление переноса - наращивать)

{Переносим 500 байт)

В программе на Турбо Паскале регистр DS всегда содержит сегмент данных, поэтому инициировать его необязательно. Что касается регистра дополнительного сегмента ES, такого правила нет, и хотя в большинстве случаев он также ссылается на сегмент данных, рекомендуется проводить его инициацию перед использованием строковой команды (см. выше команды push ds, pop es).