Главная  Микроконтроллеры 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [ 31 ] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

имеют фиксированные имена: @0...@9. При вызове макрокоманды параметры должны быть представлены в виде списка, разделенного запятыми. Определение макрокоманды завершается директивой ENDMACRO.

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

Макрокоманда должна быть определена в тексте программы до того, как ее используют.

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

Синтаксис:

.MACRO

Пример:

.MACRO SUBI16 ; Начало определения макрокоманды

subi r16,low(6>0) ; Вычитаем младший байт

sbci r17,high(@0) ; Вычитаем старший байт

.ENDMACRO ; Конец определения макрокоманды

.CSEG : Начало сегмента кода

SUBI16 9x1234,г16.г17 : Вычесть 0x1234 из г17: г16

Примечание: г17:г16 в данном случае - пара регистров, содержащая 16-разрядное число.

•NOLIST - включить генерацию листинга.

Директива NOLIST выключает генерацию листинга. Ассемблер генерирует листинг, содержащий исходный текст на ассемблере, адреса и коды операций. По умолчанию генерация листинга включена. В комбинации с директивой LIST можно организовать печать только нужных фрагментов программы.

Синтаксис:

.NOLIST

Пример:

.NOLIST ; Отключить генерацию листинга



INCLUDE "macro.inc" ; Включаемые файлы не будуг .INCLUDE "const.def" ; показаны в листинге .LIST ; Включить генерацию листинга

•ORG - установка значения счетчика расположения.

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

Если перед директивой расположена метка (на этой же строке), метка получит значение параметра директивы. Значение по умолчанию для сегмента кода и EEPROM равно О, а для SRAM - 32 (так как регистры занимают пространство с О до 31). Обратите внимание, что для EEPROM и SRAM отсчитываются байты, в то время как в памяти программ - слова.

Синтаксис:

.ORG выражение

Пример:

.DSEG ; Начало сегмента данных (SRAH)

-ORG 0x37 ; Установить адрес SRAM 37Н

variable:.BYTE 1 : Зарезервировать 1 байт по адресу 37Н SRAM

.ESEG ; Начало сегмента EEPROM

.ORG 0x20 ; Установить значение счетчика расположения

eevar:.DW 0xf77a ; Инициализировать слово в памяти EEPROM

-CSEG

.ORG 0x10 ; Установить счетчик на значение 0x10

nov гО, П ; Эта команда будет расположена в памяти

; программ по адресу 0x10

•SET - присвоить символьному обозначению выражение.

Директива SET присваивает символьному обозначению значение выражения. В дальнейшем это символьное обозначение может быть



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

Синтаксис:

.SET символьное обозначение = выражение Пример:

.SET io offset = 0x23 .SET porta = io offset + 2

.CSEG ; Начало сегмента кода

clr г2 ; Очистить регистр г2

out porta,г2 ; Записать в порт А

Выражения

Ассемблер позволяет использовать в тексте программы выражения. Они могут содержать операнды, операции и функции. Все выражения имеют разрядность 32 бита.

Операнды

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

• определенные программистом метки, имеющие значение счетчика, в зависимости от места своего расположения;

• переменные, определенные с помощью директивы SET;

• константы, определенные с помощью директивы EQU;

• целые константы:

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

- шестнадцатеричные (два вида записи): ОхОа, $0а, Oxff, $ff,

- двоичные: ObOOOOlOlO, Obi 1111111;

• коды символов ASCII: А, а;

• строки ASCII (без нуля в конце строки): «String»;

• PC - текущее значение счетчика команд в памяти программ.

Функции

ЕО\У(выражение) - возвращает младший байт выражения; НЮН(выражение) - возвращает старший байт выражения; В¥ТЕ2(выражение) - возвращает 2 байта выражения; В¥ТЕЗ(выражение) - возвращает 3 байга выражения;



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [ 31 ] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

0.0012