- •Assembler.
- •Организация выполняемых программ в ms – dos.
- •Система команд процессора Intel 86.
- •Директивы ассемблера
- •Основные группы команд.
- •Использование процедур в ассемблере.
- •Режим адресации в памяти и микропроцессоре Intel 86.
- •Определение физического адреса.
- •Связь ассемблера с языками высокого уровня
- •Макросредства
Основные группы команд.
1. Команды передачи данных
dst – получатель
src – источник
mem адрес памяти
reg – регистр процессора
sreg – сегментный регистр
data – непосредственные данные
MOV – команда пересылки данных (копирование)
одним из операндов должен бать обязательно регистр
нельзя пересылать из одной ячейки памяти в другую
нельзя содержимое одного сегментного регистра переслать в другой сегментный регистр (нужно использовать РОНы или STACK)
нельзя использовать сегментный регистр CS в качестве приемника (потеряются коды)
ОПЕРАНДЫ ДОЛЖНЫ СОАПАДАТЬ ПО ДЛИНЕ
Команды ввода/вывода из портов: IN AL,42H
OUT AX,71H
LEA AX,mem (аналогично mov AX,OFFSET(mem))
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 выполняется следующим образом:
Декремент (уменьшение) указателя STACK на 2.
Включение в STACK содержимого регистров флага (запомнить).
Сброс флагов IF и TF (прерывание разрешаем).
Декремент указателя STACK на 2.
Сохраняем CS в STACK.
Определение адреса вектора прерывания (умножение на 4)
Загрузка в CS слова памяти, расположенного по адресу +2
Декремент STACK на 2
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.