- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 汇编语言程序设计
【例4-1】
ORG 2000H
MOV A,20H
…
表示后续目标程序从2000H单元开始存放?
一般要求ORG定义空间地址应由小到大,且不能重叠?
在实际应用中,一般仅设置主程序的起始地址和中断服务程序的入口地址,其它的程序或常数依次存放即可,汇编程序汇自动进行存储空间的分配?
?
【例4-2】
ORG 1000H
SEG1: DB 65H,68H,“4”
SEG2: DB ‘DAY’
END
则
(1000H)=65H ;SEG1的地址为1000H
(1001H)=68H ;存放数字68H
(1002H)=34H ;数字4的ASCII码
(1003H)=44H ;D的ASCII码
(1004H)=41H ;A的ASCII码
(1005H)=59H ;Y的ASCII码
【例4-3】
2200:DW 253AH,58H
则
(2200H)=25H
(2201H)=3AH
(2202H)=00H
(2203H)=58H
伪指令DB和DW均是根据原程序的需要,用来定义程序中用到的数据(地址)或数据块的?一般应放在原程序之后,汇编后的数据块将紧挨着目标程序的末尾地址开始存放?
【例4-4】
ORG 2000H
SEG: DS 06H
DB 35H,45H
表示从2000H单元开始,连续预留6个存储单元,然后从2006H单元开始按DB指令给内存单元赋值,即(2006H)=35H,(2007H)=45H?
【例4-5】
SG: EQU R1 ;SG与R1等值
DE: EQU 40H ;DE与40H等值
MOV A,SG ;(R1)→A
MOV R7,DE ;(40H)→R7
【例4-6】
MAIN: DATA 40H
汇编后MAIN的值为40H?
【例4-7】
MEN BIT P1.3
GEN BIT 08H
汇编后,位地址P1.3?08H分别赋给变量MEN和GEN?
【例4-9】 双字节二进制数求补?
程序说明:本程序对R3(高)?R2(低)中的二进制定点数取反加1便得到其补码?
程序框图如图4-1所示?
程序清单:
【例4-10】设变量x存放在VAR单元之中,函数值y存放在FUNC中,按下式给y赋值:
程序框图如图4-2所示?
程序清单:
AVR EQU 30H
FUNC EQU 31H
START:MOV A,VAR ;取x
JZ COMP ;为0,转COMP
JNB ACC.7, POSI ;0,转POSI
MOV A,#0FFH ;0,-1送入A
SJMP COMP
POSI: MOV A, #01H ;+1送入A
COMP:MOV FUNC, A
END
【例4-11】32个分支转移程序?根据入口条件转移到
32个目的地址?
入口:(R3)=转移目的地址的序号00H-1FH?
出口:转移到相应子程序入口?
程序框图如图4-3所示?
程序清单:
MP: MOV A,R3 ;取序号
RL A ;序号乘2
MOV DPTR, #JTAB ;32个子程序首址送
;DPTR
JMP @A+DPTR ;根据序号转移
JTAB: AJMP ROUT00 ;32个子程序首址
AJMP ROUT01
…
AJMP ROUT31
此程序要求32个转移目的地址(ROUT00~ROUT31)
必须驻留在与绝对转移指令AJMP同一个2KB存储区内?
RL指令对变址部分乘以2,是由于每条AJMP指令占用
2个字节?如改用LJMP指令,目的地址可以任意安排在
64KB的程序存储器空间内,但程序应作较大的修改?
【例4-12】 若Xi均为单字节数,并按i(i=1~n)的顺序存放在MCS-51的内部RAM从50H开始的单元中,n放在R2中,现在要求将它们的和(双字节)放在R3?R4中?
入口:Xi存放在从50H开始的单元;
n放在R2中?
出口:和存放于R3?R4中?
程序框图如图4-5所示?
程序清单:
ADD1: MOV R3,#00H ;清和存储单元
MOV R4,#00H
MOV R2,# n ;置循环计数初值
MOV R0,#50H
LOOP: MOV A,R4 ;取部分和低位
ADD A,@R0 ;与Xi相加
原创力文档


文档评论(0)