Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

Inc si ;Следующий символ в name1

Inc di ;Следующая позиция в name2

DEC CX ;Уменьшить счетчик цикла

JNZ B20 ;Счетчик > 0? Да - цикл

RET ;Если счетчик = 0, то

B10MOVE ENDP ; вернуться

; Расширенная пересылка (LOOP-подпрограмма),

; использующая команду LOOP:

; -----------------------------------------;

C10MOVE PROC

LEA SI,NAME2 ;Инициализация адресов

LEA DI,NAME3 ; NAME2 и NAME3

MOV CX,09 ;Переслать 9 символов

C20

MOV AL,[SI] ;Переслать из NAME2

MOV [DI],AL ;Переслать в NAME3

Inc di ;Следующий символ в name2

Inc si ;Следующая позиция в name3

LOOP C20 ;Уменьшить счетчик,

; если не ноль, то цикл

RET ;Если счетчик = 0, то

C10MOVE ENDP ; вернуться

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.7.5. Расширенные операции пересылки.

Процедура 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.

Задание: Введите программу, приведенную на рис.7.5, выполните ее

ассемблирование, компоновку и трассировку с помощью отладчика DEBUG.

Обратите внимание на изменения в регистрах, командном указателе и в стеке.

Для просмотра изменений в полях NAME2 и NAME3 используйте команду D DS:0.

КОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙ: AND, OR, XOR, TEST, NOT

________________________________________________________________

Логические операции являются важным элементом в проектировании

микросхем и имеют много общего в логике программирования. Команды AND, OR,