Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
palivo_finalv0_2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.57 Mб
Скачать

67 Цикл з постумовою (рис. 2)

На асемблері такий цикл можна запрограмувати наступним чином:

mov ecx, 0 ; обнулюємо лічильник – регістр ECX

cycle:

. . . ; тіло циклу

inc ecx ; збільшуємо лічильник на 1

cmp ecx, 10 ; порівнюємо лічильник з 10

jl cycle ; якщо лічильник менше – перехід на мітку cycle

Джерело: лекції Порєва

68. Програмування циклу зі збереженням біту переносу cf

mov ecx, 10 ; у регістр ECX записуємо кількість повторень

cycle:

. . . ; тіло циклу

dec ecx ; зменшуємо лічильник на 1

jnz cycle ; якщо лічильник не 0, то перехід на мітку cycle

Такий варіант циклу може бути використаний для наших цілей, оскільки ані

команда DEC, ані JNZ не змінюють біт CF регістру EFLAGS.

69. Програмування циклу на основі команд loop

Для организации цикла предназначена команда LOOP. У этой команды один операнд — имя метки, на которую осуществляется переход. В качестве счётчика цикла используется регистр CX. Команда LOOPвыполняет декремент CX, а затем проверяет его значение. Если содержимое CX не равно нулю, то осуществляется переход на метку, иначе управление переходит к следующей после LOOP команде.

Содержимое CX интерпретируется командой как число без знака. В CX нужно помещать число, равное требуемому количеству повторений цикла. Понятно, что максимально может быть 65535 повторений. Ещё одно ограничение связано с дальность перехода. Метка должна находиться в диапазоне -127…+128 байт от команды LOOP (если это не так, FASM сообщит об ошибке).

http://asmworld.ru/uchebnyj-kurs/013-cikly-i-komanda-loop/

70. Програмування вкладених циклів

Алгоритм со структурой вложенных циклов(циклический алгоритм) – это алгоритм, в котором внутри одного цикла называемого внешним (глобальным) расположен другой цикл  называемый внутренним (локальным). Для того, чтобы организовать внутренний цикл можно использовать любой из способов реализации внешнего цикла, но с одной особенностью. Для того, скажем, чтобы организовать внутренний цикл на основе команды Loop необходимо сохранить значение CX перед началом вложенного цикла и восстановить после его завершения (перед командой LOOP внешнего цикла). Сохранить значение можно в другой регистр, во временную переменную или в стек, то есть нужно слідить, тобы вложеный цикл не менял данные, необходимые внешнему циклу для корректной работы.

http://asmworld.ru/uchebnyj-kurs/013-cikly-i-komanda-loop/

71. Команди обробки рядків даних

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

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

Название

Команды

Действие

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

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

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

http://archkomp.narod.ru/lab09.htm

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