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

2) Команда перехода по обнуленному счетчику.

JCXZ <адрес перехода>

передает управление по указанному адресу, если содержимое регистра cx равно 0. Например:

mov cx, loop_count ; загрузка счетчика

jcxz end_of_loop ; проверка счетчика

begin_loop:

; ... тело цикла ...

loop begin_loop

end_of_loop: ...

3) Команды организации цикла с условием.

LООРE <адрес перехода>

LOOPNE <адрес перехода>

уменьшают содержимое на единицу и передают управление по указанному адресу при условии, что содержимое cx отлично от нуля, но LООРE дополнительно требует наличия признака "равно", а LOOPNE - ''не равно", формируемых командами сравнения. Например:

mov cx, loop_count ; загрузка счетчика

jcxz end_of_loop ; проверка счетчика

begin_loop:

; ... тело цикла ...

cmp al, 100 ; проверка содержимого al

loopnebegin_loop; возврат в цикл, еслиcx0 и al100

end_of_loop: ...

Вопрос №37

Два регистра используются для поддержки так называемых цепочечных операций

  1. esi/si — индекс источника. Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике.

  2. edi/di — индекс приемника (получателя). Этот регистр в цепочечных операциях содержит текущий адрес в цепочке-приемнике.

Это команды обработки строк символов

Цепочечные команды позволят производить действия над блоками памяти, представляют собой последовательность элементов размером 8, 16, 32 бита.

Существует следующие операции обработки цепочек:

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

movs адрес_приемника,адрес_источника

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

cmps адрес_приемника,адрес_источника

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

scas адрес_приемника

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

lods адрес_источника

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

stos адрес_приемника

  1. получение элементов цепочки из порта ввода-вывода:

ins адрес_приемника,номер_порта

  1. вывод элементов цепочки в порт ввода-вывода:

outs номер_порта,адрес_источника

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

movs адрес_приемника,адрес_источника movsb movsw movsd

MOVS может работать с цепочками любого размера. При трансляции команда movs преобразуется в одну из трех movsB, movsW, movsD.

Команда movs пересылает только 1 элемент исходя из его типа и модифицированного значения регистров ESI,EDI.

Перечислим последовательность действий, которые нужно выполнить в программе для того, чтобы переслать

цепочку элементов из одной области памяти в другую с помощью команды MOVS:

  1. Установить значение флага DF в зависимости от того, в каком направлении будут обрабатываться элементы цепочки — в направлении возрастания или убывания адресов.

  2. Загрузить указатели на адреса цепочек в памяти в пары регистров DS, ES:DI

  3. Загрузить в регистр ЕСХ/СХ количество обрабатываемых элементов.

  4. Выдать команду MOVS с префиксом REP.

REP используется с командами пересылки и сохранения элементов. REP заставляет данные команды, пока содержимое ECX/CX не станет равно 0.

Вопросы №38

Массив — структурированный тип данных, состоящий из некоторого числа элементов одного типа.

Чтобы использовать массив в программе, его нужно смоделировать одним из перечисленных далее способов:

  1. Можно перечислить элементы массива в поле операндов одной из директив описания данных.

mas dd 1,2,3,4,5

  1. Можно использовать оператор повторения DUP.

mas dw 5 dup (0)

  1. Можно использовать директивы LABEL и REPT.

Директива REPT относится к макросредствам языка ассемблера и вызывает повторение указанное число раз строк, заключенных между директивой и строкой ENDM.

В результате в памяти будет создана последовательность из четырех слов fl f0.

Эту последовательность можно трактовать как массив байтов или слов в зависимости от того, какое имя области мы будем использовать в программе — mas_b или mas_w.

  1. Чтобы инициализировать значениями область памяти и впоследствии трактовать ее как массив, можно использовать цикл.

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