
- •Лекция 05. Синтаксис ассемблера
- •Основные группы команд процессора
- •Команды передачи данных
- •Арифметические команды
- •Команды сложения
- •Умножение и деление знаковых значений
- •Безусловные переходы
- •Вызов подпрограмм
- •Условные переходы
- •Команды управления процессором
- •Команды для работы со строками
- •Трансляция текстов программ
- •Опции транслятора tasm
- •Опции компоновщика (редактора связей) tlink
- •Типы данных
Команды сложения
В табл. 2. представлено пять команд сложения. Две из них, add и adc, суммируют два байта или слова. Inc (инкремент) — команда быстрого добавления 1 к регистру или значению в памяти. (Другие две команды, ааа и daa, выполняют коррекцию значений, представленных в двоично-десятичном формате, с которым мы познакомимся позже.) Для сложения 8-битового значения в ah с 8-битовым значение в bh вы можете записать:
add ah, bh ; ah<-ah+bh
Так же как и для команды mov, для add требуются операнд-источник и операнд-назначение. Команда суммирует два значения и записывает результат в заданное место, заменяя первоначальное значение. В этом примере результат записывается в ah. Команда adc работает аналогично, но добавляет к результату флаг переноса cf:
adc ah, bh ; ah <-+ah+bh+cf
Умножение и деление знаковых значений
Команды знакового умножения (imul) и деления (idiv) работают аналогично и используют те же регистры, что и mill и div. (Буква i в символическом имени используется для целых чисел, показывая, что допускаются как положительные, так и отрицательные значения.) Единственное отличие состоит в допустимых диапазонах значений:
• Знаковый байт изменяется от-128 до+127
• Знаковое слово изменяется от -32768 до 32767
• Помните, что отрицательный результат представляется в двоичном дополнительном коде.
Таблица 3. Логические команды 8086
|
|
Мнемокод/Операнды |
Описание |
Логические команды |
|
and назначение, источник not назначение or назначение, источник test назначение, источник хоr назначение, источник |
Логическое И Логическое НЕ (отрицание) Логическое ИЛИ Проверка бита Логическое исключающее ИЛИ |
Команды сдвига |
|
rcl назначение, количество rcr назначение, количество rol назначение, количество ror назначение, количество sar назначение, количество sal назначение, количество shi назначение, количество shr назначение, количество |
Циклический сдвиг влево через перенос Циклический сдвиг вправо через перенос Циклический сдвиг влево Циклический сдвиг вправо Арифметический сдвиг вправо Арифметический сдвиг влево Сдвиг влево Сдвиг вправо |
Таблица 4. Команды управления потоком 8086
|
|
Мнемокод / Операнды |
Описание |
Команды безусловного перехода |
|
call адрес jmp адрес ret значение retn значение retf значение |
Вызов процедуры Безусловный переход Возврат из процедуры Возврат из близлежащей процедуры Возврат из дальней процедуры |
Команды условного перехода |
|
ja/jnbe короткий адрес jae/jnb короткий адрес jb/jnae короткий адрес jbe/jna короткий адрес |
Переход, если выше/не ниже или равно Переход, если выше или равно/не ниже Переход, если ниже/не выше или равно Переход, если ниже или равно/не выше |
jc короткий адрес |
Переход, если был перенос |
je/jz короткий адрес |
Переход, если равно/нуль |
jg/jnle короткий адрес |
Переход, если больше/ не меньше или равно |
jge/jnl короткий адрес |
Переход, если больше или равно/не меньше |
jl/jnge короткий адрес |
Переход, если меньше/не больше или равно |
jle/jng короткий адрес |
Переход, если меньше или равно/не больше |
jnc короткий адрес |
Переход, если нет переноса |
jne/jnz короткий адрес |
Переход, если не равно/не нуль |
jno короткий адрес |
Переход, если нет переполнения |
jnp/jpo короткий адрес |
Переход, если нет паритета/паритет нечетный |
Jns короткий адрес |
Переход, если нет знака |
jo короткий адрес |
Переход по переполнению |
jp/jpe короткий адрес |
Переход, если есть паритет или паритет четный |
js короткий адрес |
Переход, если есть знак |
Команды цикла |
|
jcxz короткий адрес |
Переход, если сх равно нулю |
loop короткий адрес |
Цикл пока сх <> 0 |
loope/loopz короткий адрес |
Цикл, если равно или нуль |
loopne/loopnz короткий адрес |
Цикл, если не равно/не нуль |
Команды прерывания |
|
int тип прерывания |
Прерывание/вызов прерывания |
into |
Прерывание по переполнению |
iret |
Возврат из обработки прерывания |
Хотя может показаться, что в табл. 4. содержится невообразимое количество команд перехода, необходимо запомнить только несколько легко выделяющихся групп. Мы рассматриваем первые две из них: условные и безусловные переходы, затем вводятся циклы и команды управления прерываниями.