第03章整理ppt_第1页
第03章整理ppt_第2页
第03章整理ppt_第3页
第03章整理ppt_第4页
第03章整理ppt_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3 3章章 mcs-51mcs-51的指令系统的指令系统 本章介绍mcs-51汇编语言的指令系统。3.1 3.1 指令系统概述指令系统概述 mcs-51的基本指令共111条,按指令在程序存储器所占的字节来分,其中:(1)单字节指令49条;(2)双字节指令45条;(3)三字节指令17条。 按指令的执行时间来分,其中:(1)1个机器周期(12个时钟振荡周期)的指令64条;(2)2个机器周期(24个时钟振荡周期)的指令45条; (3)只有乘、除两条指令的执行时间为4个机器周期(48个时钟振荡周期); 在12mhz晶振的条件下,每个机器周期为1s。 有一个位变量的指令子集,在进行位变量处理的程序设

2、计时十分有效、方便。 指令格式就是指令的表示方法,一条指令由两部分组成,即操作码和操作数。 操作码用来规定指令进行什么操作, 操作数则是指令操作的对象3.2 3.2 指令格式指令格式 51系列指令系统中,有单字节指令、双字节指令、三字节不同长度的指令,指令长度不同,格式也就不同。 (1)单字节指令:指令只有一个字节,操作码和操作数同在一个字节中; (2)双字节指令:一个字节为操作码,另一个字节是操作数; (3)三字节指令:操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址3.3 3.3 指令系统的寻址方式指令系统的寻址方式 寻址方式就是在指令中说明操作数所在地址的方法。

3、51单片机共有7种寻址方式。寄存器寻址的范围寄存器寻址的范围2直接寻址方式: 直接寻址方式的寻址范围直接寻址方式的寻址范围(1)内部ram的128个单元;(2)特殊功能寄存器。特殊功能寄存器除了以单元地址的形式给出外,还可以用寄存器符号的形式给出。 例如: mov a,80h 与 mov a,p0是等价的。 * 直接寻址方式是访问除a、b、dptr以外的sfr的唯一寻址方式。3. 寄存器间接寻址方式:寻址范围: 立即寻址方式就是操作数在指令中直接给出。为了区别于直接寻址方式,需在操作数前面加前缀标志“#”。例如: mov a,#40h 操作的结果是把立即数40h(常数)送给累加器a。5基址寄存

4、器加变址寄存器间址寻址方式:说明: (1)本寻址方式只能对rom进行寻址,或者说它是专门针对rom的寻址方式,寻址范围可达到64kb。(2)本寻址方式的指令只有3条:movc a,a+dptrmovc a,a+pcjmp a+dptr6位寻址方式:位寻址方式的寻址范围位寻址方式的寻址范围(1)内部ram中的位寻址区: 单元地址为20h2fh,共16个单元,位地址是00hffh,对这128个位的寻址使用直接地址表示。 位寻址区中的位有两种表示方法, a. 直接使用位地址。 例如:40h。(2)特殊功能寄存器中的可寻址位: 可供寻址的特殊功能寄存器有11个,共有88个位,其中5个位没有定义,所以有

5、可寻址位83个。 这些寻址位在指令中有如下4种表示方法:a.直接使用位地址。例如psw.5的位地址为0d5h。7相对寻址方式: 在实际编程中,在实际编程中,“rel” rel” 通常用标号代替通常用标号代替例:例:sjmp loop1sjmp loop1例:例:2000h:sjmp 08h ; 原原pc值为值为2000h;执行这条指令后的当前;执行这条指令后的当前pc值值为为2002h,rel为为08h。2002h+08h=200ah,转移目,转移目的地址为的地址为200ah,程序就跳转至,程序就跳转至200ah去执行了。去执行了。右图为右图为sjmp 08h相对相对寻址示意图。寻址示意图。

6、偏移量rel是一个带符号的8位二进制数补码数,范围是:128+127。因此相对转移是以转移指令所在地址为基点,向地址增加方向最大可转移(127+转移指令字节)个单元地址,向地址减少方向最大可转移(128-转移指令字节)个单元地址。mcs-51指令系统的7种寻址方式及寻址空间 ,概括起来如下表(表3-1 p43):序号 寻址方式使用的变量寻址空间1寄存器寻址r0r7、a、b、c(位)、dptr、ab4组通用工作寄存器区、部分sfr2直接寻址内部128b的ram、sfr3寄存器间接寻址r0、r1、sp片内ramr0、r1、dptr片外ram4立即寻址#data5基址寄存器加变址寄存器间接寻址a+d

7、ptr、a+pcrom3.4 mcs-513.4 mcs-51指令系统分类介绍指令系统分类介绍111条指令,按功能分类,可分为下面5大类: (1)数据传送类(28条) (2)算术操作类(24条 (3)逻辑运算类(25条) (4)控制转移类(17条) (5)位操作类(17条)描述指令的一些符号描述指令的一些符号rn 当前寄存器区的8个工作寄存器 r0r7(n=07)。ri 当前选中的寄存器区中可作间接寻址 寄存器的2个寄存器r0、r1(i=0,1)。#data16 包含在指令中的16位立即数。rel 相对转移指令中的偏移量,为8位 的带符号补码数dptr 数据指针,可用作16位的地址寄 存器。b

8、it 内部ram或特殊功能寄存器中的直 接寻址位。c 或cy 进位标志位或位处理机中的累加 器。addr11 11位目的地址addr16 16位目的地址 间接寻址寄存器前缀(x) x中的内容。(x) 由x寻址的单元中的内容。 箭头右边的内容被箭头左边的内容 所取代。3.4.1 数据传送类指令1、以累加器a为目的操作数的指令(4条):【例】【例】 若若r0=40h,(30h)=60h,(40h)=50h mov a,r0 ;将工作寄存器;将工作寄存器r0中的数据传送中的数据传送 至至a中,中,a=40h mov a,r0 ;将以;将以r0中内容为地址的存储单中内容为地址的存储单 元中的数据送至元

9、中的数据送至a中中 a=50h mov a,30h ;将直接地址;将直接地址30h存储单元中存储单元中 的数据传送至的数据传送至a中,中,a=60h mov a,#30h ;将立即数;将立即数#30h送入送入a中,中, a=30h2、以rn为目的操作数的指令:【例】:当(a)=30h时, 执行 mov r6,a ;(a)r6 结果: (r6)=30h【例】:当(70h)=10h时, 执行 mov r6,70h ;(70h)r6 结果: (r6)=10h【例】:执行 mov r6,#78h ;78hr6 结果: (r6)=78h3、以直接地址direct为目的操作数的指令:【例】 当(a)=30

10、h时, 执行 mov 55h,a ;(a)55h 结果:(55h)=30h4、以寄存器间接地址为目的操作数的指令:【例】:当(a)=30h时,(r0)=44h 执行 mov r0,a ;(a)(r0) 结果:(44h)=30h【例2】:当(r0)=33h 执行 mov r0,#22h ;22h(r0) 结果:(33h)=22h5、16位数传送指令: 【例】: 执行 mov dptr,#1234h ;1234hdptr 结果: (dptr)=1234h 其中:dph=12h,dpl=34h6、堆栈操作指令:【例】【例】 push 30h;(;(30h)=2bh,操作过程如图,操作过程如图 (2)

11、出栈指令 pop direct 操作:sp指示的栈顶(内部ram单元)内容送入direct字节单元中,栈指针sp减1。【例】【例】 pop a;(;(a)=2bh,操作过程如图,操作过程如图7、累加器a与外部数据存储器传送指令: 采用16位的dptr作间接寻址,可寻址64kb片外ram,高8位地址(dph)由p2口输出,低8位地址(dpl)由p0口输出。 采用ri(i=0,1)作间接寻址,可寻址片外低256个单元的ram。8位地址和数据均由p0口输出,可选用其它任何输出口线来输出高于8位的地址(一般选用p2口输出高8位的地址)。 mov的后面 “x”表示单片机访问的是片外ram或i/o。【例】

12、:(dptr)=1f62h,(1f62h)=70h,执行下列指令: movx a,dptr ;(dptr)a 结果:(a)=70h【例】:(r0)=6fh,(a)=05h,执行下列指令: movx ri,a ;(a)(r0) 结果:(6fh)=05h问题:地址为6fh的存储单元属于片内还是片外?8、查表指令:【例】: (a)=30h,执行地址1000h处的指令 1000h: movc a,a+pc 本指令占用一个字节,下一条指令的地址为1001h,(pc)=1001h再加上a中的30h,得1031h,结果将程序存储器中1031h的内容送入a。 该指令的优点是不改变sfr及pc的状态,根据a的内

13、容就可以取出表格中的常数。缺点是表格只能存放在该条查表指令后面的256个单元之内,表格的大小受到限制,而且表格只能被一段程序所利用。 (2) movc a,a+dptr 操作过程:以dptr作为基址寄存器,a的内容作为无符号数和dptr的内容相加得到一个16位的地址,把由该地址指出的程序存储器单元的内容送到累加器a。 【例】:(dptr)=8100h (a)=40h 执行指令 movc a,a+dptr 结果将程序存储器中8140h单元内容送入累加器a中。 9、字节交换指令:xch a,rn ; (a)(rn),n=07xch a,direct ; (a)(direct)xch a,ri ;

14、(a)(ri)),i=0,1 操作:将累加器a的内容和源操作数的内容相互交换。 源操作数有寄存器寻址、直接寻址、寄存器间接寻址等方式。问题:本指令是否可以采用立即寻址方式。 例如:xch a,#88h 结论:不行【例】: (a)=80h,(r7)=08h,(40h)=f0h (r0)=30h,(30h)=ofh 执行下列指令: xch a,r7 ;(a)(r7) 结果:(a)=08h,(r7)=80h xch a,40h ;(a)(40h) 结果:(a)=f0h,(40h)=08h xch a,r0 ;(a)(r0) 结果:(a)=0fh, (30h)=f0h 最终执行结果: (a)=0fh,

15、(r7)=80h,(40h)=08h,(30h)=f0h10、半字节交换指令:(a)=5eh,(60h)=39h。 【例】设内部ram中30h单元的内容为50h,试分析如下程序。mov60h,#30hmovr0,#60hmova,r0movr1,amov40h,r1mov60h,30h;立即数30h送60h单元,即:30h60h;立即数60h送r0,即:60hr0;间址,60h单元内容送a,即:30ha;a的内容送r1,即:30hr1;间址,30h单元内容送40h,即:50h40h;30h单元内容送60h单元,即:50h60h程序执行结果:(a)=30h,(r0)=60h,(r1)=30h,

16、(60h)=50h,(40h)=50h, (30h)=50h内容不变【例】【例】 按下列要求传送数据:设按下列要求传送数据:设rom(2000h)=abhrom(2000h)=abh (1)rom 2000h (1)rom 2000h单元数据送内单元数据送内ram 10hram 10h单元;单元; (2)r0m 2000h(2)r0m 2000h单元数据送外单元数据送外ram 80hram 80h单元;单元; (3)rom 2000h(3)rom 2000h单元数据送外单元数据送外ram 1000hram 1000h单元;单元;解解(1)(1):mov dptr,#2000h ;置基址2000

17、h,dptr=2000h mov a,#00h ;置变址0,a=00h movc a,a+dptr ;读rom 2000h,a=abh mov 10h,a ;存内ram 10h单元,(10h)=abh解解(2)(2):mov dptr,#1fffh ;置基址1fffh,dptr=1fffh mov a,#01h ;置变址01h,a=01h movc a,a+dptr ;读rom 2000h,a=abh mov r0,#80h ;置外ran间址,r0=80h movx r0,a ;写外ram 80h,外ram(80h)=abh解解(3)(3):mov dptr,#2000h ;置基址2000h,

18、dptr=2000h mov a,#00h ;置变址0,a=00h movc a,a+dptr ;读rom 2000h,a=abh mov dph,1oh ;修改外ran地址,dptr=1000h movx dptr,a ;写外ram 1000h,外ram(1000h)=abh【例】【例】 已知已知romrom中存有中存有0909的平方表,首地址为的平方表,首地址为2000h2000h,试根,试根据累加器据累加器a a中的数值查找对应的平方值,存入内中的数值查找对应的平方值,存入内ram 30hram 30h。( (设设a=3)a=3) 解:解:若用若用dptrdptr作为基址寄存器,可编程如

19、下:作为基址寄存器,可编程如下:1000h1000h:mov dptrmov dptr,#2000h #2000h ;置;置romrom平方表首地址平方表首地址 movc amovc a,a+dptr a+dptr ;a+2000h=2003h(a+2000h=2003h(设设a=3)a=3), ;a=(2003h)=09ha=(2003h)=09h mov 30h mov 30h,a a ;平方值存入内;平方值存入内ram 30hram 30h中中 2000h2000h:00h 00h ;平方表:;平方表:0 02 2=0=02001h2001h:01h 01h ; 1 12 2=1 =1

20、2002h2002h:04h 04h ; 2 22 2=4=42003h2003h:09h 09h ; 3 32 2=9=92004h2004h:10h 10h ; 4 42 2=16=16,16=10h16=10h 2009h2009h:51h 51h ; 9 92 2=81=81,81=51h81=51h3.4.2 算术操作类指令1加法指令: 这4条8位二进制数加法指令的一个加数总是来自累加器a,而另一个加数可由寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等不同的寻址方式得到。其相加的结果总是放在累加器a中。 使用加法指令时,要注意累加器a中的运算结果对各个标志位的影响:(1)如果位7有

21、进位,则置“1”进位标志cy,否则清“0”cy;(2)如果位3有进位,置“1”辅助进位标志ac,否则清“0”ac;(3)如果位6有进位,而位7没有进位,或者位7有进位,而位6没有,则溢出标志位ov置“1”,否则清“0”ov; 溢出标志位ov的状态,只有在带符号数加法运算时才有意义。当两个带符号数相加时,ov=1,表示加法运算超出了累加器a所能表示的带符号数的有效范围(-128+127),即产生了溢出,因此运算结果是错误的,否则运算结果是正确的。 例:(a)=53h,(r0)=fch, 执行指令: add a,r0 运算式为: 0101 0011 b +)1111 1100 b 1 0100 1

22、111 b结果为:(a)=4fh,cy=1,ac=0,ov=0,p=1 注意:上面的运算中,由于位6和位7同时有进位,所以标志位ov=0。【例】 (a)= 85h,(r0)=20h,(20h)=afh,执行指令: add a,r0运算式为: 1000 0101 b +)1010 1111 b 1 00110100 b结果为:(a)=34h,cy=1,ac=1,ov=1,p=1 注意:由于位7有进位,而位6无进位,所以标志位ov=1 2带进位加法指令:例:(a)=85h,(20h)=ffh,cy=1,执行指令:addc a,20h运算式为: 1000 0101 b +)1111 1111 b +

23、) 1 b 110000101 b结果为:(a)=85h,cy=1,ac=1,ov=0,p=1(a中1的位数为奇数)【例】 试编写计算6655h+11ffh的程序,结果送51h (高)、50h(低): mova,#55h adda,#0ffh mov50h,a mova,#66h addc a,#11h mov51h,a3增1指令 : 若变量原来为ffh,加1后将溢出为00h(指前4条指令)。inc a 仅影响p标志,其他指令不影响psw中的任何标志。 第5条指令inc dptr,是16位数增1指令。指令首先对低8位指针dpl的内容执行加1的操作,当产生溢出时,就对dph的内容进行加1操作,不

24、影响标志cy的状态。4十进制调整指令:(2)出错原因和调整方法: 出错原因:bcd码只用到了4位数的二进制编码中的10个,有6个编码没用到。这6个没用到的编码(1010,1011,1100,1101,1110,1111)为无效码。在bcd码的加法运算中,凡结果进入(运算结果大于9)或者跳过(运算结果有进位)无效码编码区时,其结果就是错误的,就需要调整。调整的方法是把结果加6调整,即所谓十进制调整修正。 【例】(a)=56h,(r5)=67h,把它们看作为两个压缩的bcd数,进行bcd数的加法。执行指令: add a,r5 da a 由于高、低4位分别大于9,所以要分别加6进行十进制调整对结果进

25、行修正。 0101 0110 b +)0110 0111 b 1011 1101 b +)0110 0110 b 1 0010 0011 b 结果为: (a)=23h,cy=1 可见,56+67=123,结果是正确的。 【例】2个4位bcd码,分别存入内部ram的50h(低)、51h(高)单元,与60h(低)、61h(高)单元,试编写求这两个数之和的程序,结果存入40h(低)、41h(高)单元。mova,50hadda,60hdaamov40h,amova,51haddc a,61hdaamov41h,a5带借位的减法指令:例 (a)=c9h ,(r2)=54h,cy=1,执行指令: subb a,r2 1100 1001 b -)0101 0100 b -) 1 b 0111 0100 b结果:(a)=74h,cy=0,ac=0,ov=1(位6向位7借位)试编写计算ee33h-a0e0h的程序,结果送51h(高)、50h(低):clrcmova,#33hsubba,#0e0hmov50h,amova,#0eehsubba,#0a0hmov51h,a6减1指令:【例】(a)=0fh,(r7)=19h,(30h)=00h,(r1)=40h

温馨提示

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

评论

0/150

提交评论