.title ″example.asm″ ;源程序取名为example.asm
STACK .usect ″STACK″,10h ;为名为STACK的堆栈预留16个单元
.bss x, 4 ;在数据存储器中为未初始
.bss a, 4 化变量(续) x, a, y分别
.bss y, 1 预留4,4,1个单元
.def start ;
.data ;以下为数据段
table:.word 1, 2, 3, 4 ;在以标号table开始的8个
.word 8, 6, 4, 2 程序存储单元中存放8个已初始化数据
.text ;以下为程序段
start: STM # STACK+10,SP ;设置堆栈指针
STM # table, AR1 ;AR1指向table的首地址
STM # x, AR2 ;AR2指向存放变量x的首地址
STM # 7, AR0 ;AR0=7
LD # 0, A ;A=0
loop: LD *AR1+, A ;(AR1)→A, AR1=AR1+1
STL A, *AR2+ ;A→(AR2) , AR2=AR2+1
BANZ loop,*AR0- ;若AR0≠0,循环,AR0=AR0-1
CALL sum ;若AR0=0,调用sum子程序
end: B end ;
sum: LD #0, A ;A=0
STM #a, AR3 ;AR3指向存放变量a的首地址
STM #x, AR4 ;AR4指向存放变量x的首地址
RPT #3 ;
MAC *AR3+,*AR4+,A ;完成三次乘法累加运算
STL A,@y ;将结果存入预留的数据存储器中
RET ;返回主程序
.end ;结束汇编命令
则生成的example.hex文件的内容如表2所示。
如果将example.hex的内容烧写至16位EPROM中,则其数据存储器内部组织结构如表3所示。
由表3 的EPROM数据组织结构可看出,在0FFFFh地址处存放的是自举表首地址8000h。从8000h处开始是16位自举表的内容。自举表的第一个字是16位自举标记10AA,第二、三个字分别为寄存器SWWSR及BSCR的内容。从第四个字开始分别是程序入口地址、各代码段长度、存放各代码段的目标地址及各段代码(本例含有程序段及数据段),最后为块结束标志0000h。这样, 一个正确的自举表就建立起来了。
’C5402 DSP芯片为用户提供了丰富灵活的自举引导方式,用户可根据各自的需求选择不同的引导方式,其中并行自举是最常用的引导方式之一。正确建立自举表是充分利用自举引导功能的前提及关键。