Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
01.05.2014
Размер:
208.9 Кб
Скачать

Основные группы команд.

1. Команды передачи данных

dst – получатель

src – источник

mem адрес памяти

reg – регистр процессора

sreg – сегментный регистр

data – непосредственные данные

MOV – команда пересылки данных (копирование)

  1. одним из операндов должен бать обязательно регистр

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

  3. нельзя содержимое одного сегментного регистра переслать в другой сегментный регистр (нужно использовать РОНы или STACK)

  4. нельзя использовать сегментный регистр CS в качестве приемника (потеряются коды)

  5. ОПЕРАНДЫ ДОЛЖНЫ СОАПАДАТЬ ПО ДЛИНЕ

Команды ввода/вывода из портов: IN AL,42H

OUT AX,71H

  1. LEA AX,mem (аналогично mov AX,OFFSET(mem))

  2. Push, Pop

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

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

а) ADD – сложение mem/reg1, reg2/mem (1_операнд+2_операнд=1_операнд)

dst:=dst+src;

б) INC – увеличение на 1

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

а) DEC – уменьшение на 1

б) SUB dst,src (dst:=dst-src)

в) SBB dst,src – вычитание с переносом

г) NEG – изменяет знак на противоположный

3) Команды сравнения:

а) CMP dst,src

б) SUB dst,src (сравнение осуществляется путем вычитания источника из приемника (воздействует на флаги: CF, OF, SF, ZF, AF, PF)

4) Умножние:

а) MUL src – команда умножения для беззнаковых чисел (выполняет умножение операнда на регистр AX)

б) IMUL src – для знаковых чисел (результат может изменять знаки)

5) Деление:

а) DIV <делитель> (делимое должно находиться в AX!; частное попадает в AL, а остаток в AH)

б) IDIV – деление со знаком (целочисленное)

3. Логические операции (выполняются побитно).

AND, OR, XOR, NOT, TEST dst,src

X

Y

AND

OR

XOR

NOT x

0

0

0

0

0

1

0

1

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

0

NOT x не воздействует на флаги! Остальные команды воздействуют на OF, SF, ZF, PF, CF.

4. Сдвиговые операции.

Сдвиговые операции воздействуют на флаги: OF, SF, ZF, PF, CF

1) Простые:

а) SHL/SAL – сдвиг влево

б) SHR/SAH – сдвиг вправо

2) Циклические:

а) ROL/RCL – сдвиг влево

б) ROR/RCR – сдвиг вправо

5. Команды передачи управления.

1) Команды переходов:

1.1) безусловных переходов (JMP):

а) ближний переход

б) дальний переход (по адресу)

1.2) условных переходов (около 30)

1.3) для работы с беззнаковыми числами: JA/JNB/JNC

1.4) для работы со знаковыми числами: JG/JNLE; JS…

1.5) для всех: JE/JZ; JNP/JPO… и др.

Расшифровка команд перехода:

А (Above) – выше (для чисел без знака)

B (Below) – ниже, меньше (без знака)

L (Less) – меньше (для знаковых)

G (Greater) – больше (для знаковых)

N (Not) – не отрицания

E (Equal) – равно

Z (Zero) – 0

2) Команды вызова подпрограмм:

2.1) CALL<имя, адрес…> передает управления с автоматическим

сохранением адреса в STACK.

2.2) RET – всегда возврат в основную программу

(RET2) – возврат из подпрограммы и считывается из STACK 2-а слова.

3) Команды прерываний (INT)

INT<номер прерывания>

INT выполняется следующим образом:

  1. Декремент (уменьшение) указателя STACK на 2.

  2. Включение в STACK содержимого регистров флага (запомнить).

  3. Сброс флагов IF и TF (прерывание разрешаем).

  4. Декремент указателя STACK на 2.

  5. Сохраняем CS в STACK.

  6. Определение адреса вектора прерывания (умножение на 4)

  7. Загрузка в CS слова памяти, расположенного по адресу +2

  8. Декремент STACK на 2

  9. IP сохранить в STACK

10) Загрузка в IP слова памяти, расположенного по адресу (call<адрес>)

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

4) Команды управления флагами.

Push F – запомнить все флаги в стеке

Pop F – достать флаги из стека

FLD – команда пересылки флагов

5) Команды управления процессором.

HLT – приостанавливает работу ПК до RESET

WAIT – синхронизация основного процессора с сопроцессорами

ESC – выход

LOCK – запрещает обращение к шине на время выполнения программ.

6) Команды организации циклов.

LOOP – проверяет завершение цикла

LOOPE/LOOPZ – (если CX=0 или ZF=0)

LOOPNE/LOOPNZ – (если CX=0 или ZF=1)

JCXZ – (если CX=0, то переход к метке).

7) Цепочные команды.

Под цепочкой понимается последовательность любых контекстной связи байт или слов, находящихся в смежных ячейках памяти.

REP, LOOP, либо использовать проверку флагов: DF и DI, SI.

Соседние файлы в папке Лекции по ассемблеру