如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
1第五章汇编语言编程举例第一节汇编语言编程的基本方法传送速度比加载和存储指令要快;传送数据不需要通过累加器;可以寻址程序存储器;与RPT指令相结合(重复时,这些指令都变成单周期指令),可以实现数据块传送。(1)数据存储器←→数据存储器这类指令有:MVDKSmem,dmad指令的字数/执行周期2/2MVKDdmad,Smem;Smem=dmad2/2MVDDXmem,Ymem;Ymem=Xmem1/1(2)程序存储器←→数据存储器这类指令有:MVPDpmad,Smem;Smem=pmad2/3MVDPSmem,pmad;pmad=Smem2/4pmad为16位立即数程序存储器地址;dmad为16位立即数数据存储器地址;Smem为数据存储器地址;Xmem、Ymem为双操作数数据存储器地址,Xmem从DB数据总线上读出。Ymem从CB数据总线上读出。(3)数据存储器←→MMR这类指令有:MVDMdmad,MMR;指令的字数/执行周期2/2MVMDMMR,dmad;dmad=MMR2/2MVMMmmrx,mmry;mmry=mmrx1/1(4)程序存储器(Acc)←→数据存储器包括:READASmem;Smem=prog(A)1/5WRITASmem;prog(A)=Smem1/5mmrx,mmry为AR0~AR7或SP;MMR为任何一个存储器映象寄存器;例5-6将数组x[5]初始化为{1,2,3,4,5}。.data;定义初始化数据段起始地址TBL:.word1,2,3,4,5;为标号地址TBL;开始的5个单元赋初值.sect“.vectors”;定义自定义段,并获;得该段起始地址BSTART;无条件转移到标号为START的地址.bssx,5;为数组x分配5个存储单元.text;定义代码段起始地址START:STM#x,AR5;将x的首地址存入AR5RPT#4;设置重复执行5次下条指令MVPDTBL,*AR5+;将TBL开始的5个值传给xstart:STM#0,SWWSR;复位SWWSRSTM#STACK+30H,SP;初始化堆指针STM#x,AR1;将目的地首地址赋给AR1RPT#19;设定重复传送的次数为20次MVPDtable,*AR1+;程序存储器传送到数;据存储器STM#x,AR2;将x的首地址存入AR2STM#y,AR3;将y的首地址存入AR3RPT#19;设置重复执行20次下条指令MVDD*AR2+,*AR3+;将地址x开始的20个值;复制到地址y开始的20个单元end:Bend.end用间接寻址方式获得操作数,且辅助寄存器只用AR2~AR5;占用程序空间小;运行速度快。在单个周期内同时利用C总线和D总线,得到32位操作数。(2)奇地址排列法指令中给出的地址为奇地址,存储器中低地址存放低16位操作数。如:DLD*AR3+,A执行前:A=0000000000执行后:A=00BD906CACAR3=0101AR3=0103(0100h)=6CAC(低字)(0100h)=6CAC(0101h)=BD90(高字)(0101h)=BD90推荐采用偶地址排列法,将高16位操作数放在偶地址存储单元中。如:程序存储器.long12345678h;偶地址:1234;奇地址:5678数据存储器.bssxhi,2,1,1;偶地址:xhi↓↓↓↓;奇地址:xlo变量名称字长页邻接偶地址排列法例5-9计算Z32=X32+Y32。标准运算长字运算LD@xhi,16,ADLD@xhi,AADDS@xlo,ADADD@yhi,AADD@yhi,16,ADSTA,@zhiADDS@ylo,A(3个字,3个T)STHA,@ZhiSTLA,@Zlo(6个字,6个T)(1)并行运算指同时利用D总线和E总线。其中,D总线用来执行加载或算术运算,E总线用来存放先前的结果。(2)并行指令都是单字单周期指令。(3)并行运算时所存储的是前面的运算结果,存储之后再进行加载或算术运算。(4)并行指令都工作在累加器的高位。表5-1并行指令举例9.小数运算在汇编语言中,是不能直接写入十进制小数的,可写为整数运算式。如果要定义一个系数0.707,可以写成:.word32768*707/1000不能写成32768*0.707。通过合适的Q格式,可以把数值根据所需的精确度做适当地转换,以便定点数的DSP也可以处理高精度的浮点数。下面以Q15为例,说明转换的过程。1)先确定准备转换的十进制数值N,是在Q15格式的数值范围之间,即-1.000000≤N≤+0.999997。2)数值N乘以215,即N'=N×215=N×32768