Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
1 64 Часть 11. Программирование микроконтроллеров АVR на ассемблере команда логического И с константой andi будет применена для отсчета каждого чет вертого прерывания. Такие подробности в этой главе про каждую команду привести невозможно - они есть только в английском оригинале справочника [8 , 1 2] , и это еще одна причина всегда держать его под рукой . Обзор команд Конечно, мы не сможем и не будем пытаться описать все команды. Это и не очень нужно, во-первых, потому что свыше трети (а может, и поболее) команд - сино нимы, т. е. делают одно и то же и даже имеют одинаковый КОП, и введены только для удобства и лучшей читаемости текста программы. Во-вторых, потому, что все команды никто никогда и не использует - у каждого программиста есть свой лю бимый набор основных команд. А в-третьих, потому, что некоторые команды опи сывать особо и не требуется - их применение понятно из употребления, а если нет - всегда можно обратиться к пособиям, упомянутым ранее . Необходимо отдельно отметить, что все операции с константами ( ldi, cpi, suЬi, andi, ori и т. п.) действуют только в пределах второй половины регистрового фай ла, т. е. для РОН с номерами от rl б до rЗ l . Поэтому во всех ассемблерных про граммах стараются использовать под переменные именно эти регистры. Так как число их ограничено, а регистры, начиная с r2 4 , еще и бывают задействованы в различных шестнадцатиразрядных операциях, то часто бывает необходимо при влечь регистры из первой половины с номерами rO-rlS . При этом нужно либо про следить, что операции с константами с ними не проводились, либо использовать промежуточные операции с передачей значения констант временным регистрам из старших. Так, пара команд: mov rl б , 1 0 ер r5 , r1 6 равносильна недопустимой операции cpi r5 , 1 0 . К оманды п е редачи управления и регистр SREG В языках высокого уровня была всего одна команда перехода на метку (Gото ) , и то Дейкстра на нее набросился . А в ассемблере АVR таких команд - пруд пруди, бо лее 30 ! Зачем? На самом деле без доброй половины из них, если не больше, можно обойтись во всех жизненных случаях, т. к. они в значительной степени взаимозаме няемы, а немалая часть из них просто синонимы. Разнообразие это, если угодно, дань памяти великому программисту Эдсгеру Дейкстре - для повышения читае мости программ . Мы рассмотрим только ключевые команды из этого перечня . С командами безусловного перехода rjmp и jmp, а также вызова подпрограмм rcall и call мы уже достаточно подробно познакомились в предыдущей главе, так что только напомним несколько моментов. Четырехбайтовые команды j mp и call пред назначены для контроллеров с памятью программ более 8 К, и АVR с меньшим объемом памяти их просто не поддерживают. Потому в дальнейшем в этой книге вы встретите только rjmp и rcall . Вызовы подпрограмм rcall и cal l - это те же
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==