Учебники

Встроенные системы — язык ассемблера

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

Различные языки программирования, такие как C, C ++, Java и различные другие языки, называются языками высокого уровня, потому что они не имеют дело с внутренними деталями процессора. Напротив, ассемблер используется для перевода программы на языке ассемблера в машинный код (иногда также называемый объектным кодом или кодом операции ). Аналогично, компилятор переводит язык высокого уровня в машинный код. Например, чтобы написать программу на языке C, необходимо использовать компилятор C для перевода программы на машинный язык.

Структура ассемблера

Программа на языке ассемблера — это серия операторов, которые являются либо инструкциями на языке ассемблера, такими как ADD и MOV, либо операторами, называемыми директивами .

Инструкция говорит процессору, что делать, а директива (также называемая псевдоинструкцией ) дает инструкцию ассемблеру. Например, инструкции ADD и MOV — это команды, которые выполняет ЦП, а ORG и END — это директивы ассемблера. Ассемблер помещает код операции в ячейку памяти 0, когда используется директива ORG, а END указывает на конец исходного кода. Инструкция на языке программирования состоит из следующих четырех полей:

[ label: ]   mnemonics  [ operands ]   [;comment ] 

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

  • Поле метки позволяет программе ссылаться на строку кода по имени. Поля метки не могут превышать определенного количества символов.

  • Поля мнемоники и операндов вместе выполняют реальную работу программы и выполняют задачи. Такие операторы, как ADD A, C & MOV C, # 68, где ADD и MOV — мнемоника, производящая коды операций; «A, C» и «C, # 68» являются операндами. Эти два поля могут содержать директивы. Директивы не генерируют машинный код и используются только ассемблером, тогда как инструкции преобразуются в машинный код для выполнения CPU.

Поле метки позволяет программе ссылаться на строку кода по имени. Поля метки не могут превышать определенного количества символов.

Поля мнемоники и операндов вместе выполняют реальную работу программы и выполняют задачи. Такие операторы, как ADD A, C & MOV C, # 68, где ADD и MOV — мнемоника, производящая коды операций; «A, C» и «C, # 68» являются операндами. Эти два поля могут содержать директивы. Директивы не генерируют машинный код и используются только ассемблером, тогда как инструкции преобразуются в машинный код для выполнения CPU.

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
  • Поле комментария начинается с точки с запятой, которая является индикатором комментария.

  • Обратите внимание на ярлык «ЗДЕСЬ» в программе. Любая метка, которая ссылается на инструкцию, должна сопровождаться двоеточием.

Поле комментария начинается с точки с запятой, которая является индикатором комментария.

Обратите внимание на ярлык «ЗДЕСЬ» в программе. Любая метка, которая ссылается на инструкцию, должна сопровождаться двоеточием.

Сборка и запуск программы 8051

Здесь мы обсудим основную форму языка ассемблера. Шаги по созданию, сборке и запуску программы на языке ассемблера следующие:

  • Во-первых, мы используем редактор для ввода программы, похожей на приведенную выше. Редакторы, такие как MS-DOS EDIT, которая поставляется со всеми операционными системами Microsoft, могут использоваться для создания или редактирования программы. Редактор должен иметь возможность создавать файл ASCII. Расширение «asm» для исходного файла используется ассемблером на следующем шаге.

  • Исходный файл «asm» содержит программный код, созданный на шаге 1. Он подается на ассемблер 8051. Затем ассемблер преобразует инструкции языка ассемблера в инструкции машинного кода и создает файл .obj (объектный файл) и файл .lst (файл списка). Он также называется исходным файлом , поэтому некоторые ассемблеры требуют, чтобы этот файл имел расширения «src». Файл «lst» является необязательным. Это очень полезно для программы, поскольку в ней перечислены все коды операций и адреса, а также ошибки, обнаруженные ассемблерами.

  • Сборщикам требуется третий шаг, называемый связыванием . Ссылочная программа принимает один или несколько объектных файлов и создает абсолютный объектный файл с расширением «abs».

  • Затем файл «abs» подается в программу под названием «OH» (преобразователь объекта в шестнадцатеричный формат), которая создает файл с расширением «hex», который готов записать в ПЗУ.

Во-первых, мы используем редактор для ввода программы, похожей на приведенную выше. Редакторы, такие как MS-DOS EDIT, которая поставляется со всеми операционными системами Microsoft, могут использоваться для создания или редактирования программы. Редактор должен иметь возможность создавать файл ASCII. Расширение «asm» для исходного файла используется ассемблером на следующем шаге.

Исходный файл «asm» содержит программный код, созданный на шаге 1. Он подается на ассемблер 8051. Затем ассемблер преобразует инструкции языка ассемблера в инструкции машинного кода и создает файл .obj (объектный файл) и файл .lst (файл списка). Он также называется исходным файлом , поэтому некоторые ассемблеры требуют, чтобы этот файл имел расширения «src». Файл «lst» является необязательным. Это очень полезно для программы, поскольку в ней перечислены все коды операций и адреса, а также ошибки, обнаруженные ассемблерами.

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

Затем файл «abs» подается в программу под названием «OH» (преобразователь объекта в шестнадцатеричный формат), которая создает файл с расширением «hex», который готов записать в ПЗУ.

Шаги по созданию программы

Тип данных

Микроконтроллер 8051 содержит один тип данных из 8 бит, и каждый регистр также имеет размер 8 бит. Программист должен разбить данные размером более 8 бит (от 00 до FFH или до 255 в десятичном виде), чтобы они могли быть обработаны процессором.

DB (Определить байт)

Директива 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 можно использовать одинарные или двойные кавычки. БД также используется для выделения памяти кусками размером в байты.

Директивы ассемблера

Вот некоторые из директив 8051:

  • ORG (origin) — директива origin используется для указания начала адреса. Он принимает числа в шестнадцатеричном или десятичном формате. Если после числа указано H, число считается шестнадцатеричным, в противном случае — десятичным. Ассемблер преобразует десятичное число в гекса.

  • EQU (equate) — используется для определения константы, не занимая место в памяти. EQU связывает постоянное значение с меткой данных, так что метка появляется в программе, а ее постоянное значение будет заменено меткой. При выполнении инструкции «MOV R3, #COUNT» в регистр R3 будет загружено значение 25 (обратите внимание на знак #). Преимущество использования EQU состоит в том, что программист может изменить его один раз, а ассемблер изменит все его вхождения; программист не должен искать всю программу.

  • Директива END — указывает конец исходного файла (asm). Директива END является последней строкой программы; что-нибудь после директивы END игнорируется ассемблером.

ORG (origin) — директива origin используется для указания начала адреса. Он принимает числа в шестнадцатеричном или десятичном формате. Если после числа указано H, число считается шестнадцатеричным, в противном случае — десятичным. Ассемблер преобразует десятичное число в гекса.

EQU (equate) — используется для определения константы, не занимая место в памяти. EQU связывает постоянное значение с меткой данных, так что метка появляется в программе, а ее постоянное значение будет заменено меткой. При выполнении инструкции «MOV R3, #COUNT» в регистр R3 будет загружено значение 25 (обратите внимание на знак #). Преимущество использования EQU состоит в том, что программист может изменить его один раз, а ассемблер изменит все его вхождения; программист не должен искать всю программу.

Директива END — указывает конец исходного файла (asm). Директива END является последней строкой программы; что-нибудь после директивы END игнорируется ассемблером.

Метки на ассемблере

Все метки на языке ассемблера должны соответствовать приведенным ниже правилам.

Название каждого ярлыка должно быть уникальным. Имена, используемые для меток в программировании на ассемблере, состоят из букв алфавита как в верхнем, так и в нижнем регистре, цифр от 0 до 9, и специальных символов, таких как вопросительный знак (?), Точка (.), Со скоростью @, подчеркивание (_), и доллар ($).

Первый символ должен быть в алфавитном порядке; это не может быть число.

Зарезервированные слова не могут использоваться в качестве метки в программе. Например, слова ADD и MOV являются зарезервированными словами, поскольку они являются мнемоникой инструкций.