Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Команда LOOP переход по счетчику




ЛЕКЦИЯ 10

КОМАНДЫ УПРАВЛЕНИЯ ЦИКЛАМИ (LOOPx)

Эти команды организуют циклические вычисления используя регистр CX по своему прямому назначению. В СХ должно быть занесено количество повторений цикла.Эти команды реализуют цикл с постусловием.

LOOP короткая_метка

Логика работы команды

<CX>= Число повторения циклов

label: Тело цикла

...

<CX>=<CX>-1

if(<CX><>0) goto label

 

Реализация цикла без команды LOOP

mov cx, количество циклов

label:

........

DEC cx

CMP CX,0

JNE label

Передачу управления на короткую метку для базовых процессоров является обязательным. Поскольку условие выхода из цикла проверяется в его конце при значении счетчика = 0 цикл все равно выполнится, ТАКЖЕ ПРОИЗОЙДЕТ ЗАЦИКЛИВАНИЕ. Что бы избежать зацикливание содержимое <cx> проверяется до начала цикла. По-этому стандартная последовательность команд для организации цикла с счетчиком имеет вид:

mov cx,counter

JCXZ Exit;если <cx>=0 обойти цикл

label

.....

.....

loop label

ПРИМЕР:

Вычислить значение факториала числа

locals @@ - директива позволяет не думать о дублировании имен меток в разных программах. Метки с префиксов @@ считаются локальными. Если компилятор встречает метку с таким же именем при компиляции изменяется имя метки.

 

.model LARGE, C

Locals @@

.code

Extrn C n:word, p:word

Public C FACTORIAL

FACTORIAL proc far

mov cx,n

mov si,1;регистр индекса источника

mov ax,si

JCXZ @@Exit

@@begin:

mul si;<dx;ax>=<ax><si>

inc si

loop @@begin

@@Exit

mov, p

FUCTORIAL endp

end

Д/З Написать программу вычисления факториала на C++

КОМАНДА LOOPe(LOOPz)

команда имеет 2 равнозначных имени

LOOPe - если равно

LOOPe - если ноль

Логика работы

<cx>=counter

label:

...

<cx>=<cx>-1

if(<cx><>0) and ZF=1

Данная команда применяется если нужно досрочно выйти из цикла как только находится первый элемент отличный от заданной величины. Антиподом этих команд есть:

LOOPne(LOOPnz)

В отличии от LOOPe(LOOPz) ZF проверяется на 0

<cx>=counter

label:

......

<cx>=<cx-1>

if(<cx><>0) and ZF=0 goto label

Эта команда выходит из цикла как только находится первый элемент равный заданной величине.

Пример:

Вычислить значение суммы чисел натурального ряда от 1 до n вычисления закончить как только сумма станет равной некоторому к или будут перебраны все n чисел

; SUM.ASM

;s=1+2+3+...+n

;выход если s>=k

.model LARGE,C

Local @@

Extrn C n:word, s:word, k:word

Public SUM

SUM proc far

mov cx,n

xor ax, ax

xor si, si

jcxz Exit

@@begin:

inc si

add ax, si

cmp ax, k;если <ax>-k==0 то ZF=1

loopne @begin

@@Exit

mov s,ax

ret

SUM endp

end

д/з С++ вычисление суммы чисел натурального ряда с асм модулем




Поделиться с друзьями:


Дата добавления: 2014-12-16; Просмотров: 500; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.