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

23. Команды передачи управления. Команды условной передачи управления для операндов без знака. Дальность адресации.

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

Команда значение операнд знач флага

jb/jnae операнд_1 < операнд_2 cf = 1

jbe/jna операнд_1 <= операнд_2 cf = 1 or zf=1

ja/jnbe операнд_1 > операнд_2 cf = 0 and zf = 0

jae/jnb операнд_1 => операнд_2 cf = 0

Дальность перехода определяется местоположением операнда адрес_перехода. Этот адрес может находиться в текущем сегменте кода или в некотором другом сегменте. В первом случае переход называется внутрисегментным, или близким, во втором — межсегментным, или дальним. Внутрисегментный переход предполагает, что изменяется только содержимое регистра eip/ip. Можно выделить три варианта внутрисегментного использования команды jmp:

прямой короткий;

прямой;

косвенный.

24. Команды передачи управления. Команды условного перехода и флаги.

Архитектура микропроцессора предполагает специфическое использование многих регистров.

К примеру, регистр eax/ax/al используется как аккумулятор, а регистры bp, sp - для работы со стеком.

Регистр ecx/cx тоже имеет определенное функциональное назначение — он выполняет роль счетчика в командах управления циклами и при работе с цепочками символов. Возможно, что функционально команду условного перехода, связанную с регистром ecx/cx, правильнее было бы отнести к этой группе команд.

Синтаксис этой команды условного перехода таков:

jcxz метка_перехода (Jump if cx is Zero) — переход, если cx ноль;

jecxz метка_перехода (Jump Equal ecx Zero) — переход, если ecx ноль.

Эти команды очень удобно использовать при организации цикла и при работе с цепочками символов.

Нужно отметить ограничение, свойственное команде jcxz/jecxz. В отличие от других команд условной передачи управления, команда jcxz/jecxz может адресовать только короткие переходы — на –128 байт или на +127 байт от следующей за ней команды.

25.Организация цикла

Цикл – особая алгоритмическая структура, без которой не обойдется ни один язык программирования. Организовать циклическое выполнение части кода программы можно при помощи команд передачи управления.

Задача: необходимо вывести на экран цифры от ‘0’ до ‘9’, используя цикл со счетчиком.

Цикл со счетчиком можно организовать, используя те же условные команды, взяв в качестве счетчика любой свободный регистр. Но в микропроцессоре предусмотрены специальные команды для организации таких циклов: loop / loope / loopne . Эти команды используют в качестве счетчика регистр cx, они сами уменьшают его значение после каждой итерации цикла и сравнивают после уменьшения с нулём.

Команда loop <метка перехода> выполняет следующие действия:

-уменьшает регистр cx ;

-сравнивает cx с нулем, если cx >0, то управление передается на метку перехода (продолжаем цикл).

Команды loope/loopne позволяют выйти из цикла по дополнительному условию.

Примечание: при написании вложенных циклов loop , необходимо помнить, что все они используют для счетчика один и тот же регистр – cx . Для правильной работы необходимо сохранить счетчик внешнего цикла ( push cx ) до инициализации внутреннего и восстановить его ( pop cx ) после команды loop внутреннего цикла.

26-28.Команды обработки строк

Кроме привычного всем понятия массивов в ассемблере существует структура называемая цепочкой. Цепочка - непрерывная последовательность байт, слов или двойных слов, обрабатываемая как единое целое. Основное отличие цепочек от массивов состоит в способе доступа к элементам: для массивов - произвольный доступ, для цепочек - только последовательный (от начала цепочки к концу или от конца к началу). Цепочечные команды - команды для обработки цепочек. Особенностью всех цепочечных команд (кроме обработки очередного элемента цепочки) является автоматическое продвижение к следующему элементу цепочки.

Цепочечные команды:

Название

Команды

Действие

пересылка цепочки

movs <адр. приемника>, <адр. источника> movsb, movsw, mowsd

копирует один элемент цепочки из операнда источника в операнд приемник

сравнение цепочек

cmps <адр. приемника>, <адр. источника> cmpsb, cmpsw, cmpsd

сравнивает элементы цепочек из операнда источника и операнда приемника

сканирование цепочки

scas <адр. приемника> scasb, scasw, scasd

сканирует цепочку приёмник на присутствие некоторого элемента (задаётся в регистре аккумуляторе)

загрузка элемента из цепочки

lods <адр. источника> lodsb, lodsw, lodsd

загрузить элемент из цепочки источника в регистр аккумулятор

сохранение элемента в цепочке

stos <адр. приемника> stosb, stosw, stosd

восстановить элемент из регистра аккумулятора в цепочку

получение элемента цепочки из порта ввода/вывода

ins <адр. приемника>, <номер порта> insb, insw, insd

загрузить элемент в цепочку приемник из указанного порта ввода/вывода

вывод элементов цепочки в порт ввода/вывода

outs <номер порта>, <адр. источника> outbs, outws, outds

переслать элемент из цепочки источника в указанный порт ввода/вывода

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