版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言编写方法及程序分析· 出处:统一教学网 · 作者:casularm · 发表日期:2006-6-25 15:17:00 汇编语言编写方法及程序分析1 汇编语言程序的编写方法(1) 汇编语言源程序以.asm为其扩展名。(2) 汇编语言源程序的每一行都可以由4个部分组成,句法如
2、下:标号: 助记符 操作数 ;注释其中可用空格或TABS键隔开标号供本程序的其他部分或其他程序调用。标号是任选项,标号后面可以加也可以不加冒号“:”。标号必须从第一列写起,标号最多可达到32个字符(AZ ,az ,09 ,_ ,以及$),但第1个字母不能以数字开头。引用标号时,标号的大小写必须一致。标号的值就是SPC(段程序计数器)的值。如果不用标号,则第一个字母必须为空格、分号或信号(*)。助记符助记符指令、汇编指令、宏指令和宏调用。作为助记符指令,一般用大写;汇编命令和宏指令,以句号“.”开始,且为小写。汇编命令可以形成常数和变量,当用它控制汇编和连接过程时,可以不占用存储空间。指令和汇编
3、命令都不能写在第1列。操作数指令中的操作数或汇编命令中定义的内容。操作数之间必须用逗号“,.8专GkzKH业国l”分开。有的指令操作无操作数,如NOP、RESET。注释注释从分号“;”开始,可以放在指令或汇编命令的后面,也可以放在单独的以行或数行。注释是任选项。(如果注释从第1列开始,也可以用“*”。)(3) 常用的汇编命令如表所示。汇编命令作用举例.title紧随其后的是汇编语言程序正文.title “example.asm”.end结束汇编命令放在汇编语言程序的最后.text紧随其后的是汇编语言程序正文经汇编后,紧随.
4、text后的是可执行程序代码.data紧随其后的是已初始化数据有两种数据形式:.int和.用来设置一个或多个16位无符号整型量常数table: .word 1,2,3,4 .word 6,8,4,2.word.word 用来设置一个或多个16位符号整型量常数表示在程序存储器标号为table开始的8个单元中存放初始化数据1,2,3,4,6,8,4,2.bss.bss为未初始化变量保留存储空间.bss x,4 表示在数据存储器中空出4个存储单元存放变量x1,x2,x3和x4.sect建立包含代码和数据的自定义段.sect “vectors”定义向量表,紧随其后的是复位向量和
5、中断向量,名为vectors.usect为未初始化变量保留存储空间的自定义段STACK .usect “STACK”,10h 在数据存储器中留出16个单元作为堆栈区,名为STACK(4) 汇编语言程序中的数据形式如表所示形式举例二进制1110001b或1111001B八进制226q或572Q十进制1234或1234或1234(缺省型)十六进制0A40h或0A40H或0xA40浮点数1.654e23(仅C语言程序中能用,汇编程序中不能用)字符D字符串“this is a string”2 &
6、#160; 程序21 程序一编程目的:本程序是试编的第一个程序,其主要目的是为了了解DSP的输入和输出方法程序功能:求乘积之和y=a1*x1+a2*x2+a3*x3+a4*x4.title"sample.asm".mmregs ;将存储映像寄存器导入列表STACK.usect"STACK",10h ;给堆栈段分配空间.bssa,4 ;将9个字分配给各个变量.bssx,4.bssy,1PA0.set0.defstart.data ;以下是分配的数据table:.word4
7、,4,4,4.word4,4,4,4 .text ;以下是数据start:STM#0,SWWSR ;将等待位设为0STM#STACK+10h,SP ;设堆栈指针STM#a,AR1 ;将AR1指向变量aRPT #7 ;从 程序存储空间转移8个值到数据储存空间MVPDtable,*AR1+CALLSUM ;调用SUM子程序end:Bend SUM:STM#a,AR3 ;子程序STM#x,AR4 RPTZA,#3 ;求乘积之和MAC*AR3+,*AR4+,ASTL A,y ;将寄存器A中的低16位存入y地址 空间PORTWy,PA0 ;将y地址中的值输出到输出口RET ;子程序返回.end ;程序结
8、束等待位的设置:C54x片内有一部件软件可编程等待状态发生器, lYV软vb无X网教供Y16G9i垠控制着外部总线的工作。软件可编程等待状态发生器可将外部总线周期延长多达7个周期,这样一来,C54x就能很方便的与外部慢速器件相接口。如果外部器件要求插入7个以上的等待周期,则可以利用硬件READY先来接口。当所有的外部寻址都配置在0等待状态时,加到等待状态发生器的时钟被关断;来自内部时钟的这些通道被切断后,可以降低处理器的功耗。 软件可编程等待状态发生器的工作受到一个16位的软件等待状态寄存器(SWWSR)的控制,它时一个存储器映象寄存器,在数据空间的地址为0028h。将程序空间和数据空间都分成
9、两个32K 字块,I/O空间由一个64K字块组成。这5个字块空间在SWWSR中都相应的有一个3位字段,用来定义各个空间插入等待状态的数目: 15 1412 119 86 53 20 保留/XPA(仅C548,C549)I/O空间(64K)数据空间 (高32K)数据空间 (低32位)程序空间 (高32位)程序空间 (低32位) R R/W R/W R/W R/W R/W上述SWWSR的各个3位字段规定的插入等待状态的最小数为0(不插入等待周期),最大数为7(111b)。22程序二编程目的:熟悉DSP汇编程序设计技巧,完善输出功能程序功能:实现一8位LED灯泡由左到右循环闪烁 .title&quo
10、t;bubble.asm" .mmregsSTACK.usect"STACK",5h.bssy,1 .defstart .dataPA0.set 0.textstart:STM#7000,SWWSR ;设等待位 STM #2,AR3 ;将辅助寄存器AR3设为2 (乘2,实现左移)STM#6,AR1 ;将辅助寄存器AR1设为6 (左移7次)STM#3,AR2 ;将辅助寄存器AR2设为3 (循环执行4次) LDAR3,T ;将T(乘法寄存器)设为2loop1: LD#1,A ;A寄存器值为1STLA,y ;y1PORTWy,PA0 ;输出y地址内的值到输出口 STM#
11、10000,AR4 ;将辅助寄存器AR4设为10000loop3:RPT#10000 ;重复执行下一程序10001次NOP ;等待 BANZloop3,*AR4- ;循环AR4值(10000)1次loop2:MPYy,A ;将y×T,其值存入A寄存器STLA,y ;将A内值存入y地址中PORTWy,PA0 ;输出y地址值到输出口STM#10000,AR5 ;将辅助寄存器AR5设为10000loop4:RPT#10000 ;实现第8个灯跳转到第1个灯时的时间延迟NOPBANZloop4,*AR5-BANZloop2,*AR1-BANZloop1,*AR2-end:Bend.end数据寻
12、址方式:C54x共有7种数据寻址方式,如表所示:寻址方式用途举例指令含义立即寻址主要用于初始化LD 10,A将立即数10传送至累加器A绝对寻址利用16位地址寻址存储单元STL A,*(y)将累加器A的低16位存放到变量y所在的存储单元中累加器寻址把累加器的内容作为地址READYA x按累加器A作为地址读程序存储器,并存入变量x所在的数据存储器单元直接寻址利用数据页指针和堆栈指针寻址LD x,A(DP+x的低7位地址)A间接寻址利用辅助寄存器作为地址指针LD *AR1,A(AR1)A存储器映象寄存器寻址快速寻址存储器映象寄存器LDM ST1, bGkI,FV垠的国)Eq的B (ST1)B堆栈寻址
13、压入/弹出数据存储器和MMR(存储器映象寄存器)PSHM AG(SP)1SP,(AG)TOSC54x寻址存储器有两种基本的数据形式:16位数和32位数。大多数指令能够寻址16位数,但是,只有双精度和长字指令才能寻址32位数。在32位寻址时,先处理高有效字,然后处理低有效字。如果寻址的第1个字处在偶地址,那么第2 个字就处在下一个(较高的)地址;如果第1各字处在奇地址,那么第2个字就处在前一个(较低的)地址。循环操作:BANZ在程序设计时,经常需要重复执行某一段程序。利用BANZ(当辅助寄存器部位0时转移)指令执行循环技术和操作是十分方便的。如果要重复执行n次,则重复指令中应规定计数值为n1次。
14、重复操作:C54x有3条重复操作指令:RPT(重复下条指令)、RPTZ(累加器清0并重复下条指令)以及RPTB(块重复指令)。重复指令RPT或 RPTZ允许重复执行紧随其后的那一条指令。如果要重复执行n次,则重复指令中应规定计数值为n1次。23 程序三编程目的:实现DSP分时输入与输出功能程序功能:先从I/O口读入一数据并将其存入某地址,再从该地址将数据输出到I/O口 .title "dspio.asm" .mmregsPA0.set0 PA1.set1STACK.usect"STACK",10h .bssy,1 .textstart: PORTRPA1
15、,y ;从I/O口读入数据并储存到y所在的地址 LDy,A ;将y中的数据写入累加器A中(便于观察y中数值的变化情况) PORTWy,PA0 将y所在地址中的数据输出到I/O口;end:Bend.end 2.4 程序四编程目的:实现DSP循环输入与输出功能程序功能:令DSP反复执行从输入装置读取数据,并将数据存入某一地址,再从该地址将数据输出到输出设备 .title "dspio2.asm" .mmregsPA0.set0 PA1.set1STACK.usect"STACK",10h .bssy,1 .textstart:STM#4000,AR1LOOP
16、1:PORTRPA1,y ;循环读写LDy,APORTWy,PA0 BANZLOOP1,*AR1end:Bend.end2.5 程序五编程目的:应用DSP实现对压水堆大破口事故(LOCA)进行事故后果判断编程背景:当始发事件大LOCA发生时,教$pZZ)d育z理提.育'|cG供rJ.国Q&=教6atE%SLq软pG需要下列功能响应以消除或缓解事故:(1) 停堆(RS),中止核裂变过程;(2) 安全壳喷淋系统动作,以降低安全壳压力(COI
17、);(3) 向堆芯注入应急冷却水(ECI),以冷却堆芯;(4) 安全壳再循环冷却(COR),由循环喷淋水导出安全壳内热量,控制安全壳的温度核压力;(5) 堆芯再循环冷却(ECR),进行堆芯再循环冷却阶段。 功能事件树图如下图所示破口 PB堆次临界RS安全壳降压COI堆芯应急冷却ECI完全壳降压COR堆芯再循环冷却ECR序列号堆芯是否熔化程序功能:反复从输入口读取数据(不同位分别代表
18、执行不同的功能响应),经DSP处理后将判断结果输出到输出口,通过指示灯(不同的灯代表不同事故结果)显示出来 .title "LOCA.asm" .mmregsPA0.set0 PA1.set1STACK.usect"STACK",10h .bssy,1 .bssx,1 .defstart .datatable:.word0,128,0,128,0,32,0,32,0,128,0 ;事故分析列表 .word128,0,32,0,32,0,0,0,0,0 .word4,0,4,0,0,0,0,0,4,0 .word4,0,0,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word0,0,2,0,2,0,0,0,0,0 .word2,0,2,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word16,0,16,0,0,0,0,0,16,0 .word16,0,0,0,0,0,1,0,1,0 .word0,0,0,0,1,0,1,0,0,0 .word0,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度体育场馆运营代理授权合同
- 体育运动训练效果评价方法考核试卷
- 2025年度竞业禁止协议及市场信息保密合同
- 兽医血液学与细胞学考核试卷
- 塑料片材生产线的智能监控与数据分析系统开发考核试卷
- 2025年度鱼塘承包及渔业休闲垂钓服务合同
- 啤酒原料品质控制与处理考核试卷
- 土壤修复成本效益分析考核试卷
- 再生橡胶在绿色交通领域的应用考核试卷
- 餐饮销售技巧课程设计
- 高考诗歌鉴赏专题复习:题画抒怀诗、干谒言志诗
- 2023年辽宁省交通高等专科学校高职单招(英语)试题库含答案解析
- GB/T 33688-2017选煤磁选设备工艺效果评定方法
- GB/T 304.3-2002关节轴承配合
- 漆画漆艺 第三章
- CB/T 615-1995船底吸入格栅
- 光伏逆变器一课件
- 货物供应、运输、包装说明方案
- (完整版)英语高频词汇800词
- 《基础马来语》课程标准(高职)
- IEC61850研讨交流之四-服务影射
评论
0/150
提交评论