Правила оформления программ на языке ассемблера

В этой главе описываются основные лексические элементы программирования ассемблера и объясняет, как те элементы объединяются для формирования полных выражений ассемблера.

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

Элементы ассемблера

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

Символы

Следующие символы используются в программах на языке ассемблера:

  • Алфавитно-цифровые символы — через Z, через z, и 0 до 9
  • Другие печатаемые символы ASCII (такой как # , $. +, — *,/!, и |)
  • Непечатаемые символы ASCII (такие как пространство, вкладка, возврат и новая строка)

Некоторые из этих символов имеют особые значения, описанные в Синтаксисе выражения и в Операторах Ассемблера .

Идентификаторы

Идентификатор (также известный как символ) может использоваться в нескольких целях:

ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #2 DOS

  • Как метка для ассемблерного оператора (см. Метки ),
  • Как тег расположения для данных
  • Как символьное имя константы

Каждый идентификатор состоит из последовательности алфавитно-цифровых символов (который может включать другие печатаемые символы ASCII такой как . , _ , и $ ). Первый символ не должен быть числовым. Идентификаторы могут иметь любую длину, и все символы являются значительными. Регистр букв является значительным — например, идентификатор var отличается от идентификатора Var .

Также возможно определить идентификатор путем включения многократных идентификаторов в паре двойных кавычек. Например:

«Object +new:»:
.long «Object +new:»

Метки

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

Примечание: Вы не можете использовать единственный идентификатор для представления двух различных расположений.

Числовые метки

Локальные числовые метки позволяют компиляторам и программистам использовать имена временно. Числовая метка состоит из цифры (между 0 и 9) сопровождаемый двоеточием. Эти 10 локальных имен символа могут быть снова использованы любое число раз всюду по программе. Как с алфавитно-цифровыми метками, числовая метка присваивает текущую стоимость счетчика адреса к символу.

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

  • Для обращения к новому предыдущему определению локальной числовой метки запишите цифру b , (использование той же цифры как тогда, когда Вы определили метку).
  • Для обращения к следующему определению числовой метки запишите цифру f .

Объем метки

Объем метки является расстоянием, по которому это видимо к (и referenceable), другие части программы. Обычно, метка, тегирующая расположение или данные, видима только в текущем компоновочном блоке.

Урок №0. Почему важно уметь программировать на языке Assembler.

.globl директива (описанный в .globl ) может использоваться для создания метки внешней. В этом случае символ видим к другим компоновочным блокам во время ссылки.

Константы

Четыре типа констант доступны: Числовой, символ, строка и плавающая точка. Все константы интерпретируются как абсолютные количества, когда они появляются в выражении.

Числовые константы

Числовая константа является маркером, запускающимся с цифры. Числовые константы могут быть десятичными, шестнадцатеричными, или восьмеричными. Следующие ограничения применяются:

  • Десятичные константы содержат только цифры между 0 и 9, и обычно не более длинны, чем 32 бита — наличие значения между -2,147,483,648 и 2,147,483,647 (значения, не помещающиеся в 32 бита, являются сверхбольшими числами, которые законны, но которые должны соответствовать в заданном формате). Десятичные константы не могут содержать начальные нули или запятые.
  • Шестнадцатеричные константы запускаются с 0x (или 0X ), сопровождаемый между одной и восемью десятичными или шестнадцатеричными цифрами ( 0 через 9 , a через f , и A через F ). Значения, не помещающиеся в 32 бита, являются сверхбольшими числами.
  • Восьмеричные константы запускаются с 0 , сопровождаемый от одной до одиннадцати восьмеричных цифр (0 до 7). Значения, не помещающиеся в 32 бита, являются сверхбольшими числами.
Читайте также:
Написать программу которая по номеру месяца выдает название следующего

Символьные константы

Постоянный отдельный символ состоит из единственной кавычки ( ‘ ) сопровождаемый любым символом ASCII. Значение константы является кодом для данного символа.

Строковые константы

Строковая константа является последовательностью нуля или большего количества символов ASCII, окруженных кавычками (например, «a string» ).

Константы с плавающей точкой

Общая лексическая форма числа с плавающей точкой:

0flt_char[]dec. [.][dec. ][exp_char[][dec. ]]

Требуемый символ спецификации типа (см. следующую таблицу).

Дополнительное возникновение также + или – , но не оба.

Требуемая последовательность одной или более десятичных цифр.

Единственный дополнительный период.

Дополнительная последовательность одной или более десятичных цифр.

Дополнительный символ-разделитель экспоненты (см. следующую таблицу).

Символ спецификации типа, flt_char, указывает тип и представление созданного числа; набор юридических символов спецификации типа с архитектурой процессора, как показано здесь:

Когда константы с плавающей точкой используются в качестве параметров .single и .double директивы, символ спецификации типа фактически не используется в определении типа числа. Для удобства, r или R может использоваться последовательно для указания всех типов чисел с плавающей точкой.

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

Константы с плавающей точкой внутренне представлены как flonums в машинно-независимом, независимом от точности формате с плавающей точкой (для точного перекрестного блока).

Счетчик сборного пункта

Единственный период ( . ), обычно называемый «точкой», используется для представления текущего счетчика адреса. Нет никакого способа явно сослаться на любые другие счетчики адреса помимо текущего счетчика адреса.

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

Синтаксис выражения

Выражения являются комбинациями условий операнда (который может быть числовыми константами или символьными идентификаторами), и операторы. Этот раздел перечисляет доступных операторов и описывает правила для объединения этих операторов с операндами для создания юридических выражений.

Операторы

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

Ассемблер обеспечивает и унарные операторы и бинарных операторов. Унарный оператор предшествует своему операнду; бинарный оператор следует за своим первым операндом и предшествует его второму операнду. Например:

!var | unary expression
var+5 | binary expression

Ассемблер распознает следующие унарные операторы:

Источник: spec-zone.ru

Формат языка ассемблера

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

Большинство программ на языке ассемблера вводятся в ЭВМ с помощью перфокарт. Как мы уже знаем, перфокарта разделена на 80 колонок, в каждой из которых кодируется определенный символ (колонка может быть и пустой). На каждой карте обычно перфорируется одно предложение языка, хотя существуют средства продолжения длинных предложений за пределы одной карты.

Читайте также:
Программы относятся к типовым

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

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

Каждое предложение языка ассемблера состоит из четырех полей: поля имени, поля операции, поля операндов и поля комментария. Эти поля располагаются в таком порядке:

имя операция операнды комментарий

Статья 364 - Картинка 1

Поля отделяются друг от друга по крайней мере одним пробелом (пустой колонкой).

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

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

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

Как мы уже отмечали, операндами обычно являются адреса регистров или ячеек памяти, определяемые числовыми значениями или символическими именами этих адресов. Если для представления адреса используется символическое имя, то оно, очевидно, должно появиться в поле имени некоторого предложения программы. Если указанная в пале операции машинная команда требует более одного операнда, то они указываются в обычной последовательности и отделяются друг от друга запятыми. Например, если в поле операндов указано 3,12,ADDR1 то число 3 (вероятно, ссылка на третий регистр) будет первым операндом, число 12 (вероятно, регистр 12) — вторым, а символическое имя ADDR1 —третьим. Поле операндов, за исключением некоторых специальных случав, не должно содержать пробелов.

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

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

Статья 364 - Картинка 2

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

Читайте также:
Совокупность идей и понятий определяющих стиль написания компьютерных программ

Следующая группа символов, опять до пробела,— поле операции. Следующая — поле операндов. Другими словами, пробел используется в качестве разделителя полей в команде.

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

На рис. 3.5 приведен пример записи предложений языка ассемблера на бланке.

Форматы записи команд Ассемблера и некоторые его директивы

Язык Ассемблера является следующим по уровню за машинными кодами языком программирования.

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

Программа на языке Ассемблера называется исходной программой (исходным модулем).

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

Форматы записи команд Ассемблера

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

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

При разработке программ рекомендуется использовать комментарии. Комментарий всегда начинается с символа «;». Ассемблер полагает, что все символы, которые находятся справа от этого символа являются комментарием.

Примеры записи команд Ассемблера:

; фрагмент программы М5: ADD АХ,ЗОН ; сложение содержимого аккумулятора ; АХ с шестнадцатиричным числом 30 MOV RLOW,AX ; пересылка данных из регистра АХ ; в область памяти RLOW JMP М5 ; команда перехода к метке М5

Некоторые директивы Ассемблера

Директива SEGMENT используется для описания сегментов. Сегментом зовется область памяти, которая начинается на границе параграфа (имеет начальный адрес, кратный 10Н) и имеет размер до 64 Кбайт.

  1. сегмент кода. В сегменте кода находятся машинные команды, которые подлежат выполнению; адрес сегмента кода находится в регистре CS;
  2. сегмент данных. В сегменте данных содержится определение данных, рабочие области и константы необходимые программе; адрес сегмента данных находится в регистре DS;
  3. сегмент стека. В стеке находятся адреса возврата подпрограмм, адреса параметров процедур и т.д.; адрес сегмента находится в регистре SS.

Директива SEGMENT задает имя сегмента. Имя сегмента обязательно должно быть задано, соответствовать соглашениям для имен в Ассемблере и быть уникальным. Директива Ассемблера ENDS указывает на конец описания сегмента. Директивы, SEGMENT и ENDS, должны обладать одинаковыми именами.

Процессор всегда использует регистры CS, DS, SS для адресации сегмента кода, данных и стека соответственно.

Ассемблеру нужно сообщить назначение каждого сегмента. Для этого служит директива ASSUME. Формат директивы ASSUME имеет вид:

ASSUME SS:имя_стек,DS:имя_дан,СS:имя_код

Например, запись SS:ABC указывает, что сегмент с именем ABC является сегментом стека.

Для определения кода или относительной позиции в сегменте данных Ассемблер использует счетчик адреса. Директива ORG используется для изменения значения счетчик адреса и, соответственно, адресов всех следующих за ней команд или данных. Формат директивы имеет вид:

Выражение может быть, в частности, целым числом.

На завершение программы указывает директива END. Директива имеет следующий формат:

END [имя точки входа]

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

  • delitme 0.90
  • 9 сентября 2013, 12:06
  • 1
  • 8050

Источник: www.adodo.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru