Язык программирования asm 51 + видео обзор

Язык программирования ASM-51

Язык программирования АSМ51 поддерживает модульное написание программ. Графическое изображение процесса написания программы на языке программирования ASM-51 приведено на рисунке 1.

Язык программирования asm 51
Рисунок 1. Процесс написания программы на языке программирования ASM-51

Файл, в котором хранится программа, написанная на языке АSМ51 (исходный текст программы), называется исходным модулем. Для исходного текста программы принято использовать расширения файла: asm, a51, srs, s51. Исходный текст программы можно написать, используя любой текстовый редактор.

Получить объектный модуль можно, указав имя исходного модуля программы в качестве параметра программы-транслятора в DOS строке или строке командного файла:

Получить исполняемый модуль программы можно, указав все имена объектных модулей программы в качестве параметров программы редактора связей в DOS строке или строке командного файла:

Имя исполняемого модуля программы по умолчанию совпадает с именем первого объектного файла в списке параметров строки запуска редактора связей. Исполняемый модуль программы записывается в файл без расширения.

Большинство программаторов не может работать с объектным форматом исполняемого модуля программы, поэтому для загрузки машинного кода в процессор необходимо преобразовать объектный формат исполняемого модуля в общепринятый для программаторов гексадецимальный формат. При преобразовании форматов вся отладочная информация теряется. Машинный код процессора в гексадецимальном формате называется загрузочным модулем.

Загрузочный модуль программы можно получить при помощи программы-преобразователя программы oh.exe, передав ей в качестве параметра имя файла исполняемого модуля программы:

Отладка программ

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

Язык программирования asm 51
Рисунок 2. Пример системы отладки программного обеспечения для микроконтроллеров.

Запись исходного текста программы на языке программирования

Исходный текст программы представляет собой последовательность операторов языка, сгруппированных в сегменты и оформленных в виде файла.

Оператор состоит из трех полей:

Любое из полей, в том числе и все поля, могут отсутствовать. Оператор, в котором все поля отсутствуют, называется пустым оператором. Он используется для увеличения наглядности программы.

Пример оператора, записанного на языке программирования ASM-51:

Поле метки используется для записи меток. Метки используются для организации условных и безусловных переходов, а также для объявления переменных и констант. Признаком конца поля метки является символ «двоеточие» (:). Однако язык программирования ASM-51, в виде исключения, допускает использовать символы интервала как признак конца поля метки.

Если в операторе присутствует только метка, то она помечает ближайший следующий оператор, в котором присутствует инструкция процессора или директива ассемблера. Использование оператора, содержащего только метку может быть вызвано либо слишком большой длиной самой метки, либо необходимостью присвоить одному непустому оператору нескольких меток.

Пример использования оператора, содержащего только метку:

Поле операции используется для записи директивы языка или инструкции микроконтроллера, которые состоят из мнемонического обозначения команды микроконтроллера и одного или нескольких операндов. В качестве операндов могут использоваться адреса ячеек памяти, обозначения регистров или метки операторов. Операнды отделяются друг от друга запятыми. Вместе с запятыми для увеличения читаемости программы допускается использование символов интервала.

Поле комментария начинается с символа «точка с запятой» (;). Это поле используется для записи пояснений к программе. Оператор, в котором присутствует только поле комментария, используется для увеличения наглядности программы.

Комментарий начинается с символа (;) и может содержать любые ASCII символы. Примеры комментариев:

Вместе со статьей «Язык программирования ASM-51» читают:

Источник

Глава 8 Язык программирования ASM-51

Язык программирования ASM-51 поддерживает модульное написание программ. Графическое изображение процесса разработки программы на языке программирования ASM-51 приведено на рис. 8.1.

Язык программирования asm 51

Рис. 8.1. Схема процесса написания программы на языке программирования ASM-51

Файл, в котором хранится программа, написанная на языке ASM-51 (исходный текст программы), называется исходным модулем. Его можно создать, используя любой текстовый редактор. Для файла исходного текста программы принято использовать следующие расширения: asm, а51, srs, s51.

Получить объектный модуль можно, указав имя исходного модуля программы в качестве параметра вызова программы-транслятора в DOS-строке или строке командного файла: asm51.exe modul.asm

Получить исполняемый модуль программы можно, указав все имена объектных модулей программы в качестве параметров вызова программы-редактора связей в DOS-строке или строке командного файла: bl51.exe main.obj, modull.obj, modul2.obj

Имя исполняемого модуля программы по умолчанию совпадает с именем первого объектного файла в списке параметров командной строки, используемой для запуска редактора связей. Исполняемый модуль программы записывается в файл с именем, но без расширения.

Большинство программаторов не может работать с объектным форматом исполняемого модуля программы, поэтому для загрузки машинного кода в микроконтроллер необходимо преобразовать объектный формат исполняемого модуля в общепринятый для программаторов НЕХ-формат. При таком преобразовании вся отладочная информация, содержащаяся в исполняемом модуле, теряется. Машинный код процессора, записанный в НЕХ-формате, называется загрузочным модулем.

Загрузочный модуль программы можно получить при помощи программы-преобразователя oh.exe, передав ей при вызове в качестве параметра имя файла исполняемого модуля, например: oh.exe main

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

Необходимое для отладки программ оборудование показано на рис. 8.2.

Язык программирования asm 51

Рис. 8.2. Пример системы отладки программного обеспечения для микроконтроллеров

Отдельные участки программы могут быть отлажены и при помощи специальных программ-отладчиков (симуляторов).

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

Исходный текст программы на языке программирования ASM-51

Исходный текст программы представляет собой последовательность операторов языка программирования ASM-51, сгруппированных в сегменты и оформленных в виде файла.

Оператор — это базовая конструкция языка программирования, определяющая действия в программе. В языке программирования ASM-51 в одной строке может быть записан только один оператор! Максимальный допустимый размер строки — 255 символов. Признаком конца оператора является символ «возврат каретки», который вводится в текст про- программы при нажатии на клавишу в конце строки.

Оператор языка программирования ASM-51 состоит из трех полей:

Любое из полей, в том числе и все поля, могут отсутствовать. Оператор, в котором все поля отсутствуют, называется пустым оператором. Он используется для увеличения наглядности программы. Пример оператора, записанного на языке программирования ASM-51, приведен на рис. 8.3.

Поле метки используется для записи меток. Метка представляет собой определяемое программистом имя, заканчивающееся двоеточием, и используется для организации условных и безусловных переходов, а также для объявления переменных и констант.

Если в операторе присутствует только метка, то она помечает ближайший следующий оператор, в котором присутствует инструкция процессора или директива ассемблера. Использование оператора, содержащего только метку, может быть вызвано либо слишком большой длиной самой метки, либо необходимостью присвоить одному непустому оператору нескольких меток. Наиболее яркий пример использования нескольких меток — это когда одна метка используется в качестве имени подпрограммы, а другая обозначает начало цикла. Пример использования оператора, содержащего только метку, приведен в листинге 8.1.

Язык программирования asm 51

Поле операции используется для записи директивы языка или команды микроконтроллера. В последнем случае оно состоит из мнемонического обозначения команды и одного или нескольких операндов. При этом первый операнд всегда является приемником результата операции. Второй операнд всегда является источником данных для выполняемой операции. Если в команде для выполнения операции требуется два источника данных (например, операция суммирования), то первый операнд используется и в качестве источника и в качестве приемника данных.

В качестве операндов могут использоваться адреса ячеек памяти, обозначения регистров или метки операторов. Операнды отделяются друг от друга запятыми. Вместе с запятыми для увеличения читаемости программы допускается использование символов интервала (пробел или табуляция). Поле операции подробно показано на рис. 8.3.

Язык программирования asm 51

Рис. 8.3. Пример оператора, записанного на языке программирования ASM-51

Поле комментария начинается с символа «точка с запятой» (;) и может содержать любые ASCII- или ANSI-символы. Это поле используется для записи пояснений к программе. Оператор, в котором присутствует только поле комментария, используется для увеличения наглядности программы. Примеры записи комментариев на языке программирования ASM-51 приведены в листинге. 8.2.

Язык программирования asm 51

Символы исходной программы представляют собой подмножество таблиц символов ASCII для DOS и ANSI для Windows. В исходном тексте программы, написанном на языке программирования ASM-51, могут быть использованы следующие символы:

Символы интервала определяют один или несколько пробелов в предложении исходного модуля. К этим символам относятся «пробел» и «табуляция».

В качестве букв воспринимаются латинские буквы верхнего и нижнего регистра:

А, В, С, D, E, F, G, H, I, J, К, L, М, N, О, Р, Q, R, S, T, U, V, W, X, Y, Z, а, Ь, с, d, e, f, g, h, i, j, k, 1, m, n, o, p, q, r, s, t, u, v, w, x, y, z.

Кроме того, в качестве букв могут быть использованы символы вопросительного знака (?) и подчеркивания (_).

Ниже приведен перечень цифр:

0, 1, 2, 3, 4, 5, б, 7, 8, 9.

Для записи шестнадцатеричных цифр дополнительно могут быть использованы следующие символы:

а, Ь, с, d, е, f, А, В, С, D, E, F.

Наименования знаков и их обозначения приведены в табл. 8.1.

Язык программирования asm 51

Знаки, комбинации знаков (<>, >=,

Источник

Директивы языка программирования ASM-51

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

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

Директива equ позволяет назначать имена переменных и констант. Теперь можно назначить переменной адрес в одном месте и пользоваться идентификатором переменной во всей программе. Правда за использование идентификатора именно в качестве переменной отвечает программист, тем не менее, если в процессе написания программы потребуется изменить адрес переменной, это можно сделать в одном месте программы, а не просматривать всю программу, разбираясь является ли в данной конкретной команде число 10 константой, адресом ячейки ли количеством повторов в цикле. Все необходимые изменения сделает сам транслятор. Пример назначения переменных приведён на примере, показанном в листинге 1.

Язык программирования asm 51
Листинг 1. Назначение переменных при помощи директивы equ

Как видно на приведённом примере, использование идентификаторов значительно повышает понятность программы, так как в названии переменной отображается функция, за которую отвечает данная переменная.

При помощи директивы equ можно назначать не только переменные, но и константы. Как уже говорилось ранее, будет ли использован идентификатор как переменная или как константа зависит от команд и видов адресации, которые использует программист.

Один раз назначенный идентификатор уже не может быть изменён в дальнейшем и при повторной попытке назначения точно такого же имени идентификатора будет выдано сообщение об ошибке.

Директива set. Если требуется в различных местах программы назначать одному и тому же идентификатору различные числа, то нужно пользоваться директивой set. Использование этой директивы полностью идентично использованию директивы equ, поэтому иллюстрироваться примером не будет.

Константы, назначаемые директивой equ, могут быть использованы только в одной команде. Достаточно часто требуется работа с таблицей констант, такой как таблица перекодировки, таблицы элементарных функций или синдромы помехоустойчивых кодов. Такие константы используются не на этапе трансляции, а хранятся в памяти программ микроконтроллера. Для занесения констант в память программ микроконтроллера используются директивы db и dw.

Директива db используется для занесения в память программ однобайтных констант. Пример использования директивы db приведён в листинге 2.

Язык программирования asm 51
Листинг 2. Назначение констант при помощи директивы db

В этом примере использована подпрограмма-функция, перекодирующая двоично-десятичное число в семисегментный код. В эту функцию двоично-десятичный код передаётся через аккумулятор и через этот же регистр возвращается семисегментный код в вызывающую программу.

В директиве db можно задавать сразу несколько констант, разделённых запятыми. Можно одновременно использовать все системы счисления, но обычно имеет смысл снабдить каждую константу комментарием, как это сделано в предыдущем примере. Так программа становится более понятной и легче искать допущенную ошибку.

Эта же директива позволяет легко записывать надписи, которые в дальнейшем потребуется высвечивать на встроенном дисплее или экране дисплея универсального компьютера, подключённого к разрабатываемому устройству через какой либо интерфейс. Пример использования директивы db для занесения надписей в память программ микроконтроллера приведён на рисунке 3.

Язык программирования asm 51

Рисунок 3. Применение директивы db для занесения надписей в память программ микроконтроллера.

Директива dw позволяет заносить в память программ двухбайтные числа. В этой директиве, как и в директиве db числа можно заносить через запятую. Пример листинга фрагмента программы приведён на рисунке 4.

Язык программирования asm 51

Рисунок 4. Применение директивы dw.

На рисунке 4 приведён фрагмент листинга программы для того, чтобы можно было проследить какие байты заносятся в память программ микроконтроллера. В самой правой колонке листинга приведены адреса в которые будут занесены числа, являющиеся операндами директивы dw. В следующей колонке приведены двухбайтовые числа, которые будут заноситься в память программ микроконтроллера. Обратите внимание, что несмотря на то, что первые два операнда состоят только из одной цифры, в память микроконтроллера заносятся четыре шестнадцатеричных цифры (двухбайтовое число).

При трансляции исходного текста программ предполагается, что первая команда расположена по нулевому адресу. Адрес последующих команд зависит от длины и количества предыдущих команд. Пример листинга начального участка программы приведён на рисунке 5.

Язык программирования asm 51

Рисунок 5. Пример листинга программы.

Иногда требуется расположить команду по определённому адресу. Наиболее часто это требуется при использовании прерываний, когда первая команда программы-обработчика прерываний должна быть расположена точно на векторе прерывания. Это можно сделать используя команду nop для заполнения промежутков между векторами прерывания, но лучше воспользоваться директивой ORG.

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

Язык программирования asm 51

Рисунок 6. Пример использования директивы ORG.

Необходимо отметить, что при использовании этой директивы возможна ситуация, когда программист приказывает транслятору разместить новый код программы по уже написанному месту, поэтому использование этой директивы допустимо только в крайних случаях. Обычно это использование векторов прерываний.

Директива using При использовании прерываний критичным является время, занимаемое программой, обработчиком прерываний. Это время можно значительно сократить, выделив для обработки прерываний отдельный банк регистров. Выделить отдельный банк регистров можно при помощи директивы USING. Номер банка используемых регистров указывается в директиве в качестве операнда. Пример использования директивы USING для подпрограммы обслуживания прерываний от таймера 0 приведён на рисунке 7.

Язык программирования asm 51

Рисунок 7. Пример использования директивы USING.

Директива CALL. В системе команд микроконтроллера MCS-51 используется три команды безусловного перехода. Выбор конкретной команды зависит от расположения ее в памяти программ, однако программист обычно этого не знает. В результате во избежание ошибок приходится использовать самую длинную команду LJMP. Это приводит к более длинным программам и к дополнительной нагрузке на редактор связей. Транслятор сам может подобрать наилучший вариант команды безусловного перехода. Для этого вместо команды микроконтроллера следует использовать директиву call.

Остальные директивы предназначены для управления сегментами, и поэтому будут рассмотрены позднее при обсуждении работы с многомодульными программами.

Вместе со статьей «Директивы языка программирования ASM-51» читают:

Источник

V.1 Язык программирования asm-51

Язык программирования АSМ51 поддерживает модульное написание программ. Графическое изображение процесса написания программы на языке программирования ASM-51 приведено на рисунке 1.

Язык программирования asm 51

Рисунок V.1.1. Процесс написания программы на языке программирования ASM-51.

Файл, в котором хранится программа, написанная на языке АSМ51 (исходный текст программы), называется исходным модулем. Для исходного текста программы принято использовать расширения файла: asm, a51, srs, s51. Исходный текст программы можно написать, используя любой текстовый редактор.

Получить объектный модуль можно, указав имя исходного модуля программы в качестве параметра программы-транслятора в DOS строке или строке командного файла:

Получить исполняемый модуль программы можно, указав все имена объектных модулей программы в качестве параметров программы редактора связей в DOS строке или строке командного файла:

rl51.exe main.obj, modul1.obj, modul2.obj

Имя исполняемого модуля программы по умолчанию совпадает с именем первого объектного файла в списке параметров строки запуска редактора связей. Исполняемый модуль программы записывается в файл без расширения.

Большинство программаторов не может работать с объектным форматом исполняемого модуля программы, поэтому для загрузки машинного кода в процессор необходимо преобразовать объектный формат исполняемого модуля в общепринятый для программаторов гексадецимальный формат. При преобразовании форматов вся отладочная информация теряется. Машинный код процессора в гексадецимальном формате называется загрузочным модулем.

Загрузочный модуль программы можно получить при помощи программы-преобразователя программы oh.exe, передав ей в качестве параметра имя файла исполняемого модуля программы:

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

Запись исходного текста программы на языке программирования ASM-51

Исходный текст программы представляет собой последовательность операторов языка, сгруппированных в сегменты и оформленных в виде файла.

Оператор состоит из трех полей:

Любое из полей, в том числе и все поля, могут отсутствовать. Оператор, в котором все поля отсутствуют, называется пустым оператором. Он используется для увеличения наглядности программы.

Пример оператора, записанного на языке программирования ASM-51:

Язык программирования asm 51

Поле метки используется для записи меток. Метки используются для организации условных и безусловных переходов, а также для объявления переменных и констант. Признаком конца поля метки является символ «двоеточие» (:). Однако язык программирования ASM-51, в виде исключения, допускает использовать символы интервала как признак конца поля метки.

Если в операторе присутствует только метка, то она помечает ближайший следующий оператор, в котором присутствует инструкция процессора или директива ассемблера. Использование оператора, содержащего только метку может быть вызвано либо слишком большой длиной самой метки, либо необходимостью присвоить одному непустому оператору нескольких меток.

Пример использования оператора, содержащего только метку:

Язык программирования asm 51

Поле операции используется для записи директивы языка или инструкции микроконтроллера, которые состоят из мнемонического обозначения команды микроконтроллера и одного или нескольких операндов. В качестве операндов могут использоваться адреса ячеек памяти, обозначения регистров или метки операторов. Операнды отделяются друг от друга запятыми. Вместе с запятыми для увеличения читаемости программы допускается использование символов интервала.

Поле комментария начинается с символа «точка с запятой» (;). Это поле используется для записи пояснений к программе. Оператор, в котором присутствует только поле комментария, используется для увеличения наглядности программы.

Комментарий начинается с символа (;) и может содержать любые ASCII символы. Примеры комментариев:

; ПОДПРОГРАММА ВЫЧИСЛЕНИЯ ФУНКЦИИ

Директивы языка программирования ASM-51

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

Директива equ позволяет назначать имена переменных и констант. Теперь можно назначить переменной адрес в одном месте и пользоваться идентификатором переменной во всей программе. Правда за использование идентификатора именно в качестве переменной отвечает программист, тем не менее, если в процессе написания программы потребуется изменить адрес переменной, это можно сделать в одном месте программы, а не просматривать всю программу, разбираясь является ли в данной конкретной команде число 10 константой, адресом ячейки ли количеством повторов в цикле. Все необходимые изменения сделает сам транслятор. Пример назначения переменных приведён на примере, показанном на рисунке V.1.2.

Язык программирования asm 51

Рисунок V.1.2. Назначение переменных при помощи директивы equ.

Как видно на приведённом примере, использование идентификаторов значительно повышает понятность программы, так как в названии переменной отображается функция, за которую отвечает данная переменная.

При помощи директивы equ можно назначать не только переменные, но и константы. Как уже говорилось ранее, будет ли использован идентификатор как переменная или как константа зависит от команд и видов адресации, которые использует программист. Один раз назначенный идентификатор уже не может быть изменён и при повторной попытке назначения точно такого же имени идентификатора будет выдано сообщение об ошибке.

Если требуется в различных местах программы назначать одному и тому же идентификатору различные числа, то нужно пользоваться директивой set. Использование этой директивы полностью идентично использованию директивы equ, поэтому иллюстрироваться примером не будет.

Константы, назначаемые директивой equ, могут быть использованы только в одной команде. Достаточно часто требуется работа с таблицей констант, такой как таблица перекодировки, таблицы элементарных функций или синдромы помехоустойчивых кодов. Такие константы используются не на этапе трансляции, а хранятся в памяти программ микроконтроллера. Для занесения констант в память программ микроконтроллера используются директивы db и dw.

Директива db используется для занесения в память программ однобайтных констант. Пример использования директивы db приведён на рисунке V.1.3.

Язык программирования asm 51

Рисунок V.1.3. Назначение констант при помощи директивы db.

В этом примере использована подпрограмма-функция, перекодирующая двоично-десятичное число в семисегментный код. В эту функцию двоично-десятичный код передаётся через аккумулятор и через этот же регистр возвращается семисегментный код в вызывающую программу.

В директиве db можно задавать сразу несколько констант, разделённых запятыми. Можно одновременно использовать все системы счисления, но обычно имеет смысл снабдить каждую константу комментарием, как это сделано в предыдущем примере. Так программа становится более понятной и легче искать допущенную ошибку. Эта же директива позволяет легко записывать надписи, которые в дальнейшем потребуется высвечивать на встроенном дисплее или экране дисплея универсального компьютера, подключённого к разрабатываемому устройству через какой либо интерфейс. Пример использования директивы db для занесения надписей в память программ микроконтроллера дан на рисунке V.1.4.

Язык программирования asm 51

Рисунок V.1.4. Применение директивы db для занесения надписей в память программ микроконтроллера.

Директива dw позволяет заносить в память программ двухбайтные числа. В этой директиве, как и в директиве db числа можно заносить через запятую. Пример листинга фрагмента программы приведён на рисунке V.1.5.

Язык программирования asm 51

Рисунок V.1.5. Применение директивы dw.

На рисунке V.1.5 приведён фрагмент листинга программы для того, чтобы можно было проследить какие байты заносятся в память программ микроконтроллера. В самой правой колонке листинга приведены адреса в которые будут занесены числа, являющиеся операндами директивы dw. В следующей колонке приведены двухбайтовые числа, которые будут заноситься в память программ микроконтроллера. Обратите внимание, что несмотря на то, что первые два операнда состоят только из одной цифры, в память микроконтроллера заносятся четыре шестнадцатеричных цифры (двухбайтовое число).

При трансляции исходного текста программ предполагается, что первая команда расположена по нулевому адресу. Адрес последующих команд зависит от длины и количества предыдущих команд. Пример листинга начального участка программы приведён на рисунке V.1.6.

Язык программирования asm 51

Рисунок V.1.6. Пример листинга программы.

Иногда требуется расположить команду по определённому адресу. Наиболее часто это требуется при использовании прерываний, когда первая команда программы-обработчика прерываний должна быть расположена точно на векторе прерывания. Это можно сделать используя команду nop для заполнения промежутков между векторами прерывания, но лучше воспользоваться директивой ORG.

Директива org предназначена для записи в счетчик адреса сегмента значения своего операнда. То есть при помощи этой директивы можно разместить команду (или данные) в памяти микроконтроллера по любому адресу. Пример использования директивы ORG для размещения подпрограмм обработки прерываний на векторах прерываний показан на рисунке V.1.8.

Язык программирования asm 51

Рисунок V.1.8. Пример использования директивы ORG.

Необходимо отметить, что при использовании этой директивы возможна ситуация, когда программист приказывает транслятору разместить новый код программы по уже написанному месту, поэтому использование этой директивы допустимо только в крайних случаях. Обычно это использование векторов прерываний.

Директива using При использовании прерываний критичным является время, занимаемое программой, обработчиком прерываний. Это время можно значительно сократить, выделив для обработки прерываний отдельный банк регистров. Выделить отдельный банк регистров можно при помощи директивы USING. Номер банка используемых регистров указывается в директиве в качестве операнда. Пример использования директивы USING для подпрограммы обслуживания прерываний от таймера 0 приведён на рисунке V.1.9.

Язык программирования asm 51

Рисунок V.1.9. Пример использования директивы USING.

Остальные директивы предназначены для управления сегментами, и поэтому будут рассмотрены позднее.

Источник

Видео

ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #1 НАЧАЛО

ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #1 НАЧАЛО

Устройства интерфейса микроконтроллеров семейства MCS-51

Устройства интерфейса микроконтроллеров семейства MCS-51

Программа на С с линковкой функций на ASM

Программа на С с линковкой функций на ASM

06. Низкоуровневое программирование. Ассемблер. Пример программы. [Универсальный программист]

06. Низкоуровневое программирование. Ассемблер. Пример программы. [Универсальный программист]

Hello World на Ассемблере (x86)

Hello World на Ассемблере (x86)

Как программировать на Ассемблере в 2021 году

Как программировать на Ассемблере в 2021 году

Ассемблер и Си для начинающих. Урок 024. 5 задач на СИ и masm64.

Ассемблер и Си для начинающих. Урок 024. 5 задач на СИ и masm64.

Как вставить ASM в Си (inline asm)

Как вставить ASM в Си (inline asm)

Ассемблер и Си для начинающих. Урок 020. Собственная calloc и Сортировка вставками на masm64.

Ассемблер и Си для начинающих. Урок 020. Собственная calloc и  Сортировка вставками на masm64.

5 ХУДШИХ языков программирования, которые не стоит учить!

5 ХУДШИХ языков программирования, которые не стоит учить!
Поделиться или сохранить к себе:
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных, принимаю Политику конфиденциальности и условия Пользовательского соглашения.