Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 20.01.2010, 21:41   #1
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
Циклы

Выделяют три вида циклов:
1. цикл с предусловием
2. цикл с постусловием
3. цикл с известным количеством шагов(цикл с параметром)

Вопрос: почему выделяют 3 вид цикла, если он выражается через цикл с предусловием?
Есть предположение что 3 вид цикла выделяют лишь потому что в Ассемблере присутствует инструкция loop которая непосредственно осуществляет декремент значения счетчика(регистр ecx, если ошибаюсь поправьте) и его проверку на ноль (как условие завершения цикла).
Т.е. если первые два вида релизуются в asm через условные конструкции, то 3 вид имеет вполне обосбленную для этого инструкцию.
Хотя может быть все намного глубже.
(Offline)
 
Ответить с цитированием
Старый 20.01.2010, 21:54   #2
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: Циклы

помоему третий вид это частный случай улучшающий жизнь разработчика.
(Offline)
 
Ответить с цитированием
Старый 21.01.2010, 12:32   #3
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
Ответ: Циклы

И вопрос номер 2 уже более практический стороны:
Кто разбирался с гостом 19.701? Как трактовать символ "Подготовка" и корректно ли его применять в изображении циклов с известным количеством шагов?
(Offline)
 
Ответить с цитированием
Старый 21.01.2010, 12:54   #4
jimon
 
Сообщений: n/a
Ответ: Циклы

ZanoZa
а циклов физически нету в процессоре, есть compare и jump (if и goto), вот так тебе циклы и делают

судя по описанию госта тут http://cert.obninsk.ru/gost/282/282.html то подготовку использовать тебе не нужно, там внизу примеры есть
 
Ответить с цитированием
Старый 21.01.2010, 15:01   #5
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
Ответ: Циклы

я так понял compare (или же cmp), есть инструкция которая используется для организации ветвления, но не осуществляет ветвление.
тут есть описание loop, по сути и есть цикл с заданным количеством шагов.

http://www.mini-soft.ru/soft/vba/kart/image039.gif пример цикла с использованием символа "подготовка".
И там же на сайте описан этот символ: http://www.mini-soft.ru/soft/vba/r_2.php
Как трактовать этот символ?
(Offline)
 
Ответить с цитированием
Старый 21.01.2010, 17:57   #6
jimon
 
Сообщений: n/a
Ответ: Циклы

ZanoZa
как обычный for
 
Ответить с цитированием
Старый 21.01.2010, 22:52   #7
Tronix
Знающий
 
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений
(для 331 пользователей)
Ответ: Циклы

Сообщение от jimon Посмотреть сообщение
ZanoZa
а циклов физически нету в процессоре
Если речь о x86, то fail:

MOV ECX,100
mylabel
:
   ;
Main code block goes here.
LOOP mylabel 
Будучи справедливым, в некоторых специфических микроконтроллерах действительно нету циклов. Но сейчас такое бывает очень редко.
(Offline)
 
Ответить с цитированием
Старый 21.01.2010, 23:30   #8
jimon
 
Сообщений: n/a
Ответ: Циклы

Tronix
я говорил физически, а не программно, современные x86 процессоры это RISC ядро с CISC обёрткой, большинство x86 команд и остальные делаются через микрокод

команда loop это по-сути dec, cmp и jmp, я не вижу смысла чтобы такие три команды реализовывали в железе как одну команду, потому считаю что она реализована в микрокоде процессора, возможно ошибаюсь
 
Ответить с цитированием
Старый 22.01.2010, 00:09   #9
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
Ответ: Циклы

Скорее всего так и есть. Однако, первый вопрос остается открытым.
(Offline)
 
Ответить с цитированием
Старый 22.01.2010, 00:38   #10
Tronix
Знающий
 
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений
(для 331 пользователей)
Ответ: Циклы

Сообщение от jimon Посмотреть сообщение
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 было все куда более понятно....
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:00.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com