1、第六章第六章 汇编语言程序设计汇编语言程序设计主讲:胡文静主讲:胡文静 博士博士湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:112概述p汇编语言源程序格式:汇编语言源程序格式:u助记符指令一般包含助记符指令一般包含4个部分,其一般组成形式为:个部分,其一般组成形式为:标号标号: 助记符助记符 操作数操作数 ;注释;注释 u书写格式规则详见书写格式规则详见P138,!u标号标号所有汇编指令和大多数汇编伪指令前面都可以带有所有汇编指令和大多数汇编伪指令前面都可以带有标号;必须从第一列开始书写;最多标号;必须从第一列开始书写;最多32个字符;由字母、个字符;由字母、数字、下划线和数字、
2、下划线和$组成,且不能以数字开头;分大小写;冒组成,且不能以数字开头;分大小写;冒号不属于标号名;没有标号的源语句第一列必须为空格、号不属于标号名;没有标号的源语句第一列必须为空格、星号或分号。星号或分号。u助记符助记符不能从第一列开始,否则被认为是标号;指令助不能从第一列开始,否则被认为是标号;指令助记符一般用大写;汇编伪指令一般为小写,且以记符一般用大写;汇编伪指令一般为小写,且以“.”开头。开头。u操作数操作数操作数列表,可以是常数、符号或常数与符号构操作数列表,可以是常数、符号或常数与符号构成的表达式。操作数间需用成的表达式。操作数间需用“,”号隔开;三种前缀形式:号隔开;三种前缀形式
3、:#, *, 。湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:113数据类型数据类型举例举例二进制二进制10011000B,01111010b(最多(最多16位)位)八进制八进制226q,1001Q,0124(多达(多达6位)位)十进制十进制略略十六进制十六进制0DH,123H,0X89,0 x0D(多达(多达4位)位)浮点数浮点数1.786e9(浮点数仅在(浮点数仅在C语言使用)语言使用)字符常数字符常数a,b字符串字符串“example”常数与字符串湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:114类型类型含义含义标号标号符号地址符号地址( (可作为可作为. .g
4、lobalglobal,. ,.refref,. ,.defdef的操作数的操作数) )局部标号局部标号$n, name? $n, name? (临时性的标(临时性的标号号,.newblock,.sect,.text,.data,.include,.copy,.newblock,.sect,.text,.data,.include,.copy取消)取消)符号常数符号常数.set, .struct/.tag/.endstruct .set, .struct/.tag/.endstruct (提高可读性)(提高可读性)预定义符号常数预定义符号常数$, $, 寄存器符号寄存器符号, , 其他其他替代
5、符号替代符号符号替代变量符号替代变量, .asg “high”, AR2, .asg “high”, AR2(可重新定义)(可重新定义)标号湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:115举例湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:126序号序号符符 号号运算操作运算操作求值顺序求值顺序1 1+ - + - !取正、取负、按位求补、逻辑负取正、取负、按位求补、逻辑负 从右至左从右至左2 2* * / % / %乘法、除法、求模乘法、除法、求模从左至右从左至右3 3+ -+ -加法、减法加法、减法从左至右从左至右4 4 指数指数 从左到右从左到右 5 5左移、右
6、移左移、右移从左至右从左至右6 6 = = =大于、大于等于大于、大于等于从左至右从左至右8 8!= =!= =不等于、等于不等于、等于 从左至右从左至右9 9& &按位与运算按位与运算从左至右从左至右1010 按位异或运算按位异或运算从左至右从左至右1111| |按位或运算按位或运算从左至右从左至右汇编语言表达式湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:127有效定义表达式:湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:138有效定义表达式湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:139堆栈操作湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:3
7、4:1410分分 类类 指指 令令 说说 明明 无条件无条件分支转移分支转移 BD 用该指令指定的地址加载用该指令指定的地址加载PC PC BACCD 用累加器的低用累加器的低1616位指定的地址加载位指定的地址加载PC PC 条件条件分支转移分支转移 BCD 若满足指令给定条件,用该指令指定的地址加载若满足指令给定条件,用该指令指定的地址加载PC PC BANGD 若当前选择辅助寄存器不等于若当前选择辅助寄存器不等于0 0,用该指令指定的地址加载,用该指令指定的地址加载PC PC 远程远程分支转移分支转移 FBD 用该指令指定的地址加载用该指令指定的地址加载PCPC和和XPC XPC FBA
8、CCD 用累加器的低用累加器的低2323位指定的地址加载位指定的地址加载PCPC和和XPC XPC 控制程序湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1411分分 类类 指指 令令 说说 明明 无条件无条件调用调用 CALLD 将返回的地址压入堆栈,并用该指令指定的地址加载将返回的地址压入堆栈,并用该指令指定的地址加载PC CALAD 将返回的地址压入堆栈,用累加器将返回的地址压入堆栈,用累加器A或或B指定的地址加载指定的地址加载PC 条件条件调用调用 CCD 如果满足指令给定条件,将返回的地址压入堆栈,并用该如果满足指令给定条件,将返回的地址压入堆栈,并用该 指令指定的地址加
9、载指令指定的地址加载PC远程远程调用调用 FCALL D 将将XPC和和PC压入堆栈,并用该指令指定的地址加载压入堆栈,并用该指令指定的地址加载PC和和XPC FCALA D 将将XPC和和PC压入堆栈,用累加器的低压入堆栈,用累加器的低23位指定的地址加载位指定的地址加载 PC和和XPC 分支操作湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1412分分 类类 指指 令令 说说 明明 无条件无条件返回返回 RETD 将堆栈顶部的返回地址加载到将堆栈顶部的返回地址加载到PC。 RETED 将堆栈顶部的返回地址加载到将堆栈顶部的返回地址加载到PC,并使能可屏蔽中断。,并使能可屏蔽中断
10、。 RETFD 将将RTN寄存器中的返回地址加载到寄存器中的返回地址加载到PC,并使能可屏蔽中断。,并使能可屏蔽中断。 条件条件返回返回 RCD 如果满足指令给定条件,将堆栈顶部的返回地址加载到如果满足指令给定条件,将堆栈顶部的返回地址加载到PC。 远程远程返回返回 FCALL D 将堆栈顶部的值弹出加载到将堆栈顶部的值弹出加载到XPC, 将堆栈中下一个值弹出加载到将堆栈中下一个值弹出加载到PC。 FCALA D 将堆栈顶部的值弹出加载到将堆栈顶部的值弹出加载到XPC, 将堆栈中下一个值弹出加载到将堆栈中下一个值弹出加载到PC,并使能可屏蔽中断。,并使能可屏蔽中断。 分支操作湖南理工学院湖南理
11、工学院 胡文静胡文静 博士博士2:34:1413操作符号操作符号条条 件件说说 明明操作符号操作符号条条 件件说说 明明AEQA=0累加器累加器A等于等于0 AOVAOV=1累加器累加器A溢出溢出 BEQB=0累加器累加器B等于等于0 BOVBOV=1累加器累加器B溢出溢出 ANEQA 0累加器累加器A不等于不等于0 ANOVAOV=0累加器累加器A不溢出不溢出 BNEQB 0累加器累加器B不等于不等于0 BNOVBOV=0累加器累加器B不溢出不溢出 ALTA0累加器累加器A小于小于0 CC=1ALU进位位置进位位置1 BLTB0累加器累加器A大于大于0 BIOBIO低低BIO信号电平为低信号
12、电平为低 BGTB0累加器累加器B大于大于0 NBIOBIO高高BIO信号电平为高信号电平为高 AGEQA 0累加器累加器A大于等于大于等于0 UNC无无无条件操作无条件操作 BGEQB 0累加器累加器B大于等于大于等于0 分支操作湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1514循环操作.title Ex534.asm.mmregsstack.usectSTACK, 10h.bssx, 10.bssy,1table:.word1,2,3,4,5,6,7,8,9,10.defstartstart:STM#0, SWWSRSTM#stack+10h, SPCALLinitSTM#
13、x, AR1STM#9,AR2LD#0,Aloop:ADD*AR1+, ABANZloop, *AR2-STLA,yB$init:STM#x, AR1RPT#9MVPDtable, *AR1+RET.end湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1515算术运算程序湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1516加法/减法指定堆栈空间指定堆栈空间为变量预留空间为变量预留空间初值序列初值序列初始化变量初始化变量设置堆栈指针设置堆栈指针利用利用MAC和和RPT求乘累加和求乘累加和湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1517算术运算湖南理工学
14、院湖南理工学院 胡文静胡文静 博士博士2:34:1518湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1619重复操作程序湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1620块重复操作湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1621数据块传送程序湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1722数据块传送程序湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1723小数运算程序p定点定点DSP的小数表示法的小数表示法16位定点位定点Q法和法和S法的表数范围法的表数范围Q法法S法法表数范围表数范围Q15S0.15-1x0.999
15、9695Q14S1.14-2 x 1.9999390Q13S2.13-4 x 3.9998779Q12S3.12-8 x 7.9997559Q11S4.11-16 x 15.9995117Q10S5.10-32 x 31.9990124Q9S6.9-64 x 63.9980469Q8S7.8-128 x 127.9960938Q7S8.7-256 x 255.9921875Q6S9.6-512 x 511.984375Q5S10.5-1024 x 1023.96875Q4S11.4-2048 x 2047.9375Q3S12.3-4096 x 4095.875Q2S13.2-8192 x 81
16、91.75Q1S14.1-16384 x 16383.5Q0S15.0-32768 x 32767湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1724小数运算程序p定点定点DSP的小数表示法的小数表示法u基于基于2的的补码补码形式;形式;u数的数的定标定标有有Q法和法和S法;法;uC54X为为16位:位:1位符号位,位符号位,Q个小数位和个小数位和15-Q个整数位。个整数位。0.5乘以327684000H-0.54000H乘以32768绝对值部分-18000H乘以32768绝对值部分C000H取反加18000H取反加1湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:17
17、25p小数乘法小数乘法01011000(0.625)(-0.125)0000000000001101(-0101)1101000(-0.078125)乘积结果为乘积结果为7 7位,送入累加器;为保持乘积的位,送入累加器;为保持乘积的符号不变,必须进行符号位扩展;因而,经过符号不变,必须进行符号位扩展;因而,经过符号扩展后累加器内容为符号扩展后累加器内容为8 8位:位:1 111010001101000(-0.1865)(-0.1865)出现了冗余的符号位出现了冗余的符号位( (两个符号位两个符号位) )!怎么办?!怎么办?ST1ST1的的FRCTFRCT小数方式控制位,可以控制乘积小数方式控制
18、位,可以控制乘积结果在送往累加器前是否自动左移结果在送往累加器前是否自动左移1 1位!如位!如FRCT=1FRCT=1,则可自动消去两个符号位中冗余的,则可自动消去两个符号位中冗余的一个。一个。11101000符号位扩展符号位扩展FRCT=1时时110100000.078125湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1726p【例【例5.7.1】求】求 ,数据全为小数,数据全为小数 41iiixay湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1827实现源代码.title Ex_571.asm.mmregsstack.usectSTACK, 10H.bssa,4
19、.bssx,4.bssy,1.defstart.datatable:.word3*32768/10,2*32768/10,-4*32768/10,1*32768/10.word6*32768/10,5*32768/10,-1*32768/10,-2*32768/10.textstart:SSBXFRCTSTM#a, AR1RPT#7MVPDtable, *AR1+STM#a, AR3STM#x, AR4RPTZA, #3MAC*AR3+, *AR4+, A ;只能最多用到只能最多用到AR5,教材代码有误,教材代码有误STHA, ydone:Bdone.end湖南理工学院湖南理工学院 胡文静胡文
20、静 博士博士2:34:1828浮点运算p浮点数的表示浮点数的表示u包含包含尾数尾数和和指数指数两部分两部分u如如:定点数定点数0 x2000(0.25)用浮点数表示时,尾数为用浮点数表示时,尾数为0 x4000(0.5),指数为,指数为1,即,即0.52-1;u尾数和指数都可正可负:尾数符号表示浮点数的正尾数和指数都可正可负:尾数符号表示浮点数的正负,指数的符号表示浮点数的绝对值大小。负,指数的符号表示浮点数的绝对值大小。定点数=尾数2-指数湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1829浮点运算p浮点数转换为定点数浮点数转换为定点数u将尾数按指数值进行左移将尾数按指数值进行
21、左移(指数为负)或右移(指(指数为负)或右移(指数为正)数为正)湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1830浮点运算实现代码.title Ex_581.asm.mmregsstack.usectSTACK, 100H.bssa, 2.bssb, 2.bssc, 2.bssep, 1.bssmp, 1.bssproduct, 1.bsstemp, 1.defstart.datatable:.word4*32768/10,-9*32768/10.textstart:STM#stack+100, SPMVPDtable, aMVPDtable+1, a+1LDa, 16, AEXPASTT, bNORMASTHA, cLDa+1, 16, AEXPASTT, b+1NORMASTHA, c+1CALLMULTdone:BdoneMULT:SSBXFRCTSSBXSXMLDb, AADDb+1, ASTLA, epLDc, TMPYc+1, AEXPASTT, tempNORMASTHA, mpLDtemp, AADDep, ASTLA, epNEGASTLA, tempLDtemp, TLDmp, 16, ANORMASTHA, productRET.end湖南理工学院湖南理工学院 胡文静胡文静 博士博士2:34:1831本章小结