Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Из чего состоит цикл?

#циклы #любой_язык


Мне чисто из любопытства интересно как же в любом языке программирования сделан цикл:
for, while, repeat, foreach и т.д.

Сам уже часто юзаю, но если бы хотел написать свой язык, столкнулся бы с проблемой,
а юзать чужие библиотеки хочется по-минимуму, для накопления знаний.

Так из чего состоит цикл, как он взаимодействует с компьютером?

Вот я понимаю как цикл работает, но как же он дает команду процессору - вернись и
повтори еще раз?
    


Ответы

Ответ 1



Типичный цикл на языке ассемблера (ассемблер для ARM в режиме Thumb, x86 я не знаю): MOV R6, 10 ; Здесь верхняя граница цикла MOV R5, 0 ; Регистр-счетчик, помещаем в него 0 ; Это метка, она нужна для удобства программирования, ; когда ассемблер переведет этот код в инструкции процессора, ; он узнает его размер в байтах и, соответственно, ; фактический адрес этой метки и дальше в коде заменит его nextItem: ; ... ; Здесь тело цикла ; ... ADD R5, 1 ; Увеличиваем значение в регистре-счетчике CMP R5, R6 ; Сравниваем значения регистров R5 и R6 BCC nextItem ; Если меньше, переходим по адресу метки, иначе идем дальше (цикл завершается) ; На самом деле операция CMP вычитает из первого операнда второй, ; но не сохраняет результат, а только устанавливает соответствующие флаги, ; а операция BCC проверяет флаг C (Carry — флаг переноса) и выполняет переход ; если он сброшен ; но это не относится к вопросу, если интересно, можете почитать в литературе Как вы видите, действительно никаких циклов среди инструкций процессора нет, он умеет только что-то вычислять и делать условные или безусловные переходы, если вы пишете код на языке ассемблера (или прямо в машинных кодах), то вы самостоятельно организовываете цикл (на самом деле вариаций цикла может быть куча и приведенный код — лишь одна из них), если вы пишете код на языке более высокого уровня, то за вас это делает компилятор или транслятор.

Комментариев нет:

Отправить комментарий