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

Различают четыре типа пересылок: общего назначения, с уча­стием аккумулятора, адреса операнда и флагов. Ни одна из команд этой группы не влияет на флаги, за исключением двух команд, которые осуществляют явную загрузку регистра фла­гов F.

Пересылки общего назначения.Задаются спомощью четырех мнемокодов: MOV (переслать), PUSH (занести в стек), POP (извлечь из стека) и XCHG (обменять).

Команда MOV осуществляет пересылку байта или слова из источника в место назначения. В качестве источника и места назначения может служить регистр, память или сегментный регистр. Кроме того, источником могут являться данные (константы), непосредственно представленные в формате команды. Команда MOV часто используется в программах, что является одной из причин существования достаточно большого числа ее форматов. Выбор подходящего формата в определенной степени может оптимизировать программу по времени ее выполнения.

Команда PUSH служит для занесения содержимого 16-раз­рядного источника в стек. Источником операнда может являться регистр, сегментный регистр или память. Выполнению команды предшествует формирование адреса вершины стека: (SP) = (SP) – 2.

Команда POP служит для извлечения 16-разрядного операнда из стека и пересылки его в регистр, память или сегментный регистр. Операция извлечения из стека завершается формированием нового адреса вершины стека (SP) = (SP) + 2.

Команда XCHG вызывает обмен байтами или словами меж­ду источниками. В качестве источников могут служить регистры и память. Команда имеет всего два формата, поскольку сег­ментные регистры не могут использоваться при обмене.

Пересылки с участием аккумулятора.Состоят из трех команд: IN (ввод), OUT (вывод) и XLAT (трансляция). В отли­чие от рассмотренных выше пересылок общего типа эти коман­ды обязательно используют аккумулятор в качестве источника или места назначения операнда.

Команда IN служит для пересылки данных (байта или слова) из порта ввода в аккумулятор (в AL или АХ). Номер порта ввода может быть задан как непосредственно, во втором байте команды, так и косвенно, в регистре DX, причем только регистр DX из всех РОН может использоваться для этой цели. Если первый формат команды ввода позволяет адресоваться к 256 портам, то второй - к 216 = 65536 портам. Косвенное за­дание порта хотя и требует предварительной загрузки его номе­ра в DX, однако позволяет организовывать программные цик­лы, в которых используется изменяющийся номер портов ввода.

Команда OUT служит для пересылки данных (байта или слова) из аккумулятора (из AL или АХ) в порт вывода. Эта команда, как и команда IN, имеет два формата, которые опре­деляют способ адресации порта вывода. Преимущества и недо­статки использования каждого из форматов определяются теми же соображениями, что и для команды IN.

Команда XLAT осуществляет табличное преобразование кодов. Таблица размером не более 256 байт размещается в па­мяти, а ее начальный адрес - в регистре ВХ. При выполнении этой команды содержимое AL использу­ется в качестве относительного адреса строки таблицы, из которой байт пере­сылается в AL.

Пересылки адреса операнда.Включают три команды: LEA (загрузить исполнительный адрес), LDS (загрузить указатель в DS) и LES (загрузить указатель в ES). Эти команды служат средством управления механизмом адресации операндов.

По команде LEA извлекается не сам операнд, а его испол­нительный адрес ЕА. Действие команды состоит в передаче вычисленного 16-разрядного адреса операнда в 16-разрядный регистр, код которого указан в поле reg. Использование коман­ды LEA удобно при составлении подпрограмм, работающих спараметрами. В этом случае перед вызовом подпрограммы выделенный регистр загружается адресом переменной, которая предварительно записана в память в качестве параметра. На­пример, подпрограмма оперирует с параметром, адрес которого содержится в РОН ВХ. Если перед вызовом этой под­программы выполнить команду LEA BX, ALPHA, где ALPHA - имя ячейки памяти, содержащей переменную, то подпрограмма будет использовать в качестве параметра переменную из ячейки ALPHA. Если же перед вызовом подпрограммы выполнить команду LEA BX, BETA, то в качестве значения параметра под­программа будет использовать значение переменной из ячейки с именем BETA.

Команды LDS и LES используются, в основном, при обра­щении к данным, находящимся вне текущих сегментов DS или ES, так, что возникает необходимость изменить базовый адрес сегмента. Пара 16-разрядных адресов - база сегмента и смеще­ние в сегменте, называемая указателем, предварительно загру­жается в память. Относительный адрес указателя определяется значениями полей mod и r/т постбайта команды LDS (или LES). Значение смещения содержится в двух первых байтах указателя, а базовый адрес сегмента - в третьем и четвертом байтах. По команде LDS (или LES) происходит обращение к указателю и осуществляется загрузка регистра DS (или ES) базовым адресом, а смещение пересылается в регистр, указан­ный полем reg постбайта команды.

Пересылки флагов.Включают четыре однобайтовые коман­ды: LAHF (загрузить АН флагами), SAHF (запомнить АН врегистре F), PUSH F (занести F в стек) и POP F (извлечь из стека в F).

По команде LAHF осуществляется пересылка младшего байта регистра флагов F вАН, а по команде SAHF - обратная пересылка. Эти команды введены в систему команд ЦП для упрощения программной совместимости с ВМ80. В частности, без их использования для реализации команд PUSH PSW и POP PSW BM80 с помощью команд ЦП потребовалось бы по 9 байт памяти, а использование, например, команды LAHF позволяет при реализации команды PUSH PSW обой­тись всего двумя байтами: LAHF, PUSH AX. Команда PUSHF помещает содержимое регистра F в стек, причем сначала запи­сывается старший байт, а затем младший байт регистра F.








Дата добавления: 2015-12-22; просмотров: 920;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.