文档库 最新最全的文档下载
当前位置:文档库 › 14_DSP技术原理及应用教程_课后答案

14_DSP技术原理及应用教程_课后答案

14_DSP技术原理及应用教程_课后答案
14_DSP技术原理及应用教程_课后答案

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

相关文档