Встроенные системы - язык Assembly

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

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

Структура Assembly

Программа на языке ассемблера - это серия операторов, которые являются либо инструкциями на языке ассемблера, такими как 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.

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», который готов записать в ПЗУ.

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

Тип данных

Микроконтроллер 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 игнорируется ассемблером.

Метки на Assembly

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

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

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

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