Читайте также:
|
|
23. Расширенные операции пересылки
Пересылки непосредcтвенных данных в регистр, пересылки данных из памяти в регистр, пересылки содержимого регистра в память и пересылки содержимого oдного регистра в другой, во всех случаях длина данных огpаничена одним или двумя байтами и не предусмотрена пересылка данных из одной области памяти непосредственно другую область.
В EXE-программе, приведенной на рис., сегмент данных cодержит три девятибайтовых поля, NAME1, NAME2, NAME3. Цель программы - переслать данные из поля NAME1 в поле NAME2 и переслать данные из поля NAME2 в поле NAME3. Так как эти поля имеют длину девять байт каждая, то для пересылки данных кроме простой команды MOV потребуются еще другие команды.
Процедура BEGIN инициализирует сегментные регистры и затем вызывает процедуры B10MOVE и C10MOVE. B10MOVE пересылает содержимое поля NAME1 в поле NAME2. Процедура начинает с самого левого байта в поле NAME1 и в цикле пересы лает затем второй байт, третий и т.д.
Рис. Расширенные операции пересылки.
NAME1: A B C D E F G H I
| | | | | | | | |
NAME2: J K L M N O P Q R
Для продвижения в полях NAME1 и NAME2 в регистр CX заносится значение 9, а регистры SI и DI используются в качестве индексных. Две команды LEA загружают относительные aдреса полей NAME1 и NAME2 в регистры SI и DI:
LEA SI,NAME1;Загрузка относительных адресов
LEA DI,NAME2; NAME1 и NAME2
Для пересылки содержимого первого байта из поля NAME1 в первый байт поля NAME2 используются адреса в регистрах SI и DI. kвадратные скобки в командах MOV обозначают, что для доступа к памяти используется адрес в регистре, указанном в квадратных cкобках. Таким образом, команда MOV AL,[SI] означает: использовать адрес в регистре SI (т.е.NAME1) для пересылки соответствующего байта в регистр AL. А команда MOV [DI],AL означает: пересылать содержимое регистра AL по адресу, лежащему в регистре DI (т.е. NAME2).
Следующие команды увеличивают значения регистров SI и DI и уменьшают значение в регистре SH. Если в регистре CX не нулевое значение, управление передается на следующий цикл (на метку B20).Так как содержимое регистров SI и DI было увеличено на 1, то следующие команды MOV будут иметь дело с адресами NAME1+1 и NAME2+1. Цикл продолжается таким образом, пока не будет передано содержимое NAME1+8 и NAME2+8.
Процедура C10MOVE аналогична процедуре B10MOVE с двумя исключениями: она пересылает данные из поля NAME2 в поле NAME3 и использует команду LOOP вместо DEC и JNZ.
24. Команды логических операций: AND, OR, XOR, TEST, NOT
Логические операции являются важным элементом в проектировании микросхем и имеют много общего в логике программирования. Команды AND, OR, XOR и TEST - являются командами логических операций. Эти команды используются для сброса и установки бит и для арифметических операций в коде ASCII. Все эти команды обрабатывают один байт или одно слово в регистре или в памяти, и устанавливают флаги CF, OF, PF, SF, ZF.
AND: Если оба из сравниваемых битов равны 1, то результат равен 1; во всех остальных случаях результат - 0.
OR: Если хотя бы один из сравниваемых битов равен 1, то результат равен 1; если сравниваемые биты равны 0, то результат - 0.
XOR: Если один из сравниваемых битов равен 0, а другой равен 1, то результат равен 1; если сравниваемые биты одинаковы (оба - 0 или оба - 1) то результат - 0.
TEST: действует как AND-устанавливает флаги, но не изменяет биты.
Первый операнд в логических командах указывает на один байт или слово в регистре или в памяти и является единственным значением, которое может изменятся после выполнения команд.
Еще одна логическая команда NOT устанавливает обpатное значение бит в байте или в слове, в регистре или в памяти: нули становятся единицами, а единицы - нулями. Команда NOT не эквивалентна команде NEG, которая меняет значение с положительного на отрицательное и наоборот.
Дата добавления: 2015-04-22; просмотров: 76 | Поможем написать вашу работу | Нарушение авторских прав |