Шаг 13 - Организация цикла

Циклы организуются на основе команд условного перехода. Одна из таких команд jcxz. Переход будет выполнен по ней только в том случае, если в регистре CX находится ноль. Создаем программу:

MODEL	TINY
STACK 256	
DATASEG
	Hellostr DB 'Hello First Step Site '
CODESEG		
start:	
               
	mov ax,@data
	mov ds,ax	
	mov cx,4
w1:
	dec cx
	push cx 	
	mov bx,1
	mov cx,21
	mov dx,offset Hellostr 
	mov ah,40h
	int 21h
	pop cx
	jcxz endprog
	jmp w1  
endprog:
	mov ah,04Ch
	mov al,1h
	int 21h
end start	

Так как для перехода используется регистр CX и этот же регистр используется для вывода символов в функции 40h, то нам его придется помещать в стек и извлекать из стека. Смотрим:

mov cx,4
w1:
	dec cx
	push cx 

Задаем начальное значение на единицу больше, потом метка, а потом сразу его уменьшаем и сохраняем в стек. После вывода строки восстанавливаем из стека о команда jcxz проверяет на ноль, если не ноль, то назад к метке w1 и на единицу меньше.

pop cx
jcxz endprog

Запускаем:

13_1.gif (4431 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 28.11.2001