![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Основная проблема, которая при этом возникает, – как сохранить значения счетчиков в регистре СХ для каждого из циклов. Для временного сохранения счетчика внешнего цикла на время выполнения внутреннего доступно несколько способов: задействовать регистры, ячейки памяти или стек. В следующем фрагменте программы имеется три цикла, вложенные один в другой. Этот фрагмент можно рассматривать как шаблон для построения других программ с вложенными циклами.
…
mov сх,100;количество повторений цикла cycl_l
cycl_l:
push сх;счетчик цикла cycl_l в стек
…..;команды цикла cycl_l
mov сх,50;количество повторений цикла cycl_2
cycl_2:
push сх;счетчик цикла cycl_2 в стек
.....;команды цикла cycl_2
mov сх,25;количество повторений цикла cycl_3
cycl_3:
.....;команды цикла cycl_3
loop cycl_3
...;команды цикла cycl_2
pop сх;восстановить счетчик цикла cycl_2
loop cycl_2
...;команды цикла cycl_l
pop сх;восстановить счетчик цикла cycl_l
loop cycl_l
…
Пример фрагмента программы, которая обрабатывает специальным образом некоторую область памяти. Область памяти рассматривается как совокупность пяти полей, содержащих 10 однобайтовых элементов. Требуется заменить все нулевые байты в этой области значением 0ffh.
model small
.stack 100h
.data
mas db 1,0,9,8,0,7,8,0,2,0
db 1,0,9,8,0,7,8,0,2,0
db 1,0,9,8,0,7,8,0,2,0
db 1 0,9,8,0,7,8,0,2,0
db 1,0,9,8,0,7,8,0,2,0
. code
start:
mov ax,@data
mov ds,ax
xor ax, ax
lea bx, mas
mov сx, 5
cycl_l:
push сx
xor si, si
mov cx, 10
cycl_2:
cmp byte ptr [bx+si],0
jne no_zero
mov byte ptr [bx+si],0ffh
no_zero:
inc si
loop cycl_2
pop cx
add bx, 10
loop cycl_l
exit:
mov ax, 4c00h
int 21h
end start
ЛИТЕРАТУРА
Дата публикования: 2014-12-08; Прочитано: 404 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!