Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
1 94 Часть //. Программирование микроконтроллеров АVR на ассемблере стров обычно хватает на все про все, и деления на локальные/глобальные перемен ные в массовом порядке можно избежать. Аналогичным образом можно было бы организовать функцию в строгом смысле этого слова - как подпрограмму, возвращающую некое значение (а не как в язы ке С, где функциями называют все подряд). Но самом деле такой формат с исполь зованием стека в ассемблере практически не используется - можно даже сказать так, что если в С одни функции, то в ассемблере одни процедуры. Это, конечно, чисто терминологический вопрос, потому что вы и ранее встречали и еще встретите (особенно в следующей главе) множество подпрограмм или макросов, которые фактически делают именно то, что положено делать функциям : т. е. в ответ на входные величины выдают результат некоей операции над этими величинами. Они передают величины напрямую через регистры или иногда через память. Можете самостоятельно поразмыслить, как то же самое можно сделать с помощью стека, и стоит ли этим заниматься. Ассемблерное представление символов и строк Из-за наличия поистине сумасшедщего количества национальных кодировок пута ница в этом вопросе во всех языках программирования изрядная . Сразу скажем, что она не касается английского алфавита и базовых спецсимволов (в основном тех, что размещены на компьютерной клавиатуре, плюс еще некоторых служебных) . За ис ключением канонического двухбайтового Unicode (который в чистом виде практи чески не употребляется) во всех кодировках эти символы представлены одинаково и имеют размер в один байт (т. н. АSСП-кодировка) . Именно поэтому в синтаксисе ассемблера используются только указанные символы - это позволяет создавать тексты программ в любом редакторе с любой кодировкой, и максимум неудобства, когда кто-то другой не сможет прочесть комментарии, если они представлены на национальном языке. Давайте сначала разберемся с этой бесспорной частью проблемы. Представление англоязычных символов и строк здесь абсолютно аналогично принятому в язы ке С - так что можете спокойно справляться с руководством по Arduino. Напри мер, разместив во флеш-памяти программ с помощью директивы . dЬ строку: . dЬ "This is а long string" , ' \n ' вы можете ее посылать через последовательный порт или выводить на дисплей, из влекая символы побайтно с помощью команды lpm, как описано в этой главе ранее. Разумеется, подсчет знаков в строке, включая перевод строки в конце, здесь пол ностью лежит на плечах программиста (в чем, впрочем, язык С не очень далеко ушел от ассемблера). Пример вывода подобной строки через UART вы можете най ти в программе установки часов, приведенной в главе 15 . Заодно сможете оценить удобство нуль-терминированных (т. е. заканчивающихся нулем) строк, принятых в том числе и в языке С .
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==