DSP

hjr-DSP:汇编运算与段的理解

2019-07-13 10:20发布

DSP编程语言是汇编和C先说下汇编基础,这是几种常见运算MOVE 传送,ADD 加法,SUB减法,MPYM乘法,MACM乘加(MACM a,b,c    =》 c=a*b+c)移位:移出位丢弃,空位补零,左移n位相当于乘以2的n次方,右移n位相当于除以2的n次方
对于程序,主要由数据与代码组成,数据又分为初始化的数据和未初始化的数据,比如你int a;这就是未初始化,int a = 1;这就是初始化汇编语言把程序空间分段,存放数据与代码,注意只有变量可能未初始化,代码一定是初始化的为什么要分段呢,为了管理方便,比如未初始化的变量会统一赋值0未初始化段:.bss:存放系统保留的未初始化的全局变量,比如int,long,位数是系统定的.usect:存放用户自己定义的未初始化的全局变量,比如定义一个abc类型设置成100位长度初始化段:.data:存放系统保留的初始化的全局变量.sect:存放用户自己定义的初始化的全局变量.text:存放你的程序代码比如 .bss h,3就是把名为h位长为3的变量汇编到.bss段下面看一段代码 .mmregs .def start .text start: MOV #0X000A,AC0 AMOV #0X018001,XAR2 AMOV #0X018002,XAR3 MOV #0X0005,*AR2 MOV #0X0002,*AR3 MACM *AR2,*AR3,AC0 HERE: B HERE; .end上面的.text就是告诉汇编器把下面的代码汇编到程序空间的代码段
注意寄存器的几个规则带X的说明是辅助寄存器MACM是累乘,上面的代码汇编后AC0的值是A+2*5=2020用16进制表示,满10进1就是14然后AC0是40位寄存器,所以0X0000000014,1那个是高位,4是低位,低位满了高位进1,转化成值就是1*16+4=20如果遇到小数乘法,看是定点DSP还是浮点DSP,定点便宜,不准,速度快,功耗低,浮点相反定点计算公式,Xq = X*2的Q次幂   Q是定标数比如Q=8,编写0.3*5的程序写程序时,0.3需要转换成0.3*2的8次幂即0.3*256,然后用转换后的值进行运算