Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_New / lections-rtf / lect06.rtf
Скачиваний:
14
Добавлен:
16.04.2013
Размер:
155.45 Кб
Скачать
  1. Ассемблер Команды процессора

По своим функциям все команды процессоров семейства x86 делятся на шесть категорий:

  • команды передачи данных;

  • арифметические команды;

  • логические команды;

  • команды управления потоком;

  • команды управления процессором;

  • команды для работы со строками.

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

Группа команд передачи данных представлена в табл. 6.1. Эта группа делится на четыре части.

Таблица 6.1. Команды передачи данных.

Мнемокод / Операнды

Описание

Основные команды

mov назначение, источник

переслать байт или слово

pop назначение

извлечение слова из стека

push источник

занесение слова в стек

xchg назначение, источник

перестановка байтов и слов

xlat/xlatb

перекодировка таблицы

Команды ввода / вывода

in аккумулятор, порт

ввод байта или слова из порта

out порт, аккумулятор

вывод байта или слова в порт

Адресные команды

lds назначение, источник

загрузка регистра сегмента данных (ds)

lea назначение, источник

загрузка эффективного адреса

les назначение, источник

загрузка регистра дополнительного сегмента (es)

Команды флагов

lahf

загрузка флагов в регистр ah

popf

извлечение регистра флагов из стека

pushf

занесение регистра флагов в стек

sahf

установка флагов из регистра ah

Основные команды

Команда mov работает следующим образом:

mov назначение источник.

Операнды «назначение» и «источник» могут быть записаны в разных режимах адресации. Режимом адресации называется способ определения адреса операнда. Рассмотрим режимы адресации данных.

1. Непосредственный. Значение операнда длиной 8 или 16 бит является непосредственной частью команды.

Пример 6.1: mov ax, 10

2. Прямой. Смещение адреса операнда указано прямо в команде.

Пример 6.2: mov i, ax

3. Регистровый. Операнд содержится в указанном командой регистре; 16-битный операнд может находиться в регистрах ax, bx, cx, dx, si, di, sp, bp, а 8-битный - в регистрах al, ah, bl, bh, cl, ch, dl, dh.

Пример 6.3: inc cx

4. Регистровый косвенный. Смещение адреса операнда находится в базовом регистре bx или bp или в индексном регистре si или di.

Пример 6.4: sub ax, [bx]

5. Регистровый относительный. Смещение адреса операнда определяется как сумма 8- или 16-битного относительного смещения и содержимого базового (bx или bp) или индексного (si или di) регистров.

Пример 6.5: add ax, [bp+2]

6. Базовый индексный. Смещение адреса операнда определяется как сумма содержимого базового (bx или bp) и индексного регистров (si или di).

Пример 6.6: mov ax, [bx+si]

7. Относительный базовый индексный. Смещение адреса операнда определяется как сумма 3-х слагаемых: 8- или 16-битного относительного смещения, содержимого индексного регистра (si или di) и содержимого базового регистра (bx или bp).

Пример 6.7: mov ax, [bx+si+2]

Команды pop и push, а также другие команды, образованные на их основе (popa, pushfw и т.д.) являются командами пересылки данных между стеком и регистрами.

Стек – это специальный сегмент памяти, который выполняет следующие основные функции:

  • временно сохраняет значения регистров;

  • хранит адреса возврата из подпрограмм;

  • хранит динамические переменные.

Стек организован по принципу LIFO (last-in-first-out) – последним вошел, первым вышел. В регистре ss содержится адрес начала стекового сегмента. Регистр sp указывает на смещение относительно этого начального адреса.

Команда push помещает регистр в стек, а команда pop – извлекает. Поэтому правильное управление стеком заключается в том, чтобы на каждую команду push была соответствующая команда pop:

push ax

push bx

push dx

pop dx

pop bx

pop ax

Команда xchg предназначена для двунаправленной пересылки данных.

Пример 6.8: xchg ax, bx меняет значения регистров между собой.

Обмен регистров можно осуществить и через стек, но только в три команды:

push ax

mov ax, bx

pop bx

Пример 6.9: xchg ah, al меняет старшую и младшую часть регистра ax.

Такой обмен можно проделать в три команды через третий регистр, который, в отличие от стека, может хранить восьмибитовые значения:

mov bh, ah

mov ah, al

mov al, bh

Команда xlat предназначена для перекодировки символов по таблице перекодировки.

Пример 6.10: Использование команды xlat

table db 'abcdef'

mov al, 3

lea bx, table

xlat ; (al)='c'

Соседние файлы в папке lections-rtf