Цитата(draft3 @ Jun 8 2017, 18:13)

Я читал "IAR Assembler Reference Guide" пытался брать те куски кода которые там приводились но все никак не получается...
особенно непонятно как правильно пользоваться директивой SECTION.
Я так понимаю что нужно обьявить секцию для переменных сначала?
Так значение переменной не меняется:
Код
#include "iostm8.h"
MODULE asmmain
PUBLIC __iar_program_start
PUBLIC main
EXTERN CSTACK$$Limit
SECTION `.near_func.text`:CODE//начинается секция кода программ, что там в кавычках?
__iar_program_start:
a1 DC16 0 //двухбайтная переменная инициализируется значением 0
a2 DC16 9 //двухбайтная переменная инициализируется значением 9
LDW X, #0x000600; Set stackpointer
LDW SP, X
main:
LD A,#5//загружаю в А число 5
LD a1,A// загружаю в переменную a1 значение из А
END
По моему у Вас всё перепутано.
Вот фрагмент кода, ассемблер редко приходится использовать:
CODE
//-------------------------------------------ПЕРЕМЕННЫЕ---------------------------------------------
SECTION `.noinit`:DATA:NOROOT(2)
DATA
D_NUM DS16 1 ; Серийный номер
D_DAT DS16 1 ; Дата выпуска
dummy DS16 2
//-------------------------------------------КОНСТАНТЫ----------------------------------------------
SECTION `.rodata`:CONST:NOROOT(2)
DATA
;---------------------------------------------------------------------------------------------------
sys_param:
DC16 0, 9999, 1234, 0x90 + T_DEC + F_EXT + F_WRT
DC8 ' Регистр команд '
Синтаксис скорее определяется используемой средой, чем платформой.
В секции, предназначенной для размещения кода, невозможно разместить переменные.
А различия в объявлении должны быть понятны из примера.