![]() |
Главная Микроконтроллеры [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.001 |