资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
第11页 / 共30页
第12页 / 共30页
第13页 / 共30页
第14页 / 共30页
第15页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,20:49:05,#,湖南理工学院 胡文静 博士,09:38:11,1,概述,汇编语言源程序格式:,助记符指令一般包含,4,个部分,其一般组成形式为:,标号,:,助记符,操作数,;注释,书写格式规则详见,P138,!,标号,所有汇编指令和大多数汇编伪指令前面都可以带有标号;必须从第一列开始书写;最多,32,个字符;由字母、数字、下划线和,$,组成,且不能以数字开头;分大小写;冒号不属于标号名;没有标号的源语句第一列必须为空格、星号或分号。,助记符,不能从第一列开始,否则被认为是标号;指令助记符一般用大写;汇编伪指令一般为小写,且以“,.”,开头。,操作数,操作数列表,可以是常数、符号或常数与符号构成的表达式。操作数间需用“,”号隔开;三种前缀形式:,#,*,。,09:38:11,2,数据类型,举例,二进制,10011000B,01111010b,(最多,16,位),八进制,226q,1001Q,0124,(多达,6,位),十进制,略,十六进制,0DH,123H,0X89,0 x0D,(多达,4,位),浮点数,1.786e9,(浮点数仅在,C,语言使用),字符常数,a,b,字符串,“example”,常数与字符串,09:38:11,3,类型,含义,标号,符号地址,(,可作为,.,global,.,ref,.,def,的操作数,),局部标号,$n,name?,(临时性的标号,.newblock,.sect,.text,.data,.include,.copy,取消),符号常数,.set,.struct/.tag/.endstruct,(提高可读性),预定义符号常数,$,寄存器符号,其他,替代符号,符号替代变量,.asg“high”,AR2,(可重新定义),标号,09:38:11,4,举例,09:38:11,5,序号,符 号,运算操作,求值顺序,1,+-,!,取正、取负、按位求补、逻辑负,从右至左,2,*/%,乘法、除法、求模,从左至右,3,+-,加法、减法,从左至右,4,指数,从左到右,5,左移、右移,从左至右,6,=,大于、大于等于,从左至右,8,!=,不等于、等于,从左至右,9,&,按位与运算,从左至右,10,按位异或运算,从左至右,11,|,按位或运算,从左至右,汇编语言表达式,09:38:11,6,有效定义表达式:,09:38:11,7,有效定义表达式,09:38:11,8,堆栈操作,09:38:11,9,分 类,指 令,说 明,无条件,分支转移,BD,用该指令指定的地址加载,PC,BACCD,用累加器的低,16,位指定的地址加载,PC,条件,分支转移,BCD,若满足指令给定条件,用该指令指定的地址加载,PC,BANGD,若当前选择辅助寄存器不等于,0,,用该指令指定的地址加载,PC,远程,分支转移,FBD,用该指令指定的地址加载,PC,和,XPC,FBACCD,用累加器的低,23,位指定的地址加载,PC,和,XPC,控制程序,09:38:11,10,分 类,指 令,说 明,无条件,调用,CALLD,将返回的地址压入堆栈,并用该指令指定的地址加载,PC,CALAD,将返回的地址压入堆栈,用累加器,A,或,B,指定的地址加载,PC,条件,调用,CCD,如果满足指令给定条件,将返回的地址压入堆栈,并用该,指令指定的地址加载,PC,远程,调用,FCALL D,将,XPC,和,PC,压入堆栈,并用该指令指定的地址加载,PC,和,XPC,FCALA D,将,XPC,和,PC,压入堆栈,用累加器的低,23,位指定的地址加载,PC,和,XPC,分支操作,09:38:11,11,分 类,指 令,说 明,无条件,返回,RETD,将堆栈顶部的返回地址加载到,PC,。,RETED,将堆栈顶部的返回地址加载到,PC,,并使能可屏蔽中断。,RETFD,将,RTN,寄存器中的返回地址加载到,PC,,并使能可屏蔽中断。,条件,返回,RCD,如果满足指令给定条件,将堆栈顶部的返回地址加载到,PC,。,远程,返回,FCALL D,将堆栈顶部的值弹出加载到,XPC,,,将堆栈中下一个值弹出加载到,PC,。,FCALA D,将堆栈顶部的值弹出加载到,XPC,,,将堆栈中下一个值弹出加载到,PC,,并使能可屏蔽中断。,分支操作,09:38:11,12,操作符号,条 件,说 明,操作符号,条 件,说 明,AEQ,A=0,累加器,A,等于,0,AOV,AOV=1,累加器,A,溢出,BEQ,B=0,累加器,B,等于,0,BOV,BOV=1,累加器,B,溢出,ANEQ,A,0,累加器,A,不等于,0,ANOV,AOV=0,累加器,A,不溢出,BNEQ,B,0,累加器,B,不等于,0,BNOV,BOV=0,累加器,B,不溢出,ALT,A0,累加器,A,小于,0,C,C=1,ALU,进位位置,1,BLT,B0,累加器,A,大于,0,BIO,BIO,低,BIO,信号电平为低,BGT,B0,累加器,B,大于,0,NBIO,BIO,高,BIO,信号电平为高,AGEQ,A,0,累加器,A,大于等于,0,UNC,无,无条件操作,BGEQ,B,0,累加器,B,大于等于,0,分支操作,09:38:11,13,循环操作,.title Ex534.asm,.mmregs,stack.usectSTACK,10h,.bssx,10,.bssy,1,table:,.word1,2,3,4,5,6,7,8,9,10,.defstart,start:,STM#0,SWWSR,STM#stack+10h,SP,CALLinit,STM#x,AR1,STM#9,AR2,LD#0,A,loop:,ADD*AR1+,A,BANZloop,*AR2-,STLA,y,B$,init:,STM#x,AR1,RPT#9,MVPDtable,*AR1+,RET,.end,09:38:11,14,算术运算程序,09:38:11,15,加法,/,减法,指定堆栈空间,为变量预留空间,初值序列,初始化变量,设置堆栈指针,利用,MAC,和,RPT,求乘累加和,09:38:11,16,算术运算,09:38:11,17,09:38:11,18,重复操作程序,09:38:11,19,块重复操作,09:38:11,20,数据块传送程序,09:38:11,21,数据块传送程序,09:38:11,22,小数运算程序,定点,DSP,的小数表示法,基于,2,的,补码,形式;,数的,定标,有,Q,法和,S,法;,C54X,为,16,位:,1,位符号位,,Q,个小数位和,15-Q,个整数位。,16,位定点,Q,法和,S,法的表数范围,Q,法,S,法,表数范围,Q15,S0.15,-1x0.9999695,Q14,S1.14,-2 x 1.9999390,Q13,S2.13,-4 x 3.9998779,Q12,S3.12,-8 x 7.9997559,Q11,S4.11,-16 x 15.9995117,Q10,S5.10,-32 x 31.9990124,Q9,S6.9,-64 x 63.9980469,Q8,S7.8,-128 x 127.9960938,Q7,S8.7,-256 x 255.9921875,Q6,S9.6,-512 x 511.984375,Q5,S10.5,-1024 x 1023.96875,Q4,S11.4,-2048 x 2047.9375,Q3,S12.3,-4096 x 4095.875,Q2,S13.2,-8192 x 8191.75,Q1,S14.1,-16384 x 16383.5,Q0,S15.0,-32768 x 32767,09:38:11,23,小数运算程序,定点,DSP,的小数表示法,基于,2,的,补码,形式;,数的,定标,有,Q,法和,S,法;,C54X,为,16,位:,1,位符号位,,Q,个小数位和,15-Q,个整数位。,十进制小数的,2,的补码表示,正数:乘以,32768,;,负数:绝对值乘,32768,,再取反加,1,。,0.5,乘以,32768,4000H,-0.5,4000H,乘以,32768,绝对值部分,-1,8000H,乘以,32768,绝对值部分,C000H,取反加,1,8000H,取反加,1,09:38:11,24,小数乘法,设字长为,4,位,(,累加器为,8,位,),,有如下小数乘法:,0.625-0.125,0101,1000,(0.625),(-0.125),0000,0000,0000,1101,(-0101),1101000,(-0.078125),乘积结果为,7,位,送入累加器;为保持乘积的符号不变,必须进行符号位扩展;因而,经过符号扩展后累加器内容为,8,位:,1,1101000,(-0.1865),出现了冗余的符号位,(,两个符号位,),!怎么办?,ST1,的,FRCT,小数方式控制位,可以控制乘积结果在送往累加器前是否自动左移,1,位!如,FRCT=1,,则可自动消去两个符号位中冗余的一个。,1,1101000,符号位扩展,FRCT=1,时,1101000,0,0.078125,09:38:11,25,【,例,5.7.1】,求 ,数据全为小数,a,1,=0.3,a,2,=0.2,a,3,=-0.4,a,4,=0.1,x,1,=0.6,x,2,=0.5,x,3,=-0.1,x,4,=-0.2,分析,存储空间要求?,采用何种指令?,小数如何表示?,冗余符号位的消去:,需预留,9,个存储单元;,典型的乘,-,累加运算:,MAC,与,RPT,指令结合,0.3=,3*32768/10,SSBXFRCT,09:38:11,26,实现源代码,.,title,Ex_571.asm,.,mmregs,stack,.,usect,STACK,10H,.,bss,a,4,.,bss,x,4,.,bss,y,1,.,def,start,.,data,table:,.,word,3*32768/10,2*32768/10,-4*32768/10,1*32768/10,.,word,6*32768/10,5*32768/10,-1*32768/10,-2*32768/10,.,text,start:,SSBXFRCT,STM#a,AR1,RPT#7,MVPDtable,*AR1+,STM#a,AR3,STM#x,AR4,RPTZA,#3,MAC*AR3+,*AR4+,A,;,只能最多用到,AR5,,教材代码有误,STHA,y,done:Bdone,.,end,09:38:11,27,浮点运算,浮点数的表示,包含,尾数,和,指数,两部分,如,:,定点数,0 x2000(0.25),用浮点数表示时,尾数为,0 x4000(0.5),,指数为,1,,即,0.52,-1,;,尾数和指数都可正可负:尾数符号表示浮点数的正负,指数的符号表示浮点数的绝对值大小。,定点数转换成浮点数,Step1:EXP A,Step2:ST T,EXPONENT,Step3:NORM A,定点数,=,尾数,2,-,指数,09:38:11,28,浮点运算,浮点数转换为定点数,将尾数按指数值进行左移(指数为负)或右移(指数为正),浮点运算举例,编写浮点运算程序,完成,x1*x2=0.4*(-0.9),。,分析:,首先确定需要分配的存储单元,确定需要用到的关键指令,流程图,09:38:11,29,浮点运算实现代码,.,title,Ex_581.asm,.,mmregs,stack,.,usect,STACK,100H,.,bss,a,2,.,bss,b,2,.,bss,c,2,.,bss,ep,1,.,bss,mp,1,.,bss,product,1,.,bss,temp,1,.,def,start,.,data,table,:.,word,4*32768/10,-9*32768/10,.,text,start,:,STM#
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6