- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8汇编语言程序的设计
第四章 汇编语言程序设计; 如果在程序中需要根据不同条件,采取不同的处理方法,就应采用分支结构,而分支程序是通过转移指令实现的。 在MCS51单片机指令系统中, 有JZ(JNZ)、 CJNE、 JC(JNC)及JB(JNB)等丰富的控制转移指令, 它们是分支结构程序设计的基础, 可以完成各种各样的条件判断、分支。
分支结构程序有两种,单分支选择结构和多分支选择结构。; 编写分支结构程序重点在于正确使用转移指令。转移指令有3类:无条件转移、条件转移和散转。
1)无条件转移 它的程序转移方向是程序设计者事先安排的,与已执行程序的结果无关,使用时只需给出正确的转移目标地址和偏移量。
2)条件转移 它是根据已经执行程序对标志位或对累加器或对内部RAM某位的影响结果,决定程序的走向,形成各种分支。
3)散转 它是根据某种已输入的或者运算的结果,使程序分别转向各个处理程序中去。MCS-51中的JMP @A+DPTR可以方便地实现散转功能。;例:设变量x存放在VAR单元中,函数值y存放FUNC中,按下式给y赋值。;程序如下:
VAR EQU 30H
FUNC EQU 31H
MOV A,VAR ;取x
JZ COMP ;为零转COMP
JNB ACC.7,POSI ;x0转POSI
MOV A, # 0FFH ;x0,-1→A
SJMP COMP
POSI: MOV A,#01H
COMP:MOV FUNC,A
END; 散转指令JMP @A+DPTR是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成散转的目的地址,装入程序计数器PC,其操作结果不影响累加器A和数据指针DPTR。;例:根据R2中的内容,转入各个操作程序:; 上面程序中每条“AJMP”指令占用2个字节,各转移指令“AJMP”地址相差两个字节,所以累加器A中变址值必须作乘2修正。若转移表是由三字节长转移指令“LJMP”组成,则累加器A中变址值必须乘3。当修正值有进位时,则应将进位先加在数据指针高位字节DPH上。
转移表中使用“AJMP”指令,这就限制了转移的入口地址OPR0、 OPR1 、…、 OPRn必须和散转表首地址JPT位于同一个2 KB范围内。另外规定散转点不能超过256个,因为??作寄存器R2为8位寄存器。为了克服上述局限性,除了可以使用“LJMP”指令组成跳转表外,还可采用双字节的寄存器存放散转值,并利用对DPTR进行加法运算的方法,直接修改DPTR,然后再用散转指令实现散转。;(2)采用地址偏移量表 ;(3)采用转向地址表 ;(4)利用“RET”指令实现散转程序 ;循环程序的构成
1、循环初态 设置循环初始状态,如建立地址指针,设置循环计数器初值等;
2、循环体 重复执行的程序段,完成主要的计算或操作任务;
3、循环控制部分 用于控制循环的执行和结束,不满足结束条件,重复执行循环体工作部分,满足条件,则退出循环;
4、结束部分 处理和保存循环程序执行的结果。;例: 已知:MCS-51单片机使用的晶振为6MHz,要求设计一个软件延时程序,时间为12ms。;周期数 ORG 2000H
1 MOV R0,#0CH ;12→R0
1 DL2:MOV R1,#MT ;l ms延时的循环次数→R1
1 DL1:NOP
1 NOP
2 DJNZ Rl,DL1 ;l ms延时循环
2 DJNZ R0,DL2 ;毫秒数减1,不等于0继续循
环,等于0结束
END;例: 把内部RAM的20H~30H单元中的内容,传送到外部RAM的1000H单元,并将原数据区清零。;程序清单:
MAIN: MOV
文档评论(0)