单片机课件第2章3_第1页
单片机课件第2章3_第2页
单片机课件第2章3_第3页
单片机课件第2章3_第4页
单片机课件第2章3_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、讲授人:范娟讲授人:范娟 引言引言2.12.1 寻址方式寻址方式2.22.2 数据传送与交换指令数据传送与交换指令2.3 2.3 算术运算和逻辑运算指令算术运算和逻辑运算指令2.42.4 控制转移指令控制转移指令2.52.5 位操作指令位操作指令2.62.6 本章小结本章小结 anl aanl a, rnrn / /directdirect / / riri / /# #datadata anl directanl direct, a a / /# #data data orl aorl a,rnrn / /directdirect / / riri / /# #datadata orl di

2、rectorl direct,a a / /# #datadata xrl axrl a,rnrn / /directdirect / / riri / /# #datadata xrl directxrl direct,a a / /# #datadata 取反:取反: cpl acpl a 清零清零: clr aclr a rl arl arr arr arlc arlc arrc arrc aa.7 a.7 a.0 a.0a.7a.7 a.0 a.0a.7a.7 a.0 a.0cycycycya.7a.7 a.0 a.0综合举例:综合举例:例例1 1:分析下列程序段实现的功能:分析下列程

3、序段实现的功能:例例2 2:编制程序求片内:编制程序求片内ramram的的20h20h,21h21h,22h22h单元中的单元中的数的补码,并将结果仍放回到数的补码,并将结果仍放回到20h20h,21h21h,22h22h中。中。mov a, directmov a, directrl arl amov r1mov r1,a arl arl arl arl aadd aadd a,r1r1mov directmov direct,a a包括以下类型:包括以下类型:无条件转移和条件转移无条件转移和条件转移相对转移和绝对转移相对转移和绝对转移长转移和短转移长转移和短转移调用与返回指令调用与返回指令

4、 这一类指令的功能是改变指令的执行顺序,转这一类指令的功能是改变指令的执行顺序,转到指令指示的新的到指令指示的新的pcpc地址执行。此类指令一般不影地址执行。此类指令一般不影响响pswpsw。ajmpajmp addr11addr11ljmpljmp addr16addr16sjmpsjmp relreljmpjmp a+dptra+dptr 那么他们的区别何在呢?那么他们的区别何在呢?v跳转的范围不同。跳转的范围不同。 短转移类指令:短转移类指令:ajmp ajmp addr11addr11 长转移类指令:长转移类指令:ljmpljmp addr16addr16 相对转移指令:相对转移指令:

5、sjmp relsjmp rel转移范围转移范围:2kb2kb64kb64kb-128-128+127+127v指令构成不同。指令构成不同。 ajmpajmp、ljmpljmp后跟的是后跟的是绝对地址绝对地址,而,而sjmpsjmp后跟的是后跟的是相对地址相对地址。(。(rel=rel=转移的目的地址转移的目的地址- -(pcpc)-2-2)v指令长度不同指令长度不同v原则上,所有用原则上,所有用sjmpsjmp或或ajmpajmp的地方都可以用的地方都可以用 ljmpljmp来替代。来替代。 间接转移指令:间接转移指令:jmpjmp a+dptra+dptr 这条指令的用途也是跳转,转到什么

6、地方去呢?这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。这可不能由标号简单地决定了。 转移地址由转移地址由a+dptra+dptr形成,并直接送入形成,并直接送入pcpc。指令对指令对a a、dptrdptr和标志位均无影响和标志位均无影响。 本指令可代替众多的判别跳转指令,又称为本指令可代替众多的判别跳转指令,又称为散散转指令转指令,多用于多分支程序结构中。,多用于多分支程序结构中。例:例: mov dptrmov dptr,#tab #tab ;将;将tabtab代表的地址送入代表的地址送入dptrdptr jmp a+dptr jmp a+dptr ;跳转;跳转t

7、ab: ajmp rout0 tab: ajmp rout0 ;跳转;跳转rout0rout0开始的程序段开始的程序段tab+2: ajmp rout1 tab+2: ajmp rout1 ;跳转;跳转rout1rout1开始的程序段开始的程序段tab+4:tab+4: ajmp rout2 ajmp rout2 ;跳转;跳转rout2rout2开始的程序段开始的程序段tab+6:tab+6: ajmp rout3 ajmp rout3 ;跳转;跳转rout3rout3开始的程序段开始的程序段 .rout0rout0: .rout1rout1: .rout2rout2: .rout3rout3

8、:执行该段程序后,程序将根执行该段程序后,程序将根据据a a中的内容转移到不同的中的内容转移到不同的程序段去执行程序段去执行-散转。散转。a=0,a=0,转转rout0rout0a=2,a=2,转转rout1rout1a=4,a=4,转转rout2rout2a=6,a=6,转转rout3rout3 jzjz relrel ;如果;如果a=0a=0,则转移,否则顺序执行。,则转移,否则顺序执行。 jnzjnz relrel ;如果;如果a0a0,就转移,就转移 jz jz 标号标号 ;即转移到标号处。;即转移到标号处。例:例: mov amov a,r0r0 jz l1jz l1 mov r1

9、mov r1,#00h#00h ajmp l2 ajmp l2 l1l1: mov r1: mov r1,#0ffh#0ffh l2l2: sjmp l2: sjmp l2 end end 执行上面这段程序:如果执行上面这段程序:如果r0=0r0=0,结果,结果r1=0ffhr1=0ffh。而如。而如果果r0r0 0 0,则结果是,则结果是r1=00hr1=00h。 把上面的那个例子中的把上面的那个例子中的jzjz改成改成jnzjnz,看看程序执行的,看看程序执行的结果是什么结果是什么? ? 如果如果r0=0r0=0,结果,结果r1=00hr1=00h。如果。如果r0r0 0 0,结果是,结果

10、是r1r1中的中的值为值为0ffh0ffh。cjne acjne a,# #datadata,relrel cjne acjne a,directdirect,relrelcjne rncjne rn,# #datadata,relrelcjnecjne riri,# #datadata,relrel cjne acjne a,#data#data,标号,标号cjne acjne a,directdirect,标号,标号cjne rncjne rn,#data#data,标号,标号cjne ricjne ri,#data#data,标号,标号利用这些指令,可以判断两数是否利用这些指令,可以判断

11、两数是否相等相等。但有时还想得知两数比较之后但有时还想得知两数比较之后哪个大哪个大,哪个小哪个小,本条指令也具有这样的功能:本条指令也具有这样的功能:如果两数不相等,则如果两数不相等,则cpucpu还会用还会用cycy(进位位)(进位位)来反映哪个数大,哪个数小。来反映哪个数大,哪个数小。如果前面的数大,则如果前面的数大,则cy=0cy=0,否则,否则cy=1cy=1。因此在程序转移后再次利用因此在程序转移后再次利用cycy就可判断出哪个就可判断出哪个数大,哪个数小了。数大,哪个数小了。举例:举例: mov amov a,r0r0 cjne a cjne a,#10h#10h,l1l1 mov

12、 r1 mov r1,#0 ;#0 ;如如r0=10h,r0=10h,则不转移则不转移r1=00hr1=00h; ajmp l3ajmp l3l1:jc l2l1:jc l2 ;如;如cy=1cy=1即即 r010h,r010h,r010h,则转移则转移 ajmp l3ajmp l3l2:mov r1l2:mov r1,#0ffh#0ffhl3:sjmp l3l3:sjmp l3如果r0=10h,则r1=00h;如果 r010h,则r1=0aah;如果r010h,则r1=0ffh。 djnz rndjnz rn,relrel djnz directdjnz direct,relrel 例:例:

13、 djnz 10hdjnz 10h,looploop . .loop: .loop: .例:例: mov 23h,#0ahmov 23h,#0ah clr a clr aloop: add a,23hloop: add a,23h djnz 23h,loop djnz 23h,loop sjmp $ sjmp $上述程序段的执行过程是:上述程序段的执行过程是:将将23h23h单元中的数连续相单元中的数连续相加,存至加,存至a a中,每加一次,中,每加一次, 23h23h单元中的数单元中的数值值减减1 1,直至减到直至减到0 0,共加(,共加(23h23h)次。)次。 lcall lcall addr16 addr16 ;长调用指令;长调用指令( (3 3字节字节) ) acallacall addr11 addr11 ;短调用指令;短调用指令( (2 2字节字节) ) l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论