- •Содержание
- •Введение
- •Архитектура микропроцессоров Intel 8086
- •Общие принципы работы мп 8086 при выполнении прикладных программ
- •Регистры
- •Адресация
- •Непосредственная адресация
- •Прямая адресация
- •Регистровая адресация
- •Косвенная регистровая адресация
- •Адресация no базе
- •Индексная адресация
- •Индексная адресация со смещением
- •Система команд
- •Команды пересылки данных
- •Арифметические команды
- •Битовые команды
- •Строковые команды
- •Команды передачи управления
- •Команды перехода
- •Условные
- •Безусловные
- •Команды условного перехода
- •Команды управления циклом
- •Тело цикла
- •Команды прерываний
- •Структура программы на языке ассемблера
- •Основные понятия языка ассемблера
- •Написание сегмента данных
- •Написание сегмента стека
- •Написание сегмента кода
- •Написание головной подпрограммы
- •Подготовка программ к выполнению
- •Отладка программ в Turbo Debugger
- •Специфика встроенного ассемблера
- •Оператор asm
- •Синтаксис ассемблерных команд
- •Коды инструкций
- •Операнды
- •Константы
- •Выражения
- •Операции
- •Бинарная операция -
- •Побитовые операции not, and, or, xor
- •Директивы ассемблера
-
Операции
Встроенный ассемблер поддерживает операции, перечисленные в следующей таблице (в порядке убывания приоритета).
Операция |
Комментарий |
& |
Перекрытие идентификатора |
( ) |
Подвыражение |
[ ] |
Ссылка на память |
. (точка) |
Селектор структуры |
HIGH LOW |
Доступ к байту в слове |
+ - |
Унарные операции задания знака |
OFFSET SEG TYPE PTR * |
|
/ MOD SHL SHR |
|
|
|
+ - |
Бинарные операции |
NOT AND OR XOR |
Операции над битами |
Операция &
Осуществляет перекрытие идентификатора: следующий за знаком & идентификатор считается определенным в программе, даже если он совпадает с зарезервированным словом. Например:
var
Ch: Byte;
mov ch ,0 {Посылаем 0 в регистр СН}
mov &Ch,0 {Посылаем 0 в переменную Ch}
Операция ()
Круглые скобки используются обычным для Паскаля образом - для изменения пси рядка исчисления выражения (подвыражение, ограниченное скобками, вычисляется в первую очередь). Если перед скобками стоит имя типа, все выражение приобретает указанный тип. Например:
mov ах, ((1+2)*3+4)*5 {АХ = 65} mov bx, 1+2*3+4*5 {ВХ = 21}
Операция [ ]
Определяет ссылку на память. Выражение внутри скобок вычисляется в первую очередь. Обычно оно связывается с регистрами BX, BP, SI, и DI и может использовать операции + и - для указания индексации. Например:
mov ah,100 {АН = 100}
mov ah, [100] {Загружаем в АH содержимое байта по адресу DS:100}
Операция. (точка)
Селектор элемента структуры. Результат - сумма выражений до и после точки с типом второго выражения. Например:
var
R: record
X: Word; Y: Byte
end;
mov ax, R.X
mov R.Y, al
Операции HIGH и LOW
HIGH возвращает старший, a LOW - младший байт выражения типа слова, следующего за символами операции. Выражение должно иметь абсолютное непосредственное значение. Например:
mov al, High $1000 {AL= $10)
Операция OFFSET
Возвращает смещение выражения, следующего за операцией. Результат имеет непосредственное значение. Например:
mov ах, Х {АХ = слово по адресу переменной X)
mov ax, offset X (АХ = смещение адреса X}
Операция SEG
Возвращает сегмент выражения, следующего за операцией. Результат имеет непосредственное значение.
Операция PTR
Осуществляет приведение типа. Результат - ссылка на память со значением выражения после операции и типом выражения до операции. Например:
Function Swap (X: Integer): Integer;
{Меняет местами байты в слове X}
begin
asm
mov ax, X
mov BYTE PTR @Result, ah
mov BYTE PTR @Result+1, al
end;
end;
Операции * и /
* - умножение, / - целочисленное деление. Оба выражения должны иметь непосредственные абсолютные значения, такое же значение имеет и результат операции. Например:
mov ax,2*2 {АХ = 4}
mov ax,17/3 {АХ = 5}
Операция MOD
Возвращает остаток от целочисленного деления. Оба выражения должны иметь непосредственные абсолютные значения, такое же значение имеет и результат операции. Например:
mov ах,17 mod 3 {АХ= 2}
Операции SHL и SHR
Осуществляют логический сдвиг влево (SHL) или вправо (SHR) выражения, стоящего до операции, на количество разрядов, определяемое выражением после операции. Оба выражения должны иметь непосредственные абсолютные значения, такое значение имеет и результат операции. Например:
mov ah,l shl 7 {Ah =$80 =128)
Бинарная операция +
Осуществляет сложение двух выражений. Выражения могут быть непосредственными значениями или ссылками на память, но только одно из них может быть перемещаемым. Если одно из выражений - ссылка на память, результат также определяет ссылку на память, а если одно из выражений - перемещаемое, результат будет перемещаемым.