Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемЖанна Морозова
1 Циклы в языке Ассемблер.
2 Цикл со счетчиком Цикл со счетчиком можно организовать с помощью конструкций IF и GOTO. В нашем примере тело цикла должно повторяться 10 раз. Сначала нужно инициализировать счетчик. Затем выполняем тело цикла, после этого увеличиваем счетчик на 1. Проверяем: если счетчик меньше 10, то начинаем опять выполнять тело цикла, если же счетчик равен 10, то мы выходим из цикла. for_start: mov cx,0 ;инициализируем счетчик СХ= 0 for_loop: ;метка для перехода назад... ;тело цикла inc сх ;увеличиваем СХ на 1 cmp сх,10 ;сравниваем СХ с 10 jnz for_loop ;если не равно, переход на ;for_loop for_finish: ;если СХ = 10, выходим
3 Цикл со счетчиком for_start: mov i, 0 ;переменная типа dword 1 = 0 for_loop: ;метка для перехода назад... ;тело цикла inc i ;увеличиваем i на 1 cmp i, 10 ;сравниваем i с 10 jnz for_loop ;если не равно, переход на for_loop for_finish: ;если равно, выходим Рассмотрим другую версию цикла FOR. Она работает так же, как предыдущая, но счетчик хранитьcя не в регистре, а в памяти, в переменной i. Еще одна версия цикла, использующая команду DEC и команду проверки флага ZF вместо команды сравнения СМР. for_start: mov есх,10 ;ЕСХ = 10 for_loop: ;метка для перехода назад... ;тело цикла dec есх ;уменьшаем ЕСХ на 1 jnz for_loop ;если не 0, переходим на for_loop for_finish: ;если 0, выходим из цикла
4 Команда цикла LOOP for_start: mov сx, 10 ;CX = итераций for_loop: ;метка для возврата назад... ;тело цикла loop for_loop ;уменьшаем СХ, если не 0, переходим ;к for_loop for_finish: ;выход из цикла В CISC-процессорах для организации цикла можно использовать команду LOOP. LOOP метка Подобно команде MUL, команда LOOP работает с двумя операндами. Первый операнд фиксирован, и мы не можем его указать явно. Это значение регистра ЕСХ (или СХ). Второй это адрес целевой метки цикла. Инструкция LOOP уменьшает значение регистра ЕСХ (СХ) на единицу и, если результат не равен 0, то она переходит на указанную метку.
5 Команда цикла LOOPZ и LOOPNZ for_start: mov cx,10 ;СХ = 10 for_lоор: ;метка для возврата назад … ;тело цикла FOR ;где-то здесь изменяется регистр ВХ cmp bx,3 ;ВХ равен 3? loopz for_loop ;СХ=СХ-1; если СХО, и если ВХ=3, ;переход к for_loоp for_finish: ;если СХ =0 или если ВХ 3, выходим Команда LOOPZ позволяет организовать цикл с проверкой дополнительного условия. Например: цикл нужно выполнить, как и раньше, не более 10 раз, но только при условии, что регистр ВХ содержит значение 3. Как только значение в регистре ВХ изменится, цикл нужно прервать. LOOPZ метка LOOPNZ метка Команда LOOPZ уточняет условие перехода следующим образом: переход на указанную метку произойдет, если СХ не содержит нуля и в то же время флаг ZF равен единице. Команда LOOPNZ работает аналогично, но дополнительное условие противоположно: переход будет выполнен только если СХ (ЕСХ) не равен 0 и в то же время ZF равен 0.
6 Пример использования циклов Программа, которая будет печатать все буквы английского алфавита. ASCII-коды этих символов расположены последовательно, поэтому можно выводить их в цикле. Для вывода символа на экран используется функция DOS 02h (выводимый байт должен находиться в регистре DL). mov ah,02h ;Для вызова функции DOS 02h - вывод символа mov dl,'A' ;Первый выводимый символ mov cx,26 ;Счётчик повторений цикла metka: int 21h ;Обращение к функции DOS inc dl ;Следующий символ loop metka ;Команда цикла mov ah,09h ;Функция DOS 09h - вывод строки mov dx,press ;в DX адрес строки int 21h ;обращение к функции DOS mov ah,08h ;функция DOS 08h - ввод символа int 21h ;обращение к функции DOS Команды «int 21h» и «inc dl» будут выполняться в цикле 26 раз. Для того, чтобы программа не закрылась сразу, используется функция DOS 08h ввод символа с клавиатуры без эха, то есть вводимый символ не отображается. Перед этим выводится предложение нажать любую кнопку.
7 Пример использования циклов Необходимо вывести на экран цифры от 0 до 9, используя цикл с предусловием и цикл с постусловием. Цикл с предусловием: mov dl, '0' mov ah, 02 cikl: cmp dl, '9' ja end_cikl int 21h inc dl jmp cikl end_cikl: Цикл с постусловием: mov dl, '0' mov ah, 02 cikl: int 21h inc dl cmp dl, '9' jbe cikl
8 Пример использования циклов Необходимо вывести на экран цифры от 0 до 9, используя цикл со счетчиком. Цикл с предусловием: mov cx, 10 mov dl, '0' mov ah, 02 cikl: int 21h inc dl loop cikl
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.