1 .1 数字信号处理器与一般通用计算机和单片机的主要差别有哪些?
答:在通用的计算机上用软件实现该方法速度太慢, 适于算法仿真;
在通用计算机系统上加上专用的加速处理机实现该方法专用性较强,应用受限制,且不便于系统
的独立运行;
用通用的单片机实现这种方式多用于一些不太复杂的数字信号处理,如简单的PID控制算法;
用通用的可编程DSP芯片实现与单片机相比,DSP芯片具有更加适合于数字信号处理的软件及硬件资源,可用于复杂的数字信号处理算法;
用专用的DSP芯片实现在一些特殊场合, 要求信号处理速度极高, 用通用的DSP 芯片很难实现,而专用的DSP 芯片可以将相应的信号处理算法在芯片内部用硬件实现,不需要编程。
1 .4 什么是冯·诺埃曼结构计算机, 什么是哈佛结构计算机, 二者的特点是什么?
答:冯.诺曼结构:将指令、数据存储在同一个存储器中,统一编址,译稿指令计数器提供的地址来区分是指令还是数据。取指令和取数据都访问统一存储器,数据吞吐率低。
哈佛结构:程序和数据存储在不同的存储空间,程序存储空间和数据存储空间是两个相互独立的存储空间,每个存储空间独立编址,独立访问。
1 .8 DSP的工作电压越来越低,内核电压已低至1V,这样做有何意义?为什么DSP内核工作电压和I/O工作电压不一样?
答:集成电路速度越来越快,随之而来,功耗越来越大,这样散热就是很大的问题.在芯片走线尺寸不变的情况下,内部阻抗也不变,降低工作电压会降低功耗,这样能再较高频率下芯片发热较少。
内核不容易受到外部干扰,所以电压可以做的较低,但IO容易受外部信号干扰,保持较高电压容易是器件工作稳定,这是功耗和稳定性的折中。
1 .10 定点DSP和浮点DSP有什么区别?在具体应用中, 应如何选择?
答:在浮点DSP中,数据即可以表示成整数,也可以表示成浮点数。浮点数在运算中,表示数的范围由于其指数可自动调节,因此可避免数的规格化和溢出等问题。但浮点DSP 一般比定点DSP 复杂, 成本也较高。
在定点DSP中, 数据采用定点表示方法。它有两种基本表示方法:整数表示方法和小数表示方法。整数表示方法主要用于控制操作、地址计算和其他非信号处理的应用, 而小数表示方法则主要用于数字和各种信号处理算法的计算中
2 .4 当要使用硬中断INT3作为中断响应矢量时,请问可屏蔽中断寄存器IMR和中断标志寄存器IFR应如何设置?
答:IFR中INT3位=1,IMR中INT3位=1,使能中断。2 .5 若处理器方式寄存器PMST的值设为01A0H,而中断矢量为INT3,那么在中断响应时, 程序计数器指针PC的值为多少?
答:PMST中IPTR=(000000011)b,int3中断向量号为24H,做移量为后变为60H,则中断响应时程序计数器指针PC=01E0H.
2 .10 DSP如何与不同速度的片外存储器及其他外设进行数据交换?
答:软件可编程等待状态发生器可以将外部总线周期扩展到7个机器周期,以使’C54x能与低速外部设备接口。而需要多于7个等待周期的设备,可以用硬件READY线来接口。
2 .11 TMS320C54x可进行移位操作,它的移位范围是多少?
答:’C54x的移位操作最多可以左移31位,或右移16位。(-16~31)
2 .1
3 为什么说应尽量利用DSP的片内存储器?
答:与片外存储器相比,片内存储器不需要插入等待状态,因此成本低,功耗小。
2 .14 如何操作通用I/ O 引脚XF和BIO?
答:XF信号可以由软件控制。通过对STl中的XF位置1得到高电平,清除而得到低电平。对状态寄存器置位的指令SSBX和对状态寄存器复位的指令RSBX可以用来对XF置位和复位。同时XF引脚为高电平和低电平,亦即CPU向外部发出1和0信号。
程序可以根据BIO的输入状态有条件地跳转,可用于替代中断。条件执行指令(XC)是在流水线的译码阶段检测BIO的状态,其它条件指令(branch、call和return)是在流水线的读阶段检测BIO 的状态的。
4 .1 写出汇编语言指令的格式, 并说明应遵循怎样的规则?
答:助记符指令格式:
[标号][:] 助记符[操作数列表] [;注释]
代数指令格式:
[标号][:] 代数指令[;注释]
应遵循下列规则:
①语句的开头只能是标号、空格、星号或分号。
②标号是可选项,如果使用,必须从第一列开始。
③每个域之间必须由一个或多个空格来分开。制表符等同于空格的作用。
⑤源语句的字符数每行不能超过200个。
4 .2 TMS320C54x 有几种寻址方式? 它们是什么?
答:寻址方式有七种;他们是:○1即数寻址;②绝对地址寻址;③累加器寻址;④直接寻址;⑤间接寻址;⑥存储器映射寄存器寻址;⑦堆栈寻址;
4 .4 直接寻址有两种方式, 它们是什么? 如何控制? 当SP = 2000H, DP = 2 , 偏移地址为25H 时, 分别寻址的是哪个存储空间的哪个地址单元?
答:(1)直接寻址中,操作数是一个数据页内的偏移地址,而所在的数据页由数据页指针DP或SP决定,该偏移地址与DP和SP的值决定了在数据存储器中的实际地址;
(2)位于状态寄存器ST1中的编译方式位(CPL)(bit14)决定选择采用哪种方式来产生实际地址。
CPL=0 偏移地址与9bits的DP域相结合形成16bits的数据存储器地址。
CPL=1 偏移地址加上SP的值形成16bits的数据存储器地址。
(3)当CPL=0时,寻址的是数据存储空间的0125h地址单元;
当CPL=1时,寻址的是数据存储空间的2025h地址单元;
4 .13 已初始化段和未初始化段的含义是什么? 由哪些伪指令来完成它们的定义?
答:未初始化的段占用’C54x DSP的存储空间,它通常被分配在RAM中。这些段在目标文件中并没有实际的内容,只是保留一定的存储空间,程序运行时可以使用这些空间来产生或存储变量。已初始化的段包括可执行的代码或已初始化的数据。装载程序时这些在目标文件里的段被放在’C54x的存储空间中。
未初始化段定义伪指令有.bss和.usect指令;已初始化的段定义伪指令有.text、.data、.sect指令
5 .1 COFF文件格式中的段是如何定义的,它们的作用是什么?
答:COFF文件中的段就是一段代码或数据,或是保留的空间。目标文件被分成各个段,这些数据段和代码段在内存空间中占据各自的位置。目标文件中的各个段是分开的而且是不同的。COFF目标文件总是包含3个默认段:.text、.data和.bss段。.text段通常包含可执行代码;.data段一般包含已经初始化的数据(程序运行时所需的具体数据);.bss段通常为变量保存空间(未初始化段)。段的使用能更有效地分配目标存储器。
5 .3 链接命令文件有什么作用?在生成DSP代码过程中何时发挥这些作用?
答:链接命令文件(.cmd文件)通过段定位控制命令,分配程序代码空间、数据代码空间、程此命令文件链接example.obj和vector.obj两个目标文件(输入文件),并生成一个映像文件example.map以及一个可执行的输出文件example.out,标号“start”是程序的入口。
5.4 用C语言设计时C编译器会产生哪些代码段?它们包含哪些内容?如何将它们配置到目标存储器中?
答:.text段包括可执行代码、字符串和常量。
.cinit段包括初始化常量和常数表。
.const段为字符串常量和以const关键字定义的常量。
.switch段用于开关(switch)语句的数据表。
通常.text、.cinit和.switch段可以链接到系统ROM或RAM中去, 但必须放在程序存储空间(page0);而.const段可以链接到系统ROM或RAM中去,但必须放在数据存储器(page1)。
.bss段保留全局和静态变量空间。在程序开始运行时,C的引(boot)程序将数据从cinit段复制到.bss段。
.Stack段为C的系统堆栈分配存储空间,用于传递变量。
.Sysmem段为动态存储器函数malloc、calloc、realloc分配存储器空间。
以上3个段链接到系统RAM中去,但必须放在数据存储器(page1)中。
5 .8 DSP编程可采用C或汇编编程,两种编程方法各有何优缺点?
答:用C语言开发DSP程序不仅使DSP 开发的速度大大加快,而且开发出来的DSP 程序可读性和可移植性都大大增强,程序修改也极为方便。采用C编译器的优化功能可以提高C代码的效率,有时C代码的效率甚至接近于手工代码的效率。在DSP芯片的运算能力不是十分紧张时用C语言开发DSP程序是非常合适的。但在一般情况下,C代码的效率还是无法与手工编写的汇编代码的效率相比,如FFT程序等。因为即使是最佳的C编译器,也无法在任何情况下都能最佳地利用DSP芯片所提供的各种资源,如TMS320C54x所提供的循环寻址和可用于FFT的位倒序寻址等。用C语言编写的中断程序,虽然可读性很好,但只要进入中断程序(不管程序中是否用到),中断程序就会对寄存器进行保护,从而降低中断程序的效率。如果中断程序频繁被调用,那么即使是一条指令也会影响全局。此外,用C语言编程,DSP芯片的某些硬件控制也不如用汇编语言方便,有些甚至无法用C语言实现。因此,通常DSP应用程序往往需要用C语言和汇编语言的混合编程方法来实现,以达到最佳的利用DSP芯片软、硬件资源的目的。
5 .10 在文件的链接过程中,需要用到Linker命令文件。请按如下参数设计一个命令文件,其参数
为:
中断向量表起始地址为7600H;长度为8000H ;
源程序代码在中断向量之后;
初始化数据起始为1F10H;长度为4000H;
未初始化数据在初始化数据之后。
答:
5.4 用C语言设计时C编译器会产生哪些代码段?它们包含哪些内容?如何将它们配置到目标存储器中?
答:.text段包括可执行代码、字符串和常量。
.cinit段包括初始化常量和常数表。
.const段为字符串常量和以const关键字定义的常量。
.switch段用于开关(switch)语句的数据表。
通常.text、.cinit和.switch段可以链接到系统ROM或RAM中去, 但必须放在程序存储空间(page0);而.const段可以链接到系统ROM或RAM中去,但必须放在数据存储器(page1)。
.bss段保留全局和静态变量空间。在程序开始运行时,C的引(boot)程序将数据从cinit段复制到.bss段。
.Stack段为C的系统堆栈分配存储空间,用于传递变量。
.Sysmem段为动态存储器函数malloc、calloc、realloc分配存储器空间。
以上3个段链接到系统RAM中去,但必须放在数据存储器(page1)中。
4 .13 已初始化段和未初始化段的含义是什么? 由哪些伪指令来完成它们的定义?
答:未初始化的段占用’C54x DSP的存储空间,它通常被分配在RAM中。这些段在目标文件中并没有实际的内容,只是保留一定的存储空间,程序运行时可以使用这些空间来产生或存储变量。
已初始化的段包括可执行的代码或已初始化的数据。装载程序时这些在目标文件里的段被放在’C54x的存储空间中。
未初始化段定义伪指令有.bss和.usect指令;已初始化的段定义伪指令有.text、.data、.sect指令链接器对段处理时的两个主要任务:其一是将一个或多个COFF目标文件中的各种阶段作为链接器的输入端,经链接后在一个执行的COFF输出模块中建立各个输出段;其二是为各个输出段选定存储器地址。
1.已知(20H)=70H,AR2=40H,AR3=60H,AR4=80H。
MVKD 20H,*AR2
MVDD *AR2,*AR3
MVDM *AR3,AR4
结果(20H)=70H,(40H)=70H ;*AR3=70H; AR4=70H;
2. .bss x, 4
.data
table: .word 4,8,16,32
…
STM #x , AR1
RPT 2
MVPD table, *+AR1
运行以上程序,写出运行结果。
(AR1+3)=____32____,(AR1+2)=___16_______,(AR1+1)=____8__
1、嵌入式系统ARM内核和DSP内核的结合,意义何在?
答:AMR以控制为核心;DSP多媒体影音处理,实时信号处理。
控制能力好,定时控制好。速度快、开发性好、稳定性高。
ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和众多合作伙伴。
2、DSP的工作电压越来越低,内核电压已经低至1V,这样做有何意义?为什么
DSP内核工作电压和I/O工作电压不一样?
答:集成电路越来越快,随之而来,功耗越来越大,这样散热就是很大的问题,在芯片走线尺寸不变的情况下,内部阻抗也不变,降低工作电压会降低功耗,这样能在较高频率下芯片发热教少。内核不容易受到外部干扰,所以电压可以做的较低,但IO容易受外部信号干扰,保持较高电压容易是器件工作稳定,这是功耗和稳定性的折中。
3、TMS320C54xDSP采用硬件乘法器完成17*17bits带符号乘运算,而软件乘法器
(微代码指令)也能完成同样的运算,请问它们有什么区别?
答:DSP有专门的硬件来实行乘累加(MAC运算),也就是你说的硬件乘法器,用MAC可以在一个处理器时钟周期内,得到两个数据相乘的结果。而典型的微处理器是通过二进制长的相乘进行乘法运算的,当微处理器遇到一个乘法指令时,调用一个内部运算序列(称为微码)在连续的时钟周期中,改执行一系列的移位和相加运算,直到算出结果。因为微码有许多步骤,所以该运算需要许多时钟周期来完成。(硬件比软件快速完成乘法运算,软件要占用程序空间,运行时间长)
4、当要使用硬中断INT3作为中断响应矢量时,请问可屏蔽中断寄存器IMR和中
断标志寄存器IFR应如何设置。
答:IFR中INT3=1,IMR中INT3=1,使能中断。
5、若处理器方式寄存器PMST的值设为01A0H,而中断矢量为INT3,那么在中
断响应时,程序计数器指针PC的值为多少?
答:PMST中IPTR=(000000011)b,int3中断向量为24H,做移量为后边为60H,则中断响应时程序计数器指针PC=01E0H。
6、TMS320C54xDSP存储器有3个独立的可选空间组成:程序、数据和I/O空间。
而'C54x存储空间的配置是受MP/MC、OVL Y和DROM3个位控制的。如果想
使片上RAM同时映射到数据空间和程序空间,那么MP/MC、OVL Y和DROM 的值应如何设置?
答:在处理器工作方式状态寄存器PMST中有3个状态位MP/ 、OVL Y和DROM,用来安排C54X片内存贮器作为程序或数据空间。
若MP/ =0,则片内ROM安排到程序空间。若MP/ =1,则片内ROM不安排到程序空间。
若OVL Y=0,则片内RAM只安排到数据存贮空间若OVL Y=1,则片内RAM安排到程序和数据空间。
若DROM=0,则片内ROM不安排到数据空间。若DROM=1,则片内ROM安排到数据空间。
7、TMS320C54xCPU有一条指令流水线加速了指令执行,请问流水线分几级,分
别叙述各级的功能?
答;流水线共分六级;
预取程序地址;将下一条要执行的指令地址提供给程序地址总线PAB
取程序指令:从程序总线PB上取程序指令,并放入指令寄存器IR中
指令译码:指令寄存器IR的内容被译码,并决定在CPU和数据地址产生单元DAGEN中,产生什么样的操作类型和控制顺序。
存取准备:数据地址产生单元输出要存取数据的地址到数据地址总线DAB和CAB上
读操作:从数据总线DB和CB上读数据同时把将要写的数据地址提供给写地址总线EAB
执行/写操作:指令被执行同时通过数据写总线EB完成操作。
8、DSP响应中断的条件有哪些?
DSP响应中断的条件是:
对于软件中断和非屏蔽中断,遵循最高优先级的条件;
对于可屏蔽中断响应的条件是:(1)状态寄存器ST1的INTM位=0,使能所有可屏蔽中断;(2)终端屏蔽寄存器IMR的相应位=0;(3)遵循最高优先级。
响应中断时DSP自动进行的操作是:⑴保存程序计数器(PC)值(返回地址)到
数据存储器的堆栈顶部;
⑵将中断向量的地址加载到PC;⑶获取位于向量地址的指令(分支转移被延时。并且用户也存储了一个2字指令或两个1字指令,则CPU也会获取这两个字);⑷执行分支转移,转到中断服务程序(ISR)地址(如果分支转移被延时,则在分支转移之前会执行额外的指令);⑸执行ISR直到一个返回指令中止ISR;⑹从堆栈中弹出返回地址到PC中。⑺继续执行主程序;
9、DSP如何与不同速度的片外存储器及其他外设进行数据交换?
答:软件可编程等待状态发生器可以将外部总线周期扩展到7个机器周期,以使’C54x能与低速外部设备接口,而需要多于7个等待周期的设备,可以用硬件READY线来接口
10、循环寻址和位倒序寻址是DSP数据寻址的特殊之处,试叙述这两种寻址的特
点和它们在数字信号处理算法中的作用。
答:循环寻址可以和任意一种间接寻址模式一起使用。每一个辅助寄存器和系数数据指针,作为对数据或寄存器位的指针时,都可以独立配置成线性或循环寻址。
位倒序寻址提高了执行速度和在FFT算法的程序中使用存储器的效率。在这种寻址方式中,AR0存放的整数N是FFT点数的一半,一个辅助寄存器指向一个数据存放的物理单元。当使用位倒序寻址方式把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右的,而不是从右向左。
位倒序寻址主要应用于FFT运算,可以提高FFT算法的执行速度和使用存储器的效率。FFT运算主要实现采样数据从时域到频域的转换,用于信号分析,FFT要求采样点输出是倒序时,输出是顺序;若输入是顺序,输出就是倒序。
答:循环寻址可以和任意一种间接寻址模式一起使用。每一个辅助寄存器和系数数据指针,作为对数据或寄存器位的指针时,都可以独立配置成线性或循环寻址。
位倒序寻址提高了执行速度和在FFT算法的程序中使用存储器的效率。在这种寻址方式中,AR0存放的整数N是FFT点数的一半,一个辅助寄存器指向一个数据存放的物理单元。当使用位倒序寻址方式把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右的,而不是从右向左。
11、如何在数据存储器中开辟循环缓冲区?答:在数据存储器中开辟一个称之为滑窗的N个单元的缓冲区,滑窗中存放最新的N个输入样本;每次输入新样本时,以新样本改写滑窗中的最老的数据,而滑窗中的其他数据不作移动;利用片内BK(循环缓冲区长度)寄存器对滑窗进行间接寻址,循环缓冲区地址首尾相邻。
12、在数据存储器中开辟一段循环缓冲区,缓冲区大小为64。试写出缓冲区首地
址和缓冲区大小寄存器的内容。答:①首地址:EFB ②内容:XXXX XXXX X000 0000b
13、使用循环寻址要遵循的三个原则:
答:1、循环缓冲区的长度R<2的N次方,且地址从一个低N位为0的地址开始;
2、步长小于或等于循环缓冲区的长度;
3、所使用的辅助寄存器必须指向缓冲区单元。
14、DSP特有的位倒序寻址主要应用于FFT算法中,针对复数FFT和实数FFT,
相应的位倒序寻址索引应如何确定?
答:实数FFT时位倒序寻址索引{AR0存放的整数}是FFT点数的一半;复数FFT 时位倒序寻址索引{AR0存放的整数}是FFT点数
1、分析汇编程序为什么要用泰勒展开的方法实现正弦计算。
答:泰勒展开能精确计算出一个角度的正弦和余弦值,且只需要较小的存储空间2、'C54x核心板的最小应用系统包括哪几个部分?电源管理芯片的作用是什么?电源、复位电路、时钟电路、外部存储器总线接口电路、仿真器接口电路
3、核心板电源管理电路设计中需要特别注意的问题是什么?
答:在进行电源设计时,需要特别强调的是模拟电路和数字电路部分要独立供电,数字地与模拟地分开,遵循单点接地的原则。
7、'C54x定时器由哪几个特殊功能寄存器控制其定时时间,没有扩展的情况下,最
长的定时时间由什么决定。
答:由定时设定计数器TIM、定时周期计数器PRD和定时控制寄存器TCR这三个特殊功能寄存器控制其定时时间。最长定时时间由指令周期T和TIM设置的初值决定。
12、为什么改变锁相环电路PLL模式的乘法系数,首先要将锁相环电路转换成DIV
模式?
答:因为在只有DIV模式下才能更改PLLMUL、PLLDIV和PLLON/DOFF位。
13、定时器对CPU时钟分频倍数最大可以是多少?答:0FFFFH
14、'C54x核心板的存储空间包括哪几个部分。它们的空间大小分配由什么决定。答::64K字程序存储空间, 64K字数据存储空间,64K字I/O空间
MP/MC位若MP/MC=0,则片内ROM安排到程序空间; 若MP/MC=1, 则片内ROM不安排到程序空间
OVL Y位若OVL Y=1,则片内RAM安排到程序和数据空间若OVL Y=0则片内RAM只安排到数据存储空间
DROM位当DROM=1,则部分片内ROM安排到数据空间当DROM=0,则片内ROM不安排到数据空间
15、为了将存储器与具有存储连接功能的外设有机结合在一起,又不发生冲突,硬
件连接逻辑应注意的问题是什么?说明原因。
答:1、存储连接功能的外设和CPU之间的通信,因为存储连接功能的外设和CPU 的速率和通信协议彼此并不一定相同,那么必然需要一种设备来进行协议转换和数据缓冲,以适配速率不同,协议不同的各种外设之间以及外设和cpu之间的通信。因此提出总线的概念,连接在一种总线上的所有设备的速率和底层通信协议是一致的。
2、相同协议和相同速率的外设连接在一类总线之上,因为系统中某一种总线并不
一定只有一条,每一条总线(注意,不是一种,而是一条)都定了一个地址空间,也就是一个地址命名空间
16、说明使用DMA的意义何在。
答:能够在没有DSP的核心单元CPU参与的情况下,由DMA控制器完成存储器映射区的数据传输。数据传输可以在片内存储器、片外存储器以及其他外设之间进行。
17、在禁止DMA中断的情况下,CPU如何监控DMA通道的传送?
答:CPU的中断屏蔽寄存器(IMR)和INTM位控制着是否响应来自DMA的中断18、FFT算法按抽取方法可分为哪几种方法?按基数可分为哪几种方法。答:有按时间抽取的FFT算法和按频率抽取的FFT算法
除了基2的FFT算法之外,还有基4、基8等高基数的FFT算法以及任意数为基数的FFT算法。
19、输入序列是按混序存储,输出序列为自然顺序排列的FFT算法是什么?DFT
20、使用循环寻址的数据缓冲区的地址应该如何设置?
答:由EFB定义缓冲区的起始地址,EOB定义缓冲区的底部地址,循环缓冲区的长度必须是2k>N, k为整数,循环缓冲区的起始地址必须对准2k的边界
22、如何在C程序中访问汇编语言变量
答:(1)当C语言访问·bss段中汇编变量时 1、用“·bss”或“·usect”伪指令定义变量; 2、用“·global”伪指令定义外部变量; 3、汇编语言在变量名前加“-”(2)当访问不在·bss段中时,定义一个全局指针变量“-XXX”,并将该指针变量指向数据表的首个数据。(3)用.set和.global命令定义全局常数。从C 语言程序中访问在汇编语言程序中用.set和.global命令定义的常数,按以下步骤可进行正常访问:1、在汇编语言程序中将常数(符号)定义为全局常数;2、C语言程序中访问汇编语言程序中的常数时,应在常数名之前加一个地址操作符“&”。23、使用ADD指令完成加法temp1+ temp2= temp3
LD temp1, A ;将变量temp1装入累加器A
ADD temp2, A ;将变量temp2加到累加器A中
STL A, temp3 ;将结果(累加器A的低16位)存入变量temp3中24、利用ADDS指令实现32位数据装入
LD #0, DP ;设置数据页指针
LD 60h, 16, A ;将60H的内容装入累加器A的高16位,同时累加器A
的低16位清0
ADDS 61h, A ;将61H的内容加到累加器A的低16位
25、利用SUB指令实现两个变量相减
STM #60h, AR3 ;将变量1的地址60H装入辅助寄存器AR3
STM #61h, AR2 ;将变量2的地址61H装入辅助寄存器AR3
SUB *AR2+,*AR3,B ;将变量1左移16位,同时变量2也左移16位,然后
相减,
;结果放入累加器B(高16位)中,同时AR2加1 STH B, 63h ;将相减的结果(高16位)存入变量3的地址63H中26、使用SUBC指令和RPT指令实现整数除法:temp3=temp1/temp2,余数放在temp4
中。
LD temp1, B ;将被除数temp1装入累加器B的低16位
RPT #15 ;重复执行下一条SUBC指令16次
SUBC temp2, B ;使用SUBC指令完成除法
STL B, temp3 ;将商(累加器B的低16位)存入变量temp3
STH B, temp4 ;将余数(累加器B的高16位)存入变量temp4
27、使用MPY指令实现整数乘法:
RSBX FRCT ;清FRCT标志,准备整数乘法
LD temp1, T ;将变量temp1装入T寄存器
MPY temp1, A ;完成temp1* temp1,结果放入累加器A中(32位)28、使用MPYA指令实现小数乘法:
SSBX FRCT ;FRCT=1,准备小数乘法
LD temp1, 16, A ;将变量temp1装入累加器的高16位
MPY A temp2 ;完成temp2乘累加器A的高16位,结果放在B中,
同
;时将temp2装入T寄存器
STH B, temp3 ;将乘积结果的高16位存入变量temp3
29、用汇编语言编写程序,实现y=a1*x1+a2*x2+a3*x3+a4*x4。加上适当注释。example.asm y=a1*x1+a2*x2+a3*x3+a4*x4
.title “example.asm” ;为汇编源程序取名
.mmregs ;定义存储器映象寄存器STACK .usect “STACK”,10h ;分配10h个单元的堆栈空间 .bss a,4 ;为系数a分配4个单元的空间 .bss x,4 ;为变量x分配4个单元的空间
.bss y,1 ;为结果y 分配1个单元的空间
.def start ;定义标号start
.data ;定义数据代码段
table: .word 1,2,3,4 ;在标号table开始的8个单元中
.word 8,6,4,2 ;为这8个单元赋初值
.text ;定义文本代码段
start:STM #0,SWWSR ;软件等待状态寄存器置0,不设等待 STM #STACK+10h,SP ;设置堆栈指针初值
STM #a,AR1 ;AR1 指向 a的地址
RPT #7 ;从程序存储器向数据存储器
MVPD table,*AR1+ ;重复传送 8个数据
CALL SUM ;调用 SUM 实现乘法累加和的子程序end: B end ;循环等待
SUM:STM #a,AR3 ;将系数a的地址赋给AR3
STM #x,AR4 ;将变量x的地址赋给AR3
RPTZ A,#3 ;将A清0,并重复执行下条指令4次
MAC *AR3+,*AR4+,A ;执行乘法并累加,结果放在A中
STL A,@y ;将A的低字内容送结果单元y
RET ;结束子程序
.end ;结束全部程序
30、编写一段程序,将数据存储器中数组x[20]中的数据复制到数组y[20]中。
.title "zh10.asm"
.mmregs
STACK .usect "STACK",30H
.bss x,20
.bss y,20
.data
table: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
.def start
.text
start: STM #x,AR1
RPT #19
MVPD table,*AR1+ ;从程序存储器传送到数据存储器中
STM #x,AR2
STM #y,AR3
RPT #19
MVDD *AR2+,*AR3+ ;从数据存储器传送到数据存储器中
end: B end
.end