第三章指令系统及程序设计举例.ppt

上传人:本田雅阁 文档编号:3139391 上传时间:2019-07-16 格式:PPT 页数:173 大小:1.54MB
返回 下载 相关 举报
第三章指令系统及程序设计举例.ppt_第1页
第1页 / 共173页
第三章指令系统及程序设计举例.ppt_第2页
第2页 / 共173页
第三章指令系统及程序设计举例.ppt_第3页
第3页 / 共173页
第三章指令系统及程序设计举例.ppt_第4页
第4页 / 共173页
第三章指令系统及程序设计举例.ppt_第5页
第5页 / 共173页
点击查看更多>>
资源描述

《第三章指令系统及程序设计举例.ppt》由会员分享,可在线阅读,更多相关《第三章指令系统及程序设计举例.ppt(173页珍藏版)》请在三一文库上搜索。

1、第三章 指令系统及程序设计举例,Exit,3.3 89C51指令系统,3.1 汇编语言,3.2 寻址方式,3.4 程序设计举例,3.1 汇编语言,3.1.1 指令和程序设计语言 3.1.2 指令格式,BACK,3.1.1 指令和程序设计语言,指令:是CPU根据人的意图来执行某种操作的命令。,程序设计语言:是实现人机交换信息的基本工具,分为机器语言、汇编语言和高级语言。,机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言。,汇编语言:是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。,BACK,3.1.2 指令格式,89C51汇编语言指令格式 操作码

2、 目的操作数,源操作数;注释 汇编语言指令对应的二进制代码格式 单字节指令 双字节指令 三字节指令,BACK,单字节指令,1、指令码中隐含着对某一种寄存器的操作 如:指令“INC DPTR”的指令代码格式为:A3H=1 0 1 0 0 0 1 1 2、由指令中的rrr三位的不同编码指定某一寄存器 如:指令“MOV A,Rn”的指令代码格式为:1 1 1 0 1 r r r,BACK,双字节指令,用一个字节表示操作码,另一个字节表示操作数或操作数所在的地址。 格式为:,操作码,立即数或地址,BACK,三字节指令,一个字节操作码,两个字节操作数。 格式为:,操作码,立即数或地址,立即数或地址,BA

3、CK,3.2 寻址方式,一、什么是寻址方式:如何找到存放操作数的地址,把操作数提取出来的方法。 二、寻址方式的种类: 三、寻址空间及符号注释:,BACK,二、寻址方式的种类:,1、寄存器寻址 2、直接寻址 3、立即数寻址 4、寄存器间接寻址 5、变址寻址 6、相对寻址 7、位寻址,BACK,1、寄存器寻址,寄存器寻址:由指令指出寄存器组R0R7中的某一个或其他寄存器(A,B,DPTR等)的内容作为操作数。 例如:MOV A,R0;(R0)A MOV P1,A;(A)P1口 ADD A,R0;(A)+(R0)A,BACK,2、直接寻址,直接寻址方式:在指令中直接给出操作数所在存储单元的地址。指令

4、中操作数部分是操作数所在地址。 直接寻址方式可访问片内RAM的128个单元以及所有的SFR。对于SFR,既可以使用它们的地址,也可以使用它们的名字。 例如:MOV A,3AH;(3A) A MOV A,P1;(P1口) A 或: MOV A,90H; 90H是P1口的地址,BACK,3、立即数寻址,立即数寻址:指令操作码后面紧跟的是一字节或两字节操作数,用“#”号表示,以区别直接地址。 例如: MOV A,3AH;(3AH)A MOV A,#3AH;3AHA MOV DPTR,#2000H;2000HDPTR ;(DPH)=20H ;(DPL)=00H,BACK,4、寄存器间接寻址,寄存器间接

5、寻址:操作数的地址事先存放在某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。 89C51规定R0或R1为间接寻址寄存器,它可寻址内部地址RAM低位的128B单元内容。还可采用DPTR作为间接寻址寄存器,寻址外部数据存储器的64KB空间。 例如,BACK,例如:将片内RAM 65H单元内容47H送A,可执行指令“MOV A,R0”。其中R0内容为65H。如图所示:,65H,47H,R0,A,数据存储器,地址,65H,以指令中所指定的R0内容(65H)为指针,将片内RAM 65H单元内容47H送A,BACK,5、变址寻址(基址寄存器+变址寄存器间接寻址

6、),变址寻址:以某个寄存器的内容为基地址,在这个基地址的基础上加上地址偏移量形成真正的操作数地址。 89C51中采用DPTR或PC为变址寄存器,A的内容为地址偏移量。 变址寻址只能访问程序存储器,访问范围为64KB。 例如,BACK,例如:MOVC A,A+DPTR;(A)+(DPTR)A 如图所示,0302H,ROM,DPTR,A,A,02F1H,11H,1EH,+,DPTR内容与A的内容之和为程序存储器地址,程序存储器内容送A,BACK,6、相对寻址,相对寻址:是以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。 相对寻址只出现在相对转移指令中。 当前的PC值是指执行完相对指

7、令后的PC值;相对转移指令操作码所在地址称为源地址;转移后的地址称为目的地址。 目的地址=源地址+相对转移指令字节数+rel rel为补码表示的有符号数。 例如:,BACK,7、位寻址,位寻址:采用位寻址方式的指令的操作数是8位二进制数中的某一位,指令中给出的是位地址。位地址在指令中用bit表示。 例如:CLR bit; 位地址的两种表示方法:直接使用位地址,如D3H;直接用寄存器名字加位数,如PSW.3。 位寻址区域:片内RAM的20H-2FH的16个单元中的128位;字节地址能被8整除的SFR。,BACK,三、寻址空间及符号注释,1、寻址空间:见表3-2。 2、符号注释:,BACK,表3-

8、2 操作数寻址方式和有关空间,BACK,符号注释,Rn(n=0-7):当前选中的工作寄存器组R0-R7。 Ri(I=0,1):作为地址指针的两个工作寄存器R0,R1。 #data:8位立即数。 #data16:16位立即数。 direct:8位片内RAM单元(包括SFR)的直接地址。 addr11:11位目的地址,用于ACALL和AJMP指令中。 addr16:16位目的地址。用于LCALL和LJMP指令中。 rel:补码表示的8位地址偏移量。范围:-128-+127D。 bit:片内RAM或SFR的直接寻址位地址。 :间接寄存器的符号。 /:位操作指令中对该位先取反再参与操作,不影响原值。

9、():中的内容。 ():指出的地址单元中的内容。 :指令操作流程方向。,BACK,BACK,MCS-51指令系统可分为五大类,1 数据传送指令:28条 2 算术运算指令:24条 3 逻辑运算及移位指令:25条 4 控制转移指令:17条 5 位操作指令(布尔操作):17条,Back,3.3.1 数据传送指令, 1.以累加器A为目的操作数的指令 (4条,即4种寻址方式) 2.以寄存器Rn为目的操作数的指令(3条) 3.以直接地址为目的操作数的指令(5条) 4.以间接地址为目的操作数的指令(3条),Back, 5.十六位数据传送指令(1条) 6.查表指令(2条) 7.累加器A与片外RAM传送指令(4

10、条) 8.栈操作指令(二条) 9.交换指令(4条),Back,Back,1.以累加器A为目的操作数的指令 (4条,即4种寻址方式),例:,MOV A,#30H ;(A)=30H MOV A, 30H ;(A)=11H MOV A,R1 ;(A)=11H MOV A,R1 ;(A)=30H,MOV A,#30H ;(A)=30H MOV A, 30H ;(A)=11H MOV A,R1 ;(A)=11H MOV A,R1 ;(A)=30H,Back,2 、以寄存器Rn为目的操作数的指令(3条),Back,直接寻址和立这组指令的功能是把源操作数所指定的内容送到当前工作寄存器组R0R7中的某个寄存器

11、。源操作数有寄存器寻址,即数寻址三种方式。,如:(A)=78H,(R5)=47H,(70H)=F2H,执行指令:,MOV R5,A ;(A) R5, (R5)=78H MOV R5,70H ;(70H) R5, (R5)=F2H MOV R5,#A3H; A3H R5, (R5)=A3H 注意,在89C51指令系统中没有“MOV Rn,Rn”传送指令。,Back,3 、以直接地址为目的操作数的指令(5条),Back,Back,4 、以间接地址为目的操作数的指令(3条),Back,Back,Ri,direct,Rn,#data,ACC,图36 传送指令在片内存储器的操作功能,5、 十六位数据传送

12、指令(1条),这条指令的功能是把16位常数送入DPTR。DPTR由DPH和DPL组成。,Back,Back,6 、查表指令(2条),Back,基地址寄存器+变址寄 存器间接寻址PC+A (程序存储器0-64K),基地址寄存器+变址寄存 器间接寻址DPTR+A (程序存储器0-64K),A寄存器,图3-7 程序存贮器传送(查表),例:,执行下面程序段后结果如何?,MOV DPTR, #2000H ;(DPTR)=2000H MOV A , #0AH ;(A)=0AH MOVC A , A+DPTR ; (A)=(A)+(DPTR)=(200AH) 则:(A)=(200AH)=11H,例:,所以,

13、最后结果为:(A)=01 (R0)=01 (PC)=1004,Back,7、 累加器A与片外RAM传送指令(4条),Back,第2,4两条指令以DPTR为片外数据存储器16位地址指针,寻址范围达64KB。其功能是DPTR所指定的片外数据存储器与累加器A之间传送数据。 第1,3两条指令是用R0或R1作低8位地址指针,由P0口送出,寻址范围是256字节。这两条指令完成以R0或R1为地址指针的片外数据存储器与累加器A之间的传送数据。 上述四条指令的操作如图3-8所示:,寄存器,寄存器间接寻址,寄存器间接寻址,R1.R0,DP,(,外,RAM0-255),(,外,RAM0-64K),图,3-8,外部数

14、据存储器传送操作,例: 若:片内RAM (30H)=01H,片外RAM (30H)=02H,执行下面程序段后的结果如何。,Back,8 、栈操作指令(二条),Back,例:,继续上例:,Back,9、 交换指令(4条),Back,(1)字节变换指令,例:,(2) 半字节交换指令,Back,3.3.2 算术运算指令, 1 .不带进位加法指令(四条) 2 .带进位加法指令(四条) 3 .带借位减法指令(四条) 4 . 乘法指令(1条),Back, 5、 除法指令(1条) 6、 加1指令(5条) 7、 减1指令(4条) 8、 十进制调整指令(1条),Back,1 、 不带进位加法指令(四条),Bac

15、k,例:,Back,2 、带进位加法指令(四条),Back,例:设(A)=0C3H,(R0)=0AAH, (CY)=1。 执行指令“ADDC A,R0”后的结果 及标志位如何?,例:编程,将(30H),(31H)单元中的数与 (40H),(41H)单元中的数相加,结 果存于(30H),(31H)单元中。,Back,3 、带借位减法指令(四条),Back,这组指令的功能是从累加器A中减去源操作数所指出的数及进位位CY的值,差保留在累加器A中。 由于89C51指令系统中没有不带借位的减法指令,如需要的话,可以在“SUBB”指令前用“CLR C”指令将Cy清0,这一点必须注意。,例:设(A)=0C9

16、H,(R2)=54H,Cy=1。 执行指令“SUBB A, R2”的结果如何?,Back,4、 乘法指令(1条),该指令若乘积大于0FFH,则OV置1,否则OV清0。Cy位总是被清0。,Back,例:(A)=4EH,(B)=5DH, 执行指令“MUL AB”后结果如何?,Back,5、 除法指令(1条),Back,Back,6、 加1指令(5条),Back,例: 若:(R1)=30H ,(30H)=11H 求执行下面指令后的结果。 INC R1; (30H)=12H INC R1 ; (R1)=31H,Back,7、 减1指令(4条),Back,8、 十进制调整指令(1条),Back,例: 设

17、累加器A内容为:01010110B(即为56的BCD码),寄存器R3的内容为01100111B(即67的BCD码),CY内容为1。求执行下列指令后的结果。 ADDC A,R3; DA A;,Back,3.3.3 逻辑操作指令,Back, 1 .简单操作指令(2条) 2 .移位指令(4条) 3 .累加器半字节交换指令 4. 逻辑“与”指令(6条) 5. 逻辑“或”指令(6条) 6 .逻辑“异或”指令(6条),Back,1 .简单操作指令(2条),Back,(1) 累加器A清0指令,(2)累加器A取反指令,Back,2 .移位指令(4条),Back,(1)累加器A循环左移指令,(2) 累加器A循环

18、右移指令,(3) 累加器A连同进位位循环左移指令 RLC A ;,(4) 累加器A连同进位位循环右移指令 RRC A ;,Back,3 . 累加器半字节交换指令,Back,4. 逻辑“与”指令(6条),Back,这组指令中前四条指令是将累加器A的内容和操作数所指出的内容按位进行逻辑“与”,结果存放在A中。 后两条指令是将直接地址单元中的内容和操作数所指出的单元的内容按位进行逻辑“与”,结果存入直接地址单元中。若直接地址正好是I/O端口,则为“读改写”操作。,Back,5. 逻辑“或”指令(6条),Back,这组指令的功能是将两个指定的操作数按位进行逻辑“或”,前四条指令的操作结果存放在累加器A

19、中,后两条指令的操作结果存放在直接地址单元中。,Back,6 .逻辑“异或”指令(6条),Back,这组指令的功能是将两个指定的操作数按位进行“异或”,前四条指令的结果存放在累加器A中,后两条指令的操作结果存放在直接地址单元中。 上述逻辑操作类指令归纳如图。这类指令的操作均只影响标志位P。,Back,3.3.4 控制程序转移类指令, 1 . 无条件转移指令(4条) 2 . 空操作指令(1条) 3 . 条件转移指令(8条) 4 . 调用和返回指令,Back,Back,1、无条件转移指令(4条),Back,(1)短转移指令,Back,这条指令提供了11位地址,可在2K范围内无条件转移到由a10-a

20、0所指出的地址单元中。 因为指令只提供低11位地址,高5位为原PC11-15位值,因此,转移的目标地址必须在AJMP指令后面指令的第一个字节开始的同一2K字节范围内。,Back,(2) 长转移指令,Back,Back,(3) 相对转移(短转移)指令,Back,SJMP rel ;,0000 rel (相对地址),先(PC)+2 PC 后(PC)+rel PC,Back,(4) 间接转移指令,Back,Back,2 空操作指令(1条),Back,3 条件转移指令(8条),Back,(1) 判零转移指令,Back,Back,(2)比较转移指令(4条),Back,Back,(3)循环转移指令(2条)

21、,Back,程序每执行一次本指令,将第一操作数的字节变量减1,并判字节变量是否为零,若不为0,则转移到目标地址,继续执行循环程序段;若为0,则结束循环程序段的执行,程序往下执行。 其中,rel为相对于DJNZ指令的下一条指令的第一个字节相对偏移量,用一个带符号的8位数表示。所以,循环转移的目标地址应为DJNZ指令的下条指令地址和偏移量之和。,Back,4 调用和返回指令,Back,(1)短调用指令,Back,例如:设符号地址“SUBRTN”所对应的程 序存储器实际地址为0345H,在 (PC)=0123H处 执行指令ACALL SUBRTN,Back,(2)长调用指令,Back,例如:设(SP

22、)=07H,符号地址“SUBRTUN” 指向程序存储器的5678H(PC)=0123H。从0123H处执行指令 LCALL SUBRTUN,Back,(3)返回指令(2条),Back,Back,3.3.5 位操作(布尔处理)类指令(17条), 1、位数据传送指令(2条) 2、位修正指令(6条) 3、逻辑运算指令(4条) 4、位条件转移类指令(5条),Back,在进行位操作时,进位标志位CY布尔累加器(位累加器),简写成C。 位寻址区: 片内RAM字节地址20H2FH单元中连续的128位(位地址00H7FH)和部分特殊功能寄存器SFR。,位地址的表达方式:,接写位地址: 如D4H; 点操作符号:

23、 如PSW.4(D0H).4; 位名称方式: 如RS1; 用户定义名方式:如用伪指令bit,Back,1、 位数据传送指令(2条),Back,2、位修正指令(6条),Back,(1)位清0指令,(2)位置1指令(2条),Back,(3)位取反指令(2条),Back,3、 逻辑运算指令(4条),Back,(1)位逻辑“与”指令(2条),Back,(2)位逻辑“或”指令(2条),Back,4、位条件转移类指令(5条),Back,Back,(2)判位变量转移指令(2条),Back,(3)判位变量并清0转移指令(1条),Back,3.4 程序设计举例,一 简单程序设计举例 二 分支程序 三 循环程序

24、四 子程序设计举例 五 代码转换程序设计举例 六 运算类程序设计举例,Back,一 简单程序设计举例,例1 :拆字。将片内RAM 20H单元的内容拆成两段,每段四位。并将它们分别存入21H与22H单元中。程序如下:,Back,例2:16位数求补。设16位二进制数在R1R0中,求补结果存3于R3R2中。,Back,例1:片内RAM ONE和TWO两个单元中存有两个无符号数,将两个数中的小者存入30H单元。程序如下:,二 分支程序,Back,Back,三 循环程序,例1:统计字串长度。内存从STRING开始有一字串,该字串以$结束,试统计该字串长度,结果存于NUM单元中。,Back,Back,四

25、子程序设计举例,例1:用查表法编一子程序,将40H单元中的BCD码转换成ASCII码。 入口:待转换数在(40H) 出口:转换后的数(40H),Back,若将30H单元BCD码转换成ASCII码,利用SUB1子程序。,Back,五 代码转换程序设计举例,例1:R1中存有一个BCD码,编一子程序将其转换为ASCII码,存入片外RAM1000H单元中去。,Back,片外RAM2000H单元中有一BCD码,编一子程序将其转换成ASCII码。,Back,六 运算类程序设计举例,例1:片内RAM30H单元开始有10个字节的二进制数。编一子程序,求它们的和。(和256)将和存入20H单元中。,Back,例2:编写将30H,31H单元中的两字节二进制数乘以2的程序(积小于65536),Back,谢谢大家 再见!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1