




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章
汇编语言程序设计§4-1
汇编语言语句格式§4-2
分支程序设计§4-3
循环程序设计§4-4
子程序设计
一、指令格式[标号:]助记符操作数1,操作数2[;注释]
标号:由1-8个字符组成,且第一个字符必须是字母。用于指示指令的地址。
操作数:可使用二(B结尾)、十(D结尾或省略)、十六(H结尾)进制数和字符串(加“”)。
注释:为不可执行部分,对程序加以说明。
二、伪指令格式伪指令是不可执行的指令,其功能是为汇编程序提供信息。常用伪指令有:§4-1汇编语言语句格式1、汇编起始地址命令——ORG格式:[标号]:ORG
地址功能:规定程序的起始地址,省略时起始地址从0000H开始。2、汇编终止命令——END格式:[标号]:END[表达式]功能:源程序汇编终止。在主程序模块中含有“表达式”给出程序的起始地址,在其它模块(子程序)中表达式可省略。3、赋值命令——EQU格式:字符名称EQU
表达式功能:将表达式的值赋给字符名称。表达式可以是常数、地址、标号和表达式。4、定义数据命令——DB、DW格式:[标号]:
DB
字节数据项表功能:从指定地址(即标号)开始,在程序存储器中定义字节数据。格式:[标号]:DW
字数据项功能:从指定地址(即标号)开始,在程序存储器中定义16位字数据。高8位数据在低地址单元,低8位数据在高地址单元。
例如:
ORG1000HTAB1:DB1BH,”A“,-2,128TAB2:DW302AH,34H存储格式如图:TAB11BH41HFEH80HTAB230H2AH00H34H低高
5、定义存储区命令——DS
格式:[标号]:
DS
表达式功能:从指定地址(即标号)开始,保留指定数目(表达式的值)的字节单元作为存储区,供程序运行使用(用于程序存储器)。例如:ORG2000H
TAB:DS05H6、位定义命令——BIT
格式:字符名称
BIT
位地址功能:将位地址赋给字符名称。例如:SBITP1.0A条件BA下一指令YN条件YN图4——1图4——2§4-2分支程序设计一、分支程序的基本结构多分支结构,首先将分支按号进行排列,然后按序号的值来实现多分支选择。0分支1分支n-1分支n分支K=K=01n-1n…...图4——3p0p1pn
二、分支程序设计举例
在MCS—51汇编语言分支程序设计中,通常是通过条件转移指令、JMP@A+DPTR来实现分支选择。
例4—1比较两个数大小。设:两个8位数分别存放在外部RAM40H和41H单元中,将找出较大数存放在43H单元中。源程序如下:
ORG1000H
CLRC
;CY0
MOVDPTR,#0040H
;置数据指针
MOVXA,@DPTR;取第一个数
MOVR3,A;第一个数暂存于R3INCDPTR;修改指针
MOVXA,@DPTR;取第二个数
SUBBA,R3;两数比较
JNCBIG2;第二个数大
XCHA,R3
;第一个数大
SJMPBIG1BIG2:MOVXA,@DPTR
BIG1:INCDPTR;修改指针
MOVX@DPTR,A;存放大数
END例4—2多个分支选择根据R7的内容转向相应的处理程序设:R7的内容为0-N,对应处理程序的入口地址分别是P0-PN。把入口地址P0-PN置于以TAB为首址的地址表内,根据给出的分支序号(序号乘以2),由查表指令“MOVC”取出相应分支入口地址置于DPTR中
TAB+0+1+2+3
ORG2000HMOVDPTR,#TAB;置分支入口地址表首址
MOVA,R7
;分支转移序号送AADDA,R7
;分支转移序号乘以2
MOVR3,A;暂存入R3
MOVCA,@A+DPTR;程序入口地址高8位暂存R3XCHA,R3
INCA
MOVCA,@A+DPTR;入口地址低8位送入DPLMOV
DPL,AMOVDPH,R3
;程序入口地址高8位送入DPHCLRA
;清累加器
JMP@A+DPTR;转向处理程序TAB:DWP0
DWP1
DW
PN§4-3循环程序设计一、循环程序的基本结构
1.先执行后判断结构此结构如图4—4所示。2.先判断后执行结构此结构如图4—5所示。入口置循环初值循环处理修改循环参数修改循环参数循环处理退出循环退出循环循环控制循环控制置循环初值结束继续入口结束继续图4——4图4——5循环程序由以下四个基本组成部分.(1)置循环初值。设置循环开始的初始值,为循环做准备。如设计数器,工作单元初值。(2)循环处理。循环程序中重复执行的内容。(3)循环修改。修改循环参数,为执行下一次循环做准备。(4)循环控制。判断是否结束循环
二、循环程序设计举例
1.循环次数已知的情况通常采用“计数法”来控制循环,选择“先执行,后判断”循环结构。例4—3多个单字节数求和设:10个字节的无符号数据依次存放在内部RAM40H开始的单元中,所求结果存放在R3、R2中。本例循环次数已知,采用计数法控制循环。
源程序如下:
ORG8000H
MOVR0,#40H;置数据指针
MOVR7,#10;置计数器初值
MOVR3,#0;结果单元清零
MOVR2,#0;LOOP1:MOVA,R2
;取加数
ADDA,@R0
;求和
MOVR2,A;存结果低8位
JNCLOOP2;无进位,转LOOP2INCR3
;有进位,结果高8位加1LOOP2:INCR0;修改指针
DJNZR7,LOOP1;未完,继续
END例4—4数据排序设:N个数据依此存放在内部RAMLIST地址开始的存储区域中,将N个数比较大小之后,使它们按从小到大(或从大到小)的次序排列,仍存放在原存储区域中。排序的方法有多种,本例采用了较常用的“冒泡”排序法。程序中R7为外循环计数器,R5为内循环计数器,R0为交换标志,R3为暂存寄存器。源程序如下:
ORG8000HMOVR7,#N-1
;置外循环计数NEXT:MOVA,R7;置内循环计数
MOVR5,A;MOVR0,#LIST;置数据指针
MOVR1,#0;清交换标志COMP:MOVA,@R0;取数据Xi,i=0n-1
MOVR3,A;暂存Xi
INCR0;修改指针
CLRC;清进位标志CYSUBBA,@R0;Xi与Xi+1比较
JCLESS
;xi<xi+1 MOVA,R3
;xi>xi+1交换
XCHA,@R0DECR0MOV@R0,AINCR0
;恢复数据指针
MOVR1,#1
;置交换标志LESS:DJNZR5,COMP
;内循环未完,继续
DJNZR7,LOOP
;外循环未完,查交换标志
SJMPSTOPLOOP:CJNER1,#0,NEXT;有交换,继续
STOP:END
2.循环次数未知的情况在有些问题中,循环次数事先无法确定,但循环执行次数与问题中的某些条件有关,而且这些条件可以测试到,在这种情况下宜选择“先判断,后执行”的循环结构。例4—5把内部RAM
中起始地址为data的数据串传送到外部RAM中起始地址为
buf的存储区域内,直到发现“$”字符,停止传送。本例结束条件为找到“$”停止传送。源程序如下:
ORG8000HMOVR0,#DATA;置源数据区首地址
MOVDPTR,#BUF
;置目的数据区首地址LOOP0:MOVA,@R0;取数据
CJNEA,#24H,LOOP1;判断是否为$字符
SJMPLOOP2;是$,转结束LOOP1:MOVX@DPTR,A;不是$,执行传送
INCR0;修改源地址
INCDPTR;修改目的地址
SJMPLOOP0;传送下一个数据LOOP2:END§4-4子程序设计
子程序的主要特点是:在执行过程中需要由其它程序来调用,执行完毕又需要把执行流程返回到调用该子程序的程序中。子程序执行过程如图4—6所示。在子程序调用过程中须解决CALLZIRET子程序图4—6以下两个方面的问题:
程序之间的调用与返回;
调用程序与被调用程序之间的参数传送。ZI一、调用与返回指令
1.调用指令(1)绝对调用指令格式:ACALLaddr11
功能:
保护断点:
PC(PC)+2;取指令,断点入栈。
SP(SP)+1,(SP)(PC7~0)SP(SP)+1,(SP)(PC15~8)
建立子程序入口:
PC10~0addr11
注:ACALL调用范围为2KB。子程序入口地址
(2)长调用指令
格式:LCALLaddr16
子程序入口地址
功能:保护断点
PC(PC)+3;取指令,断点入栈。
SP(SP)+1,(SP)(PC7~0)SP(SP)+1,(SP)(PC15~8)
建立子程序入口
PCaddr16
注:ACALL调用范围为64KB。
2.子程序返回指令格式:RET;子程序返回
RETI;中断服务子程序返回功能:取断点送PC。即:
PC15~8(SP),SP(SP)-1PC7~0(SP),SP(SP)-1
二、程序之间的参数传递
1.寄存器传递参数把要传递的参数存放在寄存器A、R0~R7中。适合参数较少的情况。2.存储器传递参数把要传递的参数存放在存储器中。适合参数较多的情况。3.堆栈传递参数把要传递的参数存放在堆栈中。适合子程序嵌套调用的情况。三、子程序设计举例
例4-1试编写程序,计算Y=ai2i=1
设:a1,a2,,a10存放在内部RAM20H
开始的存储区域内,计算所得结果存放在R3,R2中。要求:平方运算编写成子程序SORT,主程序通过调用SORT完成求和运算。源程序如下:
ORG8000HMAIN:MOVR0,#20H;置数据指针
MOVR7,#10;置计数初值
10
MOVR3,#0
;结果单元清零
MOVR2,#0LOOP:MOVA,@R0;取数
ACALLSORT;调用求平方子程序
ADDA,R2;累加平方和
MOVR2,AADDCR3,#0;加进位CYINCR0;修改指针
DJNZR7,LOOP;未完,继续
SJMPENSORT:MOVDPTR,#TAB;进入子程序查平方表
MOVCA,@A+DPTR
RET;返主程序TAB:DB0,1,4,9,16DB25,36,49,64,81EN:END例4—2把内部RAM20H单元中的一字节
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025新房购房合同范本2
- 2025版权转让合同书模板
- 2025装饰装修工程劳务分包合同【装饰装修分包合同】
- 2025船舶租赁及购买合同范本
- 2025电气设备安装合同模板
- 2025年高强2号玻璃纤维纱项目合作计划书
- 2025年种植施肥机械项目合作计划书
- 2025年三异丙醇胺合作协议书
- 2025年药品批发零售合作协议书
- 2025年雷达、无线电导航及无线电遥控设备项目建议书
- 公立医院内控管理制度
- 麻醉苏醒延迟:麻醉苏醒延迟的原因与处理
- 室颤的抢救与护理课件
- 2023年6月六级真题第一套
- 对《民间口头叙事不止是文学-从猛将宝卷、猛将神歌谈起》的问答、评议与讨论
- 经典500家庭经典杂文
- 变更税务登记表模板
- 海底输油管道保温技术现状及进展
- 学校改造维修修缮项目可行性研究报告
- 2022集中式电化学储能电站-施工组织设计方案
- 船舶管路系统专题培训课件
评论
0/150
提交评论