МИКРОКОНТРОЛЛЕР AVR - МИКРОКОНТРОЛЛЕР AVR

В этом примере для вычисления выражения В + (С * D), используется такое же количество команд и такой же объем в памяти, как и при использовании глобальных переменных в основной программе. Эта возможность делает AVR очень привлекательным при разработке компиляторов; можно работать с данными в разном формате без особых проблем с объемом используемой памяти.

Индексные регистры позволяют легко использовать указатели. Если содержимое регистра X служит в качестве указателя стека, а содержимое Y — в качестве указателя базового адреса, то остается еще регистр Z, который можно использовать для реализации чтения таблиц из памяти программ или в качестве индексного регистра общего назначения. В предыдущем примере можно также использовать указатель стека, но в этом случае при обращении к какому-либо параметру, находящемуся в стеке данных, содержимое указателя стека придется сохранять в регистрах X, Y или Z, чтобы найти смещение этого параметра в стеке. Гораздо проще вместо этого непосредственно использовать индексные регистры в операциях «ldd»/«std» с инкрементом.

Прочитав все вышесказанное, вы можете счесть это чем-то довольно интересным для себя (во всяком случае, я на это надеюсь), но не приносящим вам особой пользы, поскольку вы программируете только на ассемблере. Такое детальное обсуждение было приведено здесь, чтобы показать, как локатьные переменные и вычисления сложных выражений, ориентированные на использование стека, могут быть довольно легко реализованы при программировании на языке ассемблера без необходимости прямой реализации очень сложных операций.

Go to Top