基于汇编与C语言的单片机原理及应用 程启明 第3章 MCS 51单片机的指令和汇编语言程序设计——指令系统 赵永熹制作 1.pptVIP

基于汇编与C语言的单片机原理及应用 程启明 第3章 MCS 51单片机的指令和汇编语言程序设计——指令系统 赵永熹制作 1.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
跳转的范围不同。 短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel 转移范围: 2KB 64KB -128~+127 指令构成不同。 AJMP、LJMP后跟的是绝对地址,而SJMP后跟的是相对地址。 指令长度不同 原则上,所有用SJMP或AJMP的地方都可以用 LJMP来替代。 间接转移指令:JMP @A+DPTR 这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。 转移地址由A+DPTR形成,并直接送入PC。 指令对A、DPTR和标志位均无影响。 本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。 (2)第四条指令与前三条指令相比有所不同 例: MOV DPTR,#TAB ;将TAB代表的地址送入DPTR JMP @A+DPTR ;跳转 TAB: AJMP ROUT0 ;跳转ROUT0开始的程序段 TAB+2: AJMP ROUT1 ;跳转ROUT1开始的程序段 TAB+4: AJMP ROUT2 ;跳转ROUT2开始的程序段 TAB+6: AJMP ROUT3 ;跳转ROUT3开始的程序段 ... ROUT0: ... ROUT1: ... ROUT2: ... ROUT3: 执行该段程序后,程序将根据A中的内容转移到不同的程序段去执行----散转。 A=0,转ROUT0 A=2,转ROUT1 A=4,转ROUT2 A=6,转ROUT3 2. 条件转移指令(8条) 条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。 (1)判A内容是否为0转移指令(2条) JZ rel ;如果A=0,则转移,否则顺序执行。 JNZ rel ;如果A≠0,就转移。 转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量rel 我们在编写汇编语言源程序时,可以直接写成: JZ 标号 ;即转移到标号处。 例: MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 在执行上面这段程序前:如果R0=0,结果R1=0FFH。而如果R0?0,则结果是R1=00H。 把上面的那个例子中的JZ改成JNZ,看看程序执行的结果是什么? 如果R0=0,结果R1=00H。如果R0 ?0,结果是R1中的值为0FFH。 (2)比较不等转移指令(4条) CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel 此类指令的功能是将两个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。 同样地,使用时,我们可以将rel理解成标号,即: CJNE A,#data,标号 CJNE A,direct,标号 CJNE Rn,#data,标号 CJNE @Ri,#data,标号 利用这些指令,可以判断两数是否相等。 但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能: 如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大,哪个数小。 如果前面的数大,则CY=0,否则CY=1。 因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。 例: MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 ;如R0=10H,则不转移R1=00H; AJMP L3 L1:JC L2 ;如CY=1即 R010H,则转移 MOV R1,#0AAH ;否则CY=0即 R010H,则转移 AJMP L3 L2:MOV R1,#0FFH L3:SJMP L3 因此最终结果是:本程序执行前, 如果R0=10H,则R1=00H; 如果R010H,则R1=0AAH; 如果R010H,则R1=0FFH。 (3)减1不为0转移指令(2条) DJNZ Rn,rel DJNZ direct,rel DJNZ指令的执行过程是这样的: 它将第一个参数中的值减1,然后看这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移到第二个参数所指定的地方去。 例: DJNZ 10H,LOOP ... LOOP:

文档评论(0)

118压缩包课件库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档