ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
423791 Топик полностью
Ксения (11.07.2013 15:01 - 15:05, просмотров: 139) ответил fk0 на Зачем? Это функция компилятора -- распределять переменные по памяти и регистрам. Есть обратная функция, в asm() написать чего ты хочешь.
Застолбить регистр общего назначения под свои цели - слишком серьезная ответственность, чтобы компилятор взял ее на себя. Дело в том, что по нынешним временам широко используются готовые библиотеки (в том числе и в уже скомпилированном виде), относительно которых далеко не всегда бывает известно, какие из регистров в них используются, а какие нет. Компилятор этого тоже проверить никак не может. А потому, решаясь сделать из регистра общего назначения переменную, мы рискуем тем, что после вызова какой-то из библиотечных функции ее значение испортится. Если программист пишет библиотеки сам, то обычно резервирует старшие регистры под переменные, которые библиотека никогда не использует. Делается это затем, чтобы скомпилированная библиотека означенные регистры сама не использовала, позволив их использовать под переменные приложению. Сами же переменные, расположенные в регистрах общего назначения, очень удобны для создания флагов и счетчиков в процедурах обработки прерываний, поскольку не требуют дополнительного сохранения и восстановления значений используемых регистров при входе и выходе. Не говоря уже о том, что при этом не используются обращения к памяти.