Встроенные системы - язык ассемблера
Языки ассемблера были разработаны для обеспечения mnemonicsили символы для команд машинного кода. Программы на ассемблере состоят из мнемоники, поэтому их следует переводить в машинный код. Программа, отвечающая за это преобразование, известна какassembler. Язык ассемблера часто называют языком низкого уровня, потому что он напрямую работает с внутренней структурой ЦП. Чтобы программировать на языке ассемблера, программист должен знать все регистры процессора.
Различные языки программирования, такие как C, C ++, Java и другие языки, называются языками высокого уровня, потому что они не имеют отношения к внутренним деталям процессора. Напротив, ассемблер используется для перевода программы на языке ассемблера в машинный код (иногда также называемыйobject code или же opcode). Точно так же компилятор переводит язык высокого уровня в машинный код. Например, чтобы написать программу на языке C, необходимо использовать компилятор C для перевода программы на машинный язык.
Структура языка ассемблера
Программа на языке ассемблера - это серия операторов, которые являются либо инструкциями на языке ассемблера, такими как ADD и MOV, либо операторами, называемыми directives.
An instruction сообщает процессору, что делать, а directive (также называется pseudo-instructions) дает инструкцию ассемблеру. Например, инструкции ADD и MOV - это команды, которые выполняет ЦП, а ORG и END - это директивы ассемблера. Ассемблер помещает код операции в ячейку памяти 0, когда используется директива ORG, а END указывает на конец исходного кода. Инструкция по языку программы состоит из следующих четырех полей:
[ label: ] mnemonics [ operands ] [;comment ]
Квадратная скобка ([]) означает, что поле является необязательным.
В label fieldпозволяет программе ссылаться на строку кода по имени. Поля меток не могут превышать определенное количество символов.
В mnemonics и operands fieldsвместе выполнять реальную работу программы и выполнять поставленные задачи. Такие операторы, как ADD A, C и MOV C, # 68, где ADD и MOV - мнемоники, которые производят коды операций; «A, C» и «C, # 68» являются операндами. Эти два поля могут содержать директивы. Директивы не генерируют машинный код и используются только ассемблером, тогда как инструкции переводятся в машинный код для выполнения ЦП.
1.0000 ORG 0H ;start (origin) at location 0
2 0000 7D25 MOV R5,#25H ;load 25H into R5
3.0002 7F34 MOV R7,#34H ;load 34H into R7
4.0004 7400 MOV A,#0 ;load 0 into A
5.0006 2D ADD A,R5 ;add contents of R5 to A
6.0007 2F ADD A,R7 ;add contents of R7 to A
7.0008 2412 ADD A,#12H ;add to A value 12 H
8.000A 80FE HERE: SJMP HERE ;stay in this loop
9.000C END ;end of asm source file
В comment field начинается с точки с запятой, которая является индикатором комментария.
Обратите внимание на метку «ЗДЕСЬ» в программе. Любая метка, которая относится к инструкции, должна сопровождаться двоеточием.
Сборка и запуск программы 8051
Здесь мы обсудим базовую форму языка ассемблера. Шаги по созданию, сборке и запуску программы на ассемблере следующие:
Во-первых, мы используем редактор, чтобы ввести программу, аналогичную указанной выше. Редакторы, такие как программа MS-DOS EDIT, которая поставляется со всеми операционными системами Microsoft, могут использоваться для создания или редактирования программы. Редактор должен иметь возможность создавать файл ASCII. На следующем этапе ассемблер использует расширение «asm» для исходного файла.
Исходный файл "asm" содержит программный код, созданный на шаге 1. Он загружается на ассемблер 8051. Затем ассемблер преобразует инструкции языка ассемблера в инструкции машинного кода и создает.obj file (объектный файл) и .lst file(файл списка). Его также называютsource file, поэтому некоторые ассемблеры требуют, чтобы этот файл имел расширения src. Файл "lst" необязательный. Это очень полезно для программы, потому что в нем перечислены все коды операций и адреса, а также ошибки, обнаруженные ассемблерами.
Ассемблерам требуется третий шаг, называемый linking. Программа связывания берет один или несколько объектных файлов и создает абсолютный объектный файл с расширением «abs».
Затем файл «abs» подается в программу под названием «OH» (преобразователь объекта в шестнадцатеричный), которая создает файл с расширением «шестнадцатеричный», готовый для записи в ПЗУ.
Тип данных
Микроконтроллер 8051 содержит один тип данных из 8 бит, и каждый регистр также имеет размер 8 бит. Программист должен разбить данные размером более 8 бит (от 00 до FFH или до 255 в десятичном виде), чтобы их мог обработать ЦП.
БД (определить байт)
Директива DB - это наиболее широко используемая директива данных в ассемблере. Он используется для определения 8-битных данных. Его также можно использовать для определения данных в десятичном, двоичном, шестнадцатеричном формате или формате ASCII. Для десятичных чисел буква «D» после десятичного числа не обязательна, но обязательна для «B» (двоичная) и «Hl» (шестнадцатеричная).
Чтобы указать ASCII, просто поместите символы в кавычки («как это»). Ассемблер автоматически генерирует код ASCII для чисел / символов. Директива DB - единственная директива, которая может использоваться для определения строк ASCII, длина которых превышает два символа; поэтому его следует использовать для всех определений данных ASCII. Некоторые примеры БД приведены ниже -
ORG 500H
DATA1: DB 28 ;DECIMAL (1C in hex)
DATA2: DB 00110101B ;BINARY (35 in hex)
DATA3: DB 39H ;HEX
ORG 510H
DATA4: DB "2591" ;ASCII NUMBERS
ORG 520H
DATA6: DA "MY NAME IS Michael" ;ASCII CHARACTERS
Строки ASCII могут заключаться в одинарные или двойные кавычки. DB также используется для выделения памяти в виде блоков размером в байты.
Директивы ассемблера
Некоторые из директив 8051 следующие:
ORG (origin)- Директива origin используется для указания начала адреса. Принимает числа в шестнадцатеричном или десятичном формате. Если после числа указано H, число рассматривается как шестнадцатеричное, в противном случае - десятичное. Ассемблер преобразует десятичное число в шестнадцатеричное.
EQU (equate)- Он используется для определения константы, не занимая места в памяти. EQU связывает постоянное значение с меткой данных, так что метка появляется в программе, ее постоянное значение будет заменено меткой. При выполнении инструкции «MOV R3, #COUNT» в регистр R3 будет загружено значение 25 (обратите внимание на знак #). Преимущество использования EQU состоит в том, что программист может изменить его один раз, а ассемблер изменит все его вхождения; программисту не нужно искать всю программу.
END directive- Указывает конец исходного (asm) файла. Директива END - это последняя строка программы; все, что находится после директивы END, ассемблер игнорирует.
Ярлыки на языке ассемблера
Все метки на языке ассемблера должны соответствовать правилам, приведенным ниже -
Имя каждого ярлыка должно быть уникальным. Имена, используемые для меток в программировании на языке ассемблера, состоят из букв в верхнем и нижнем регистре, цифр от 0 до 9 и специальных символов, таких как вопросительный знак (?), Точка (.), Со скоростью @, подчеркивание (_), и доллар ($).
Первый символ должен быть алфавитным; это не может быть число.
Зарезервированные слова не могут использоваться в качестве метки в программе. Например, слова ADD и MOV являются зарезервированными словами, поскольку они являются мнемоникой команд.