《第5章 汇编程序设计精选文档.ppt》由会员分享,可在线阅读,更多相关《第5章 汇编程序设计精选文档.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章 汇编程序设计本讲稿第一页,共十四页主要内容主要内容1 加法、减法和乘法运算加法、减法和乘法运算2 数据块传送数据块传送3 双操作数乘法双操作数乘法4 长字运算长字运算5 64位加法和减法运算位加法和减法运算本讲稿第二页,共十四页例例 编写求解加、减法的程序,计算编写求解加、减法的程序,计算z=x+y-wz=x+y-w。SUM1SUM1:LD x,A LD x,A ;将;将x x地址的内容送地址的内容送A A ADD y,AADD y,A ;将;将y y地址的内容与地址的内容与A A中中x x值相加值相加 SUB w,ASUB w,A ;将;将A A中的内容与中的内容与w w 相减,得相
2、减,得z z STL A,z STL A,z ;将;将A A的的计算值存入的的计算值存入z z 地址中地址中例例 写求解直线方程的程序,计算写求解直线方程的程序,计算y=mx+by=mx+b。SUM2SUM2:LD m,T LD m,T ;将;将m m 地址的内容送地址的内容送T T MPY x,AMPY x,A ;将;将x x 地址的内容与地址的内容与T T中的中的m m相乘,相乘,;结果送;结果送A A ADD b,AADD b,A ;将;将A A中的中的mxmx与与b b 地址的内容相加,地址的内容相加,;结果送;结果送A A STL A,y STL A,y ;将;将A A的的计算结果存
3、入的的计算结果存入y y 地址中地址中1 加法、减法和乘法运算加法、减法和乘法运算本讲稿第三页,共十四页传送速度比加载和存储指令要快;传送速度比加载和存储指令要快;传送数据不需要通过累加器;传送数据不需要通过累加器;可以寻址程序存储器;可以寻址程序存储器;与与RPTRPT指指令令相相结结合合(重重复复时时,这这些些指指令令都都变变成成单单周周期期指指令令),可可以以实实现现数数据据块块传传送。送。特特点点2 数据块传送数据块传送本讲稿第四页,共十四页例例 将数组将数组x5 x5 初始化为初始化为1,2,3,4,51,2,3,4,5。.data .data ;定义初始化数据段起始地址;定义初始化
4、数据段起始地址TBL:.word 1,2,3,4,5 TBL:.word 1,2,3,4,5 ;为标号地址;为标号地址TBLTBL ;开始的;开始的5 5个单元赋初值个单元赋初值 .sect .sect “.vectors.vectors”;定义自定义段,并获;定义自定义段,并获 ;得该段起始地址;得该段起始地址 B STARTB START;无条件转移到标号为;无条件转移到标号为STARTSTART的地址的地址 .bss x,5 .bss x,5 ;为数组;为数组x x分配分配5 5个存储单元个存储单元 .text .text ;定义代码段起始地址;定义代码段起始地址START:STM#x,
5、AR5 START:STM#x,AR5 ;将;将x x的首地址存入的首地址存入AR5AR5 RPT#4 RPT#4 ;设置重复执行;设置重复执行5 5次下条指令次下条指令 MVPD TBL,*AR5+MVPD TBL,*AR5+;将;将TBLTBL开始的开始的5 5个值传给个值传给x x.end.end2 数据块传送:程序存储器数据块传送:程序存储器-数据存储器数据存储器本讲稿第五页,共十四页例例 将数据存储器中的数组将数据存储器中的数组x10 x10复制到数组复制到数组y10y10。.title .title “send.asmsend.asm”;为汇编源程序取名;为汇编源程序取名 .mmr
6、egs .mmregs ;定义存储器映象寄存器;定义存储器映象寄存器STACK.usect STACK.usect “STACKSTACK”,30H,30H;设置堆栈;设置堆栈 .bss x,10 .bss x,10 ;为数组;为数组x x分配分配1010个存储单元个存储单元 .bss y,10 .bss y,10 ;为数组;为数组y y分配分配1010个存储单元个存储单元 .data.datatable:.word 1,2,3,4,5,6,7,8,9,10table:.word 1,2,3,4,5,6,7,8,9,10 .def start .def start ;定义标号;定义标号star
7、tstart .text .text2 数据块传送:数据存储器数据块传送:数据存储器-数据存储器数据存储器本讲稿第六页,共十四页start:STM#0,SWWSR start:STM#0,SWWSR ;复位;复位SWWSRSWWSR STM#STACK+30H,SP STM#STACK+30H,SP;初始化堆指针;初始化堆指针 STM#x,AR1 STM#x,AR1;将目的地首地址赋给;将目的地首地址赋给AR1AR1 RPT#9 RPT#9 ;设定重复传送的次数为;设定重复传送的次数为1010次次 MVPD table,*AR1+MVPD table,*AR1+;程序存储器传送到数;程序存储器
8、传送到数 ;据存储器;据存储器 STM#x,AR2 STM#x,AR2;将;将x x的首地址存入的首地址存入AR2AR2 STM#y,AR3 STM#y,AR3;将;将y y的首地址存入的首地址存入AR3AR3 RPT#9 RPT#9 ;设置重复执行;设置重复执行1010次下条指令次下条指令 MVDD *AR2+,*AR3+MVDD *AR2+,*AR3+;将地址;将地址x x开始的开始的1010个值个值 ;复制到地址;复制到地址y y开始的开始的1010个单元个单元end:B endend:B end .end .end2 数据块传送:数据存储器数据块传送:数据存储器-数据存储器数据存储器本
9、讲稿第七页,共十四页用用间间接接寻寻址址方方式式获获得得操操作作数数,且且辅辅助寄存器只用助寄存器只用AR2AR2AR5AR5;占用程序空占用程序空间间小;小;运行速度快。运行速度快。特特点点例例 编制求解编制求解 的程序。的程序。利利用用双双操操作作数数指指令令可可以以节节省省机机器器周周期期。迭迭代代次次数数越越多多,节节省省的的机机器器周周期期数数也也越越多多。本本例例中中,在在每每次次循循环环中中,双双操操作作数数指指令令都都比比单单操操作作数数指指令令少少用用一一个个周周期期,节节省省的的总总机机器器周周期期数数=1T*N=1T*N(迭代次数)(迭代次数)=NT=NT。3 双操作数乘
10、法双操作数乘法本讲稿第八页,共十四页 单操作数指令方案单操作数指令方案 双操作数指令方案双操作数指令方案 LD#0,B LD#0,B LD#0,B LD#0,B STM#a,AR2 STM#a,AR2 STM#a,AR2 STM#a,AR2 STM#x,AR3 STM#x,AR3 STM#x,AR3 STM#x,AR3 STM#19,BRC STM#19,BRC STM#19,BRCSTM#19,BRC RPTB done-1 RPTB done-1 RPTB done-1 RPTB done-1 LDLD *AR2+,TAR2+,T;1T 1T MPY *AR2+,*AR3+,AMPY *A
11、R2+,*AR3+,A;1T1T MPYMPY*AR3+,AAR3+,A;1T1T ADD A,B ADD A,B;1T1T ADD A,B ADD A,B ;1T1Tdone:STH B,y done:STH B,y done:STH B,y done:STH B,y STL B,y+1 STL B,y+1 STL B,y+1STL B,y+1本讲稿第九页,共十四页在在单单个个周周期期内内同同时时利利用用C C总总线线和和D D总总线线,得到得到3232位操作数。位操作数。特特点点使使用用长长操操作作数数指指令令时时,按按指指令令中中给给出出的的地地址址存存取取的的总总是是高高1616位操作
12、数。这样,有两种数据排列方法:位操作数。这样,有两种数据排列方法:(1 1)偶偶地地址址排排列列法法 指指令令中中给给出出的的地地址址为为偶偶地地址址,存存储储器器中低地址存放高中低地址存放高1616位操作数。位操作数。如:如:DLD *AR3+,ADLD *AR3+,A执行前:执行前:A=00 0000 0000 A=00 0000 0000 执行后:执行后:A=00 6CAC BD90A=00 6CAC BD90 AR3=0100 AR3=0102 AR3=0100 AR3=0102 (0100h0100h)=6CAC=6CAC(高字)(高字)(0100h0100h)=6CAC=6CAC
13、(0101h0101h)=BD90=BD90(低字)(低字)(0101h0101h)=BD90=BD904 长字运算长字运算本讲稿第十页,共十四页(2 2)奇奇地地址址排排列列法法 指指令令中中给给出出的的地地址址为为奇奇地地址址,存存储储器器中中低低地地址址存放低存放低1616位操作数。位操作数。如:如:DLD *AR3+,ADLD *AR3+,A执行前:执行前:A=00 0000 0000 A=00 0000 0000 执行后:执行后:A=00 BD90 6CACA=00 BD90 6CAC AR3=0101 AR3=0103 AR3=0101 AR3=0103 (0100h0100h)=
14、6CAC=6CAC(低字)(低字)(0100h0100h)=6CAC=6CAC (0101h0101h)=BD90=BD90(高字)(高字)(0101h0101h)=BD90=BD90推推 荐荐 采采 用用 偶偶 地地 址址 排排 列列 法法,将将 高高1616位位 操操 作作 数数 放放 在在 偶偶 地地 址址 存存 储储 单单 元元 中中。如如:程序存储器程序存储器 .long 12345678 h .long 12345678 h ;偶地址:;偶地址:12341234 ;奇地址:;奇地址:56785678 数据存储器数据存储器 .bss xhi,2,1,1 .bss xhi,2,1,1
15、;偶地址:;偶地址:xhi xhi ;奇地址:;奇地址:xloxlo 变量名称变量名称 字长字长 页邻接页邻接 偶地址排列法偶地址排列法 本讲稿第十一页,共十四页例例 计算计算Z Z3232=X=X3232+Y+Y3232。标准运算标准运算 长字运算长字运算 LD xhi,16,A DLD xhi,ALD xhi,16,A DLD xhi,A ADDS xlo,AADDS xlo,A DADD yhi,ADADD yhi,A ADD yhi,16,AADD yhi,16,A DST A,zhi DST A,zhi ADDS ylo,AADDS ylo,A (3 3个字,个字,3 3个个T T)
16、STH A,Zhi STH A,Zhi STL A,Zlo STL A,Zlo(6 6个字,个字,6 6个个T T)本讲稿第十二页,共十四页例例 编写计算编写计算Z Z6464=W=W6464+X+X6464-Y-Y6464的程序段。的程序段。这这里里的的W W、X X、Y Y和和结结果果Z Z都都是是6464位位数数,它它们们都都由由两两个个3232位位的的长长字字组成。利用长字指令可以完成组成。利用长字指令可以完成6464位数的加位数的加/减法。减法。w w3 3 w w2 2 w w1 1 w w0 0 (W W6464)+x+x3 3 x x2 2 C x C x1 1 x x0 0
17、(X X6464)低低3232位相加产生进位位相加产生进位C C-y-y3 3 y y2 2 C C y y1 1 y y0 0 (Y Y6464)低低3232位相减产生借位位相减产生借位C C_ z z3 3 z z2 2 z z1 1 z z0 0 (Z Z6464)5 64位加法和减法运算位加法和减法运算本讲稿第十三页,共十四页DLD w1,A DLD w1,A ;A=wA=w1 1w w0 0DADD x1,A DADD x1,A ;A=wA=w1 1w w0 0+x+x1 1x x0 0,产生进位产生进位C CDLD w3,B DLD w3,B ;B=wB=w3 3w w2 2ADD
18、C x2,B ADDC x2,B ;B=wB=w3 3w w2 2+x+x2 2+C+CADD x3,16,B ADD x3,16,B ;B=wB=w3 3w w2 2+x+x3 3x x2 2+C+CDSUB y1,A DSUB y1,A ;A=wA=w1 1w w0 0+x+x1 1x x0 0-y-y1 1y y0 0,产生借位产生借位C CDST A,z1 DST A,z1 ;z z1 1z z0 0=w=w1 1w w0 0+x+x1 1x x0 0-y-y1 1y y0 0SUBB y2,B SUBB y2,B ;B=wB=w3 3w w2 2+x+x3 3x x2 2+C-y+C-y2 2-C-CSUB y3,16,B SUB y3,16,B ;B=wB=w3 3w w2 2+x+x3 3x x2 2+C-y+C-y3 3y y2 2-C-CDST B,z3 DST B,z3 ;z z3 3z z2 2=w=w3 3w w2 2+x+x3 3x x2 2+C-y+C-y3 3y y2 2-C-C由于没有长字带进(借)位加由于没有长字带进(借)位加/减法指令,所以上述程序中只能用减法指令,所以上述程序中只能用1616位带进(借)位指令位带进(借)位指令ADDCADDC和和SUBBSUBB。本讲稿第十四页,共十四页