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

7.4. Выражения для управления памятью

Пусть переменная big хранит шестнадцатеричное значение 12345678 и имеет длину 4 байта.

Команда Ассемблера Результат операции

mov ax,word[big] В регистре ax – содержимое 5678

mov al,byte[big] В аl – значение 78

mov ax,word[big+2] В ax – 1234

mov al,byte[big+3] В al – 12

7.5.Выражения в Ассемблере

Префикс

(операция)

Описание

:

Вычисление адреса, первое подвыпажение – сегмент адреса, второе – смещение адреса

[…]

Косвенная адресация, указание на адрес. Выражение в скобках определяет адрес

+ - * /

Арифметические операции, причем умножение и деление здесь нацело

&

Обозначает переменную ТР. Например, если в выражении &CH, то будет использоваться не регистр СН, а переменная ТР с этим именем

word

Возврат результата выражения, укороченного словом

byte

Возврат результата выражения, укороченного байтом

offset

Смещение адреса(возврат)

seg

Возврат сегмента адреса

PTR

Адрес ячейки памяти, аналогично […]

mod

Остаток от деления

shl,shr

Сдвиг влево, вправо

not

Побитовое отрицание

and

Логическое умножение

or

Логическое сложение

xor

Исключающее “или”

high

Возвращает старшие 8 бит выражения в слово, следующее за операндом

type

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

low

Возвращает младшие 8 бит выражения в слово, следующее за операндом

Пример команды, двигающей циклический регистр АХ вправо на три разряда и записывающей результат в BX:

mov bx,ax shr 3

Допускается любое количество скобок (())()((())) в выражении.

Скобки определяют порядок вычисления выражения. По умолчанию операции идут в следующем порядке:

  1. byte, word, low, high

  2. *, /

  3. +, -, логические операции, сдвиг, offset, seg, PTR

  4. type

7.6. Команды Ассемблера

      1. Команды общего назначения

MOV – переслать операнд2 в операнд1. После выполнения – содержимое флагов не меняется и перед выполнением – не анализируется.

MOVS – переслать операнд2 в операнд1, но теперь первый и второй операнды должны являться ячейками памяти. Т.е. должна использоваться косвенная адресация.

Пример, movs [es:di],[es:bx]

Такая команда используется в пересылке строк. Под строкой в Ассемблере понимают любой массив, при этом величина одного элемента массива может быть длиной до 12 байт.

PUSH – имеет один операнд. Записывает операнд в стек.

При этом значение регистра SP увеличивается на 1. Операнд записывается по адресу SS : SP

POP – восстановить операнд из стека. Обратная команда PUSH. Значение SP уменьшается на 1. Операнд берется по адресу SS : SP.

PUSHA – операндов не имеет. Записывает регистры в стек. Запись идет в следующих регистрах: AX, BX, CX, DX, SP, BP, SI, DI. Значения регистра SP повышается на 8. Данная команда автоматически добавляется в качестве 1-ой к коду, написанного на языке встроенного ассемблера.

PUSHAD – запись в стек 32-х разрядных регистров. Во встроенном ассемблере нет. Значение регистра SP увеличивается на 32.

POPA – восстановить содержимое регистров из стека. Обратная команде PUSHA. 32-х разрядная команда – POPAD.

XCHG – имеет два операнда. Осуществляет взаимный обмен информацией двух операндов.

7.6.2. Команды преобразования форматов.

Единственная группа команд ассемблера допускающая использование операндов разной длины . Подробное описание можно найти в /2,3/.