Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kratkie_otvety_ekzamen_CP_2011-12.docx
Скачиваний:
20
Добавлен:
14.04.2019
Размер:
132.13 Кб
Скачать

15. Стандартные директивы сегментации. Команды пересылки данных.

Команды пересылки данных делятся на команды:

  • собственно пересылки данных;

  • ввода из порта и вывода в порт;

  • работы с адресами и указателями;

  • преобразования данных;

  • работы со стеком.

mov <операнд назначения>,<операнд-источник>

xchg <операнд!>,<операнд2>

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

Нельзя также пересылать из одного сегментного регистра в другой (только через регистры общего назначения), нельзя грузить в сегментный регистр непосредственно из памяти, нельзя посылать через mov что либо в cs (так как это будет изменение потока программы).

xchg это то же, что mov, с теми же ограничениями, но она просто меняет местами содержимое операндов.

Ввод и вывод в порт

Физически порт ввода-вывода представляет регистр разрядностью 8, 16 или 32 бита.

in <аккумулятор>,<номер_порта> — ввод в аккумулятор из порта с номером <номер_порта>;

out <номер_порта>,<аккумулятор> — вывод содержимого аккумулятора в порт с номером <номер_порта>.

Работа с адресами

lea <приемник>,<источник> — загрузка эффективного адреса;

lds <приемник>,<источник> — загрузка указателя в регистр сегмента данных ds;

les <приемник>,<источник> — загрузка указателя в регистр дополнительного сегмента данных es;

lgs <приемник>,<источник> — загрузка указателя в регистр дополнительного сегмента данных gs;

lfs <приемник>,<источник> — загрузка указателя в регистр дополнительного сегмента данных fs;

lss <приемник>,<источник> — загрузка указателя в регистр сегмента стека ss.

Команда LEA похожа на команду MOV тем, что она также производит пересылку, однако команда LEA производит пересылку не данных, а эффективного адреса данных.

16. Организация стека. Команды работы со стеком.

Стек - это такая структура данных в памяти, которая используется для временного хранения информации. Программа может поместить информацию в стек (команда PUSH) или извлечь ее из стека (команда POP). Данные в стеке упорядочиваются специальным образом. Извлекаемый из стека элемент данных - это всегда тот элемент, который был записан туда последним. Такая организация хранения данных сокращенно обозначается LIFO (Last In, First Out - последний поступивший удаляется первым). Если мы поместим в стек два элемента: сначала A, а затем B, то при первом обращении к стеку извлекается элемент B, а при следующем - A. Информация выбирается из стека в обратном по отношению к записи порядке.

Работа со стеком

Команда PUSH выполняет запись значения <источник> в вершину стека: push <источник>

Команда POP выполняет запись значения из вершины стека по месту, указанному операндом <приемник> (значение при этом «снимается» с вершины стека): pop <приемник>

Команда PUSHA предназначена для групповой записи в стек.

Команда PUSHF сохраняет регистр флагов в стеке.

РОРА и POPF понятно что обратные вышеназванным.

17. Команды двоичной арифметики (сложение, вычитание). Влияние на регистр флагов

ADD приемник, источник

Команда выполняет арифметическое сложение приемника и источника, помещает сумму в приемник, не изменяя содержимое источника. Приемник может быть регистром или переменной, источник может быть числом, регистром или переменной, но нельзя использовать переменную одновременно и для источника, и для приемника. Команда ADD никак не различает числа со знаком и без знака, но, употребляя значения флагов CF (перенос при сложении чисел без знака), OF (перенос при сложении чисел со знаком) и SF (знак результата), можно использовать ее и для тех, и для других.

SUB приемник, источник

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

INC приемник

Увеличивает приемник (регистр или переменная) на 1. Единственное отличие этой команды от ADD приемник,1 состоит в том, что флаг CF не затрагивается. Остальные арифметические флаги (OF, SF, ZF, AF, PF) устанавливаются в соответствии с результатом сложения.

DEC приемник

Уменьшает приемник (регистр или переменная) на 1. Единственное отличие этой команды от SUB приемник,1 состоит в том, что флаг CF не затрагивается. Остальные арифметические флаги (OF, SF, ZF, AF, PF) устанавливаются в соответствии с результатом вычитания.

NEG приемник

Выполняет над числом, содержащимся в приемнике (регистр или переменная), операцию дополнения до двух. Эта операция эквивалентна обращению знака операнда, если рассматривать его как число со знаком. Если приемник равен нулю, флаг CF устанавливается в 0, иначе — в 1. Остальные флаги (OF, SF, ZF, AF, PF) устанавливаются в соответствии с результатом операции.

CMP приемник, источник

Сравнивает приемник и источник и устанавливает флаги. Сравнение осуществляется путем вычитания источника (число, регистр или переменная) из приемника (регистр или переменная; приемник и источник не могут быть переменными одновременно), причем результат вычитания никуда не записывается, единственным результатом работы этой команды оказывается изменение флагов CF, OF, SF, ZF, AF и PF. Обычно команду СМР используют вместе с командами условного перехода (Jcc), условной пересылки данных (CMOVcc) или условной установки байт (SETcc), которые позволяют использовать результат сравнения, не обращая внимания на детальное значение каждого флага. Так, команды CMOVE, JE и SETE выполнят соответствующие действия, если значения операндов предшествующей команды СМР были равны.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]