прерывании, нафига он все регистры сохраняет, если используються только 6?
Вообще существуют волатильные и неволатильные регистры для компилятора. Сохраняются, как правило, первые. Но делается это, как я понял, вот для чего. К примеру, что если у нас язык с исключениями и кодогенератору не очень понятно, где именно в try - блоке оно будет вызвано? Нужно сохранить состояние процессора, чтобы быть уверенным, что при передаче управдения в обрабатывающий блок мы сохраняем корректность поведения программы до исключения. Или же просто одна функция вызывается из другой и мы хотим достичь того же эффекта
т.е. если я не буду вызывать функцию из прерывания тогда компилятор не будет все попало сохранять? А его не интересует то что используемые внутри прерывания регистры значительно меньше сохраненных
Я не уверен в этом. Может зависеть от компилятора и конвенции вызова.
просто все попало в стек сохраняет не думая. Я думаю такая у него концепция
Возможно. Может это просто упростило разработку(компилятора). Наверное, такое реально лучше на ассемблере вызвать.
а я понял. Просто я не знаю как прерывания с асма вызывать если на си пишу
Можно попробовать asm volatile( "int $0\n" )
Ну что-то в этом духе, я ж хз, что там именно за асм
Обсуждают сегодня