Циклы организуются на основе команд условного перехода. Одна из таких команд 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
Запускаем: