Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





Директивы ассемблера можно классифицировать следующим образом (рис. 1).

Рис. 1. Классификация директив ассемблера

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

Рис. 2. Директивы определения общего режима трансляции

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

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

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

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

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

Директивы секционирования программы. Директивы секционирования программы предназначены для оформления логически законченных участков программы (рис. 3).

Рис. 3. Директивы секционирования программы

Сегменты программы могут описываться традиционными директивами segment и ends, как показано в приведенном примере, и директивами упрощенной сегментации.

Для описания процедур в ассемблере предусмотрены директивы proc и endp. Схематичное оформление процедуры с именем P:

P proc

………

………; текст процедуры

……….

P endp

Директивы макросредств. Директивы макросредств позволяют при написании программы оперировать заранее заготовленными фрагментами текстов. Их классификация (рис. 4).

Рис. 4. Классификация директив макросредств

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

Операнды

Могут быть использованы следующие операнды:

· Метки, определённые пользователем (дают значение своего положения).

· Переменные, определённые директивой SET.

· Константы, определённые директивой EQU.

· Числа, заданные в формате:

o десятичном (принят по умолчанию): 10, 255;

o шестнадцатеричном (два варианта записи): 0x0a, $0a, 0xff, $ff; 16

o двоичном: 0b00001010, 0b11111111;

o восьмеричном (начинаются с нуля): 010, 077.

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

· PC – текущее значение программного счётчика (PC – ProgrammCounter).

Операторы

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

Таблица 1

Прио-ритет Сим- вол Описание Пример
       
  ! Логическое отрицание возвращает 1, если выражение равно 0, и наоборот ldi r16,!0xf0;В r16 загрузить 0x00
  ~ Побитное отрицание возвращает выражение, в котором все биты проинвертированы ldi r16, ~0xf0; В r16 загрузить 0x0f
  - Минус возвращает арифметическое отрицание выражения (унитарный минус) ldi r16,-2; Загрузить -2 (0xfe) в r16
  * Умножение возвращает результат умножениядвух выражений ldi r30, label*2
  / Деление возвращает целую часть результатаделения левого выражения на правое ldi r30, label/2
  % Деление по модулю ldi r30,label%2; label делится по модулю 2
  + Суммирование возвращает сумму двух выражений ldi r30, c1+c2
  - Вычитание возвращает результат вычи-тания правого выражения из левого ldi r17, c1-c2
  << Сдвиг влево возвращает левое выраже-ние,сдвинутое влево на число бит, указанное справа ldi r17, 1<<bit; В r17 загрузить 1, сдвину-тую влево bit раз
  >> Сдвиг вправо возвращает левое выражение, сдвинутое вправо на число бит, указанное справа ldi r17, c1>>c2;В r17 загрузить c1, сдвину-тое вправо c2 раз
  < Меньше чем возвращает 1, если левое выражение меньше, чем правое (учитывается знак), и 0 в противном случае ori r18, bitmask*(c1<c2)+1
  <= Меньше или равно: возвращает 1, если левое выражение равно или меньше, чем правое, (учитывается знак), и 0 в противном случае ori r18, bitmask*(c1<=c2)+1
  > Больше чем возвращает 1, если левое выражение больше, чем правое (учитывается знак), и 0 в противном случае ori r18, bitmask*(c1>c2)+1
  >= Больше или равно возвращает 1, если левое выражение равно или больше, чем правое (учитывается знак), и 0 в противном случае ori r18, bitmask*(c1>=c2)+1
  == Равно возвращает 1, если левое выражение равно правому (учитывается знак), и 0 в противном случае andi r19, bitmask*(c1==c2)+1
  != Не равно возвращает 1, если левое выражение не равно правому (учитывается знак), и 0 в противном случае SET flag = (c1!=c2);Установить flag равным 1 или 0
  & Побитное И возвращает результат побитового И выражений ldi r18, High(c1&c2)
  ^ Побитное исключающее ИЛИ возвращает резуль-тат побитового исключающего ИЛИ выражений ldi r18, Low(c1^c2)
  | Побитное ИЛИ возвращает результат побитового ИЛИ выражений ldi r18, Low(c1|c2)
  && Логическое И возвращает 1, если оба выражения не равны нулю, и 0 в противном случае ldi r18, Low(c1&&c2)
  || Логическое ИЛИ возвращает 1, если хотя бы одно выражение не равно нулю, и 0 в противном случае ldi r18, Low(c1||c2)
  ? Условный оператор Синтаксис: Условие? выражение1: выражение 2 ldi r18, > b? a: b ; Загрузка в r18 большегочисла из двух чисел a и b

Функции

В Ассемблере определены следующие функции:

LOW(выражение) – возвращает младший байт выражения;

HIGH(выражение) – возвращает второй байт выражения;

BYTE2(выражение) – то же, что и функция HIGH;

BYTE3(выражение) – возвращает третий байт выражения;

BYTE4(выражение) – возвращает четвёртый байт выражения;

LWRD(выражение) – возвращает биты 0-15 выражения;

HWRD(выражение) – возвращает биты 16-31 выражения;

PAGE(выражение) – возвращает биты 16-21 выражения;

EXP2(выражение) – возвращает 2 в степени (выражение);

LOG2(выражение) – возвращает целую часть log2(выражение).

Следующие функции определены только в AVRASM2:

INT (выражение) – преобразовывает выражение с плавающей точкой в целое (т.е. отбрасывает дробную часть);

FRAC(выражение) – выделяет дробную часть выражения с плавающей точкой (т.е. отбрасывает целую часть);

Q7(выражение) – преобразовывает выражение с плавающей точкой в форму пригодную для инструкций FMUL/FMULS/FMULSU (знак + 7-битовая дробная часть);

Q15(выражение) – преобразовывает выражение с плавающей точкой в форму пригодную для инструкций FMUL/ FMULS/FMULSU (знак + 15-битовая дробная часть);

ABS() – возвращает абсолютную величину постоян-ного выражения;

DEFINED(символ) – возвращает «истина», если символ прежде определен директивами.equ,.set или.def. Обычно используется вместе с директивами if (.ifdefined(foo)), но может быть использовано в любом контексте. В отличие от других функций DEFINED(символ) требует наличия круглых скобок вокруг своего аргумента.

Ассемблер AVRASM2 различает регистр символов (AVRASM не

различает).

 

6. Классификация ошибок в ППО МС

Логическая ошибка

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

Date: 2016-07-05; view: 1842; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию