Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 7. Система команд АVR 189 В последних двух процедурах листинга 7 . 1 2 (по равенству 1 или о) соответствие ассемблера языкам высокого уровня, коне Ч: но, условное - в ЯВУ, как правило (за исключением специально адаптированных версий), отсутствуют средства для непо средственной работы с битами . Разумеется, в Pascal или С можно выделить путем побитовых операций отдельный бит в байте и сравнивать потом этот байт с нулем или тем значением, которое получается, если бит на нужном месте равен единице (или вообще применить inl ine-acceмблep) . Но здесь мы не стали загромождать таб лицу-листинг - в приведенных примерах служебное слово else показано в скобках для наглядности, на самом деле оно здесь лишнее. cpi temp , Const_ l breq cont 1 cpi temp , Const_2 breq cont_2 cpi temp , Const_З breq cont_З cpi temp , Const_4 breq cont_4 cont 1 : rcall proc 1 - cont 2 : rcall proc_2 cont 3 : rcal l рrос_З cont 4 : rcall proc_4 ; если temp Const 1 ; если temp Const 2 - ; если temp Const 3 ; если temp Const 4 В листинге 7 . 1 3 учитывается ограниченность действия команд ьrхх в пределах 64-х команд: если процедуры proc_х, помеченные метками cont_х, занимают много места, то их выделяют в отдельные процедуры, а после меток ставят только их вызовы командой rcall . Если же процедура занимает всего пару команд, то без дополнительного структурирования можно, конечно, обойтись. count := О ; while count<>Const 1 do Ьegin inc ( count } ; { что-то делаем} end; clr count while__proc : inc count Вариант 1 count = О ; while ( count ! = Const_l ) count++; { что-то делаем} Вариант 2 ldi count , Const_l while__proc : dec count
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==