Лабораторная работа №3
Организация циклов.
Для организации циклов с известным числом повторений используется команда loop или ее модификации. Область действия команды и ее модификаций такая же, как у команд условного перехода (-128..127).
Циклический участок программы обычно имеет следующую структуру:
mov сx, число повторений { Инициализация цикла}
Jcxz метка_после_цикла
метка:
............. {тело цикла}
Loop метка
метка_после_цикла :
Команда jcxz означает переход при сх=0, т.е. цикл не нужно выполнять ни разу. Напоминаем, что по команде loop содержимое сх уменьшается на 1 и, если сх<>0, то переход к метке, заданной в команде loop, в противном случае — выход из цикла.
Если выход из цикла определяется не только числом повторений, вместо команды loop можно использовать ее разновидности
{ loope } повтор цикла, если счетчик не исчерпан и флаг
{ loopz } нуля установлен
{ loopne } повтор цикла, если счетчик не исчерпан и флаг
{ loopnz } нуля не установлен
ПРИМЕР: Найти сумму S=1+2+3+4+…+n.
Var
s,n:integer;
Begin
Read(n);
Asm
Mov cx,n
Mov ax,0
jcxz @end
@for:
Add ax,cx
loop @for
@end: mov s,ax
End;
writeln('s=',s);
Readln;
Readln;
End.
Та же программа с использованием для организации цикла «прыжков».
Var
s,n:integer;
Begin
Read(n);
Asm
Mov cx,n
Mov ax,0
@for: jcxz @end
Add ax,cx
Dec cx
jmp @for
@end: mov s,ax
End;
writeln('s=',s);
Readln;
Readln;
End.
Пример2. 1. Дано натуральное n. Написать программу вычисления x в степени n.
Var
x,n:integer;
Begin
Read(x,n);
Asm
Mov cx,n
Mov ax,1
jcxz @end
@for:
Imul x
loop @for
@end: mov x,ax
End;
writeln('s=',x);
Readln;
Readln;
End.
Задание. Написать программу на языке Паскаль с использованием Ассемблерной вставки для произведения вычислений.
1. Найти сумму: S=1+2 +3 +4 +…+n
2. Вычислить произведение: S=(n-1)(n-2)(n-3)…(n-(n-1)).
3. Дано целое число n. Найти сумму цифр числа n.
4. Дано целое n. Сколько цифр в числе n?
5. Наитии наибольший делитель числа x не считая само число.