STOSB ; A := AL, DI := DI+1. MOV SI, OFFSET A. Контрольные вопросы. Задания
STOSB ; A: = AL, DI: = DI+1 MOV AX, 0FFFFH STOSW ; B: = AX, DI: = DI+2
Префиксы повторения позволяют применить цепочечные команды сразу к целым последовательностям байт или слов. При этом размер последовательности указывается в регистре CX. Цепочечная команда с префиксом повторения выполняется CX раз и пока истинно условие выполнения команды для конкретного префикса повторения. После выполнения команды с префиксом повторения значение регистра CX уменьшается на 1. Другими словами, цепочечная команда с префиксом повторения выполняется пока значение регистра CX не равно 0 и пока истинно условие выполнения команды для конкретного префикса повторения. Некоторые префиксы не имеют условий выполнения команд, и цепочечные команды с этими префиксами выполняются ровно CX раз. Вообще, с префиксом повторения может быть выполнена любая команда процессора, но это, как правило, бывает нецелесообразно. В основном с префиксами повторения используются цепочечные команды. Однако использование команд LODSB и LODSW с префиксами повторения обычно также бывает нецелесообразно. Каждый префикс повторения, как и любая команда процессора, имеет свое мнемоническое обозначение. Синтаксис записи команды с префиксом повторения следующий: < префикс_повторения> < команда> < операнды>
То есть команда записывается как обычно, но ей предшествует мнемоническое обозначение префикса повторения. При использовании префикса повторения REP число раз, которое должна выполниться команда, указывается в регистре CX. Этот префикс не имеет условий выполнения команды, и команда выполняется ровно CX раз. Пример использования префикса повторения REP с цепочечной командой MOVSB (предполагается, что флаг DF сброшен):
A DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; описание переменных B DB 10 DUP? . . . MOV DS, SEG A ; настройка DS: SI на A MOV SI, OFFSET A MOV ES, SEG B ; настройка ES: DI на B MOV DI, OFFSET B MOV CX, 10 REP MOVSB ; пересылка 10 байт из A в B
Префиксы REPE и REPZ идентичны. Команда с этими префиксами выполняется, пока значение регистра CX не равно 0 и пока значение флага нуля ZF равно 1. Эти префиксы можно использовать с цепочечными командами CMPS и SCAS (обобщенные мнемоники – без букв ‘B’ и ‘W’ в конце) для обнаружения первого несовпадающего значения двух последовательностей (команда CMPS) или для обнаружения первого несовпадающего значения элемента последовательности и регистра AL/AX (команда SCAS). Следует отметить, что префиксы REP, REPE и REPZ транслируются в один и тот же машинный код, но их действие различно для разных строковых команд – использование этих префиксов с командой MOVS даст выполнение команды ровно CX раз, а с командами CMPS и SCAS – в зависимости от входных данных. Префиксы REPNE и REPNZ идентичны. Команда с этими префиксами выполняется, пока значение регистра CX не равно 0 и пока значение флага нуля ZF равно 0. Эти префиксы можно использовать с цепочечной командой SCAS для поиска определенного значения (которое определяется регистрами AL/AX) в последовательности байт или слов. Пример использования префикса повторения REPNZ с командой SCASB для отыскания заданного значения в последовательности байт (предполагается, что флаг DF сброшен): A DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; описание переменных . . . MOV ES, SEG B ; настройка ES: DI на A MOV DI, OFFSET B MOV CX, 10 MOV AL, 5 REP SCASB; поиск значения 5 в последовательности A ; теперь значение DI установлено на след. байт после найденного значения Контрольные вопросы 1. Какие цепочечные команды существуют для МП 8086?
2. В чем особенность цепочечных команд? 3. Какими способами можно определить массив в программе на ассемблере? 4. Для чего служит директива SEG? 5. Для чего служит директива OFFSET? 6. В каких частях программы можно размещать данные? 7. Объясните выбор части программы, в которой размещаются данные для вашей программы? 8. В чем состоит отличие префиксов повторения REP и REPNE? Задания 1. Сложить элементы массива A с соответствующими элементами массива B и записать результат в массив B. 2. Умножить элементы массива A на соответствующие элементы массива B и записать результат в массив B. 3. Прибавить к элементам массива A единицу и записать результат в массив B. 4. Разделить элементы массива A на 2 и записать результат в массив B (использовать команду арифметического сдвига). 5. Обнулить нечетные элементы массива A и записать результат в массив B. 6. Обнулить все элементы массива A меньшие 20 и записать результат в массив B. 7. Выполнить с элементами массива A и соответствующими элементами массива B операцию логического «И» и записать результат в массив B. 8. Выполнить с элементами массива A и соответствующими элементами массива B логическую операцию «ИСКЛЮЧАЮЩЕЕ ИЛИ» и записать результат в массив B. 9. Ввести строку и символ. Если символ входит в строку, то в регистр SI записать номер позиции, в которой он встретился. 10. Составить программу, удаляющую все пробелы из введенной строки.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|