1 / 122

第五章 汇编语言程序设计

第五章 汇编语言程序设计. 第一节 程序的控制与转移 C54X 具有丰富的程序控制与转移指令,利用这些指令可以执行分支转移、循环控制以及子程序操作。. 1 、条件算符. 条件分支转移指令或条件调用、条件返回指令都用条件来限制操作。条件算符分成两组,每组又分为两类或三类:. 选用条件算符时应注意以下几点: 第一组:组内两类条件可以与 / 或,但不能在组内同一类中选择两个条件算符与 / 或。当选择两个条件时,累加器必须是同一个。 例如:可以同时选择 AGT 和 AOV ,但不能 AGT 和 BOV 。

evelia
Download Presentation

第五章 汇编语言程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第五章 汇编语言程序设计 第一节 程序的控制与转移 C54X具有丰富的程序控制与转移指令,利用这些指令可以执行分支转移、循环控制以及子程序操作。

  2. 1、条件算符 条件分支转移指令或条件调用、条件返回指令都用条件来限制操作。条件算符分成两组,每组又分为两类或三类:

  3. 选用条件算符时应注意以下几点: • 第一组:组内两类条件可以与/或,但不能在组内同一类中选择两个条件算符与/或。当选择两个条件时,累加器必须是同一个。 例如:可以同时选择AGT和AOV,但不能AGT和BOV。 • 第二组:可以组内3类算符中个选一个条件算符与/或,但不能在组内同一类中选择2个条件算符与/或。如:可以TC、C、BIO,不可NTC、TC • 组与组之间的条件只能“或”。

  4. 如: 条件返回:RC TC ;若TC=1,则返回。 条件调用:CC sub ,BNEQ ;B=1调。 条件转移:BC new,AGT,AOV ; ;A>0且溢出转 若要“或”,则: BC new,AGT BC new,AOV

  5. 二、循环操作 BANZ;当辅助寄存器不为0时转移;如: • 计算五项累加。 .bss x,5 .bss y,1 STM #x,AR1 STM #4,AR2 LD #0,A Loop: ADD *AR1+,A BANZ loop,*AR2- STL A,@y

  6. 三、比较操作CMPR 经常用到数据之间的比较,利用CMPR:

  7. 第二节 堆栈的使用 C54X提供了一个用16位堆栈指针SP寻址的软件堆栈。当向堆栈中压入数据时,堆栈从高地址向低地址增长。堆栈指针是减在前,加在后,即先SP-1,再压入数据,先弹出数据,后SP+1。 1、若程序中要用到堆栈,必须先进行设置: Size .set 100 Stack .usect “STACK”,size STM #Stack+size , sp

  8. 2、设置堆栈后,就可以使用堆栈了: CALL pmad ;(sp)-1->sp, (pc)+2->TOS ;pmad->pc RET ;(TOS)->PC, (SP)+1->SP

  9. 第三节 加、减法与乘法运算 计算: z=x+y-w .title “example.asm” .mmregs STACK: .usect “STACK”, 10H .bss x , 1 ;add =0060H .bss y, 1 .bss w, 1 .bss z , 1 .def start .data Table: .word 10 , 26 , 23 .text

  10. Start: STM #0,SWWSR STM #STACK+10H,SP STM #X,AR1 RPT #2 MVPD table,*AR1+ CALL SUMB end: B end SUMB: LD @X,A ADD @Y,A SUB @W,A STL A,@Z RET .end

  11. 例:在4项乘积aixi中找出最大值。 .title “example.asm” .mmregs STACK: .usect “STACK”, 10H .bss a , 4 ;add =0060H .bss x, 4 .bss y, 1 .def start .data Table: .word 1 , 5 , 3, 4 .word 8 , 6 , 7, 2 .text

  12. Start: STM #0,SWWSR STM #STACK+10H,SP STM #a,AR1 RPT #7 MVPD table,*AR1+ CALL MAX end: B end MAX: STM #a, AR1 STM #x, AR2 STM #2, AR3 LD *AR1+, T MPY *AR2+ , A Loop: LD *AR1+ , T MPY *AR2+, B MAX A BANZ loop, *AR3- RET .end

  13. 舍入

  14. 直接寻址

  15. 第四节 重复操作 重复操作指令: PRT(重复下条指令); RPTZ(累加器清零并重复下条指令); RPTB(块重复指令)。 一、重复执行单条指令 由于只需取指一次,比循环效率高。特别是对那些乘法累加和数据传送的多周期指令(如:MAC、MVDK、MVDP、MVPD等指令),在执行一次后就变成了单周期指令,大大提高了运行速度。

  16. 重复计数器

  17. 例、对一个数组进行初始化:X[5]={0,0,0,0,0}例、对一个数组进行初始化:X[5]={0,0,0,0,0} .bss x,5 STM #x,AR1 LD #0H,A RPT #4 STL A,*AR1+ 或: .bss x,5 STM #X,AR1 RPTZ #4 STL A,*AR1+ 注意: 在执行重复操作期间,CPU是不响应中断的(RS除外);当响应 HOLD信号时,若HM=0,CPU继续执行重复操作;若HM=1,则暂 停重复操作。

  18. 二、块程序重复操作 RPTB指令的特点: 对任意长度的程序段的循环开销为零,其本身是一条2字4周期 指令;循环开始地址(RSA)是RPTB指令的下一行,结束地址 (REA)由RPTB指令的操作数规定。 因而,使用时必须先用STM指令将所规定的迭代次数加载到块 重复计数器(BRC)中。 例、对数组x[5]中的每个元素加1。 .bss x,5 Start: LD #1,16,B STM #4,BRC STM #x,AR4 RPTB next-1 ADD *AR4,16,B,A STH A,*AR4+ Next: LD #0,B ….

  19. 注意: 1、循环的结束地址; 2、RPTB指令是可以响应中断的,与RPT,RPTZ不同。 ST1中的块循环有效标志

  20. 3、循环的嵌套 执行RPT指令时用到RPTC寄存器(重复计数器);执行 RPTB指令时用到BRC,RSA和REA寄存器。由于两者使用了不同 的寄存器,因此二者可以嵌套。当然,只要保存好有关寄存器, RPTB和RPTB也可嵌套,但效率不高。 Lst: STM #L-1, AR7 ;2T 外部 ;开销为4L+2T STM #M-1, BRC ;2T RPTB abc-1 ;4T 中间 ;开销为6T 中间 RPT #N-1 ;1T开销为1T 内部 中间 中间 Abc: 外部 外部 BANZ lst , *AR7- ; 4T

  21. 第五节 数据块传送 C54X有10条数据传送指令: 数据存储器~数据存储器: MVDK smem, dmad MVKD dmad, smem MVDD xmem, ymem 程序存储器~数据存储器: MVPD pmad, smem MVDP smem, pmad 数据存储器~MMR: MVDM dmad, MMR MVMD MMR, dmad MVMM mmr, mmr 程序存储器~数据存储器: READA smem WRITA smem

  22. 这些指令的特点: • 传送速度比加载和存储指令要快; • 传送数据不需要通过累加器; • 可以寻址程序存储器; • 与RPT指令相结合,可以实现数据块传送。

  23. 一、程序存储器~数据存储器 例、数组X[5]={1,2,3,4,5}初始化。 .title “example.asm” .mmregs STACK .usect “STACK”,10H .bss x, 5 .data Table .word 1,2,3,4,5 .def start .text Start: STM #x, AR1 RPT #4 MVPD table,*AR1+ End: B end .end

  24. 二、数据存储器~数据存储器 • 例、将数据存储器中的数组x[20]复制到数组y[20]。 .title “example.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 .word 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

  25. vectors.obj shiyan1.obj -o shiyan1.out -m shiyan1.map -e start MEMORY { PAGE0: EPROM: org=0E000H, len=0100h VECS: org=0FF80H, len=0004H PAGE1: SPRAM: org=0060h, len = 0010H DARAM:org=0080H, len=0100H } SECTIONS: { .text :> EPROM PAGE0 .data :>EPROM PAGE0 .bss :>SPRAM PAGE1 STACK:>DARAM PAGE1 .vectors:>VECS PAGE0 }

  26. 第六节 双操作数乘法 TMS320C54X片内的多总线结构,允许在一个机器 周期内通过两个16位数据总线寻址两个数据和系数。 例、求y=mx+b(利用单操作数和双操作数两种方法)。 LD @m, T MPY *AR2,*AR3,A MPY @x, A ADD @b, A ADD @b, A STL A, @y STL A, @y 用双操作数指令编程的特点: • 用间接寻址方式获得操作数,且辅助寄存器为AR2~AR5; • 占用的程序空间小; • 运行速度快。

  27. 注: • 双操作数指令有四种: MPY Xmem , Ymem ,dst ;dst=Xmem*Ymem MAC Xmem, Ymem ,src[,dst] MAS Xmem, Ymem, src[,dst] MACP Smem, Pmad ,src[,dst] ** Smem数据存储器地址; Xmem , Ymem双操作数数据 存储器地址; Pmad为16位立即数程序存储器地址。 • 对Xmem , Ymem,只能用以下辅助存储器及寻址方式: 辅助寄存器:AR2 寻址方式:*ARn AR3 *ARn+ AR4 *ARn- AR5 *ARn+0%

More Related