Цитата(yung @ Apr 14 2005, 09:02)
Компилятор все переменные размещает в ОЗУ, в то время как практически все команды ассемблера работают только с регистрами (mov, andi и т.д.). Если хочется сделать все это на ассемблере, то необходимо все эти переменные предварительно перегнать в регистры, а затем (при выходе из асма) - вернуть обратно.
Вообще говоря, неверно; CV по умолчанию размещает часть глобальных переменных в нижних регистрах. Локальные переменные, сколько получится, размещаются в r16-r21, остальные - на стеке данных, там же, где и параметры функций.
Цитата(yung @ Apr 14 2005, 09:02)
И не забудь использованные регистры сохранить в стеке при входе и забрать их при выходе. Но боюсь, что даже в этом случае могут начаться чудеса при Сишных прерываниях (какие-то из использованных регистров могут быть задействованы и там, и не факт, что Си вернет их обратно).
Регистры r0,r1,r22-r27,r30,r31 в функции можно не сохранять, CV использует их, как временные. К прерываниям это, разумеется, не относится