КАТЕГОРИИ: Архитектура-(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; Просмотров: 519; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |