Циклы
Выделяют три вида циклов:
1. цикл с предусловием 2. цикл с постусловием 3. цикл с известным количеством шагов(цикл с параметром) Вопрос: почему выделяют 3 вид цикла, если он выражается через цикл с предусловием? Есть предположение что 3 вид цикла выделяют лишь потому что в Ассемблере присутствует инструкция loop которая непосредственно осуществляет декремент значения счетчика(регистр ecx, если ошибаюсь поправьте) и его проверку на ноль (как условие завершения цикла). Т.е. если первые два вида релизуются в asm через условные конструкции, то 3 вид имеет вполне обосбленную для этого инструкцию. Хотя может быть все намного глубже. |
Ответ: Циклы
помоему третий вид это частный случай улучшающий жизнь разработчика.
|
Ответ: Циклы
И вопрос номер 2 уже более практический стороны:
Кто разбирался с гостом 19.701? Как трактовать символ "Подготовка" и корректно ли его применять в изображении циклов с известным количеством шагов? |
Ответ: Циклы
ZanoZa
а циклов физически нету в процессоре, есть compare и jump (if и goto), вот так тебе циклы и делают судя по описанию госта тут http://cert.obninsk.ru/gost/282/282.html то подготовку использовать тебе не нужно, там внизу примеры есть |
Ответ: Циклы
я так понял compare (или же cmp), есть инструкция которая используется для организации ветвления, но не осуществляет ветвление.
тут есть описание loop, по сути и есть цикл с заданным количеством шагов. http://www.mini-soft.ru/soft/vba/kart/image039.gif пример цикла с использованием символа "подготовка". И там же на сайте описан этот символ: http://www.mini-soft.ru/soft/vba/r_2.php Как трактовать этот символ? |
Ответ: Циклы
ZanoZa
как обычный for |
Ответ: Циклы
Цитата:
PHP код:
|
Ответ: Циклы
Tronix
я говорил физически, а не программно, современные x86 процессоры это RISC ядро с CISC обёрткой, большинство x86 команд и остальные делаются через микрокод команда loop это по-сути dec, cmp и jmp, я не вижу смысла чтобы такие три команды реализовывали в железе как одну команду, потому считаю что она реализована в микрокоде процессора, возможно ошибаюсь :) |
Ответ: Циклы
Скорее всего так и есть. Однако, первый вопрос остается открытым.
|
Ответ: Циклы
Цитата:
Если уж на то пошло, то команда loop по сути это dec cx и jnz. Но даже на уровне микроядра реализованна отдельно. Как известно, на 8088 и 8086 она выполнялась быстрее чем аналогичные dec/jnz, одна со времен 386 наблюдается обратная ситуации - loop выполняется дольше. Поэтому во всяких тру-хацкерских манах по оптимизации советуют не использовать loop для циклов на современных процах. Из этого собственно и сделан вывод - что и на уровне микроядра эти команды реализованы по-разному во всей линейке процессоров x86. PS: Хотя возможно тоже ошибаюсь, потому что эта ситуация может происходить из-за спаривания/не спаривания, ветвлений и прочих свистоперделок. Сейчас с этим черт ногу сломит, и пока не произведешь ряд тестов - хрен разберешься что в том или ином случае будет быстрее. С 88/286/386/486 было все куда более понятно.... |
Часовой пояс GMT +4, время: 12:32. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot