第三章:MCS-51单片机的指令系统(2)B_第1页
第三章:MCS-51单片机的指令系统(2)B_第2页
第三章:MCS-51单片机的指令系统(2)B_第3页
第三章:MCS-51单片机的指令系统(2)B_第4页
第三章:MCS-51单片机的指令系统(2)B_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理与控制技术单片机原理与控制技术电气学院:王欣第第03章:章:MCS-51单片机的指令系统单片机的指令系统主要内容:l MCS51单片机的寻址方式l 指令系统的符号说明l 指令集,包括: 数据传送指令; 算术与逻辑操作指令; 控制与转移指令; 位指令(MCU的特点)三、三、MCS51的指令系统介绍(的指令系统介绍(重点重点) 指令集:l 1、数据传送指令;【已介绍】l 2、算术与逻辑操作指令;【本节内容】l 3、控制与转移指令;l 4、位指令(MCU的特点)2、算术与逻辑操作指令、算术与逻辑操作指令 与数据传送指令不同,多数算术运算指令会影响标与数据传送指令不同,多数算术运算指令会影响

2、标志位的状态,即志位的状态,即CPUCPU执行算术运算指令后,根据数据执行算术运算指令后,根据数据操作情况自动设置标志位的状态。操作情况自动设置标志位的状态。复习:状态标志位(PSW中)PSW状态字PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0 标志位CYACF0RS1RS0OVP1 1、用户选择位、用户选择位( (编程设置状态编程设置状态) ) 1 1)F0F0:用户自定义标志位。:用户自定义标志位。 2 2)RS1RS1、RS0RS0: 工作寄存器区选择位。工作寄存器区选择位。 复位时,复位时,PSW=00HPSW=00H例:例:复位后,设置使用工作寄存器

3、复位后,设置使用工作寄存器3 3区,其余标志位不变。区,其余标志位不变。解:解: MOV PSWMOV PSW,#18H#18H;PSW=0001 1000BPSW=0001 1000BPSW状态字PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0 标志位CYACF0RS1RS0OVP2、标志位、标志位(自动设置状态自动设置状态)!算术指令会影响这些位!算术指令会影响这些位!1)Cy:进位标志位:进位标志位保存运算后最高位的进位保存运算后最高位的进位/借位状态,当有进位借位状态,当有进位/借位,借位,Cy=1,否则否则Cy=0。2)AC:辅助进位标志位:辅助进位标

4、志位保存低半字节的进位保存低半字节的进位/借位状态,当借位状态,当D3产生进位产生进位/借位,借位,AC=1,否则否则AC=0。用于十进制调整。用于十进制调整。3)OV:溢出标志位:溢出标志位OV=CyCy7 7 CyCy6 6,补码运算产生溢出补码运算产生溢出OV=1,否则否则OV=0。4)P:奇偶标志位:奇偶标志位反映累加器反映累加器A中数据的奇偶性。当中数据的奇偶性。当1的个数为奇数,的个数为奇数,P=1,否则否则P=0。算术运算指令 (完成片内 RAM 和 A 中数据的加减乘除运算)(1 1)加减法指令)加减法指令1 1)不带进位加法)不带进位加法 格式:格式:ADDADD A A,源

5、源操作数操作数 ADD AADD A,Rn Rn ;AA+R2AA+R2 ADD A ADD A,direct direct ;AA+directAA+direct ADD A ADD A,Ri Ri ;AA+Ri AA+Ri ADD A ADD A,#data #data ;AA+ AA+ (#data#data) 功能:功能:将工作寄存器将工作寄存器RnRn、片内、片内RAMRAM单元中的内容、间接地址寄存器单元中的内容、间接地址寄存器中的中的8 8位无符号二进制数及立即数与累加器位无符号二进制数及立即数与累加器A A中的内容相加,相加中的内容相加,相加的结果仍存放在的结果仍存放在A A中

6、。中。算术运算指令 (完成片内 RAM 和 A 中数据的加减乘除运算) 0011 10110011 1011 + + 0011 10110011 1011 0111 01100111 01107676H 0 0 1 1H 0 0 1 1ADD AADD A,R2 R2 ;AA+R2AA+R2,影响影响CyCy、OVOV、ACAC、P P 例例1 1:A=3BHA=3BH,PSW=0PSW=0,执行指令执行指令 ADD AADD A,#3BH#3BH求:求:A= A= ,Cy= Cy= ,OV= OV= ,AC= AC= ,P= P= ,PSW= PSW= ? 01000001= 41HCyAC

7、F0RS1RS0OVP2 2)带进位加法带进位加法 格式:格式: ADDC AADDC A,源源操作数操作数 ADDC ADDC A A,RnRn ;AA+R2+CYAA+R2+CY ADDC ADDC A A,directdirect ;AA+direct+CYAA+direct+CY ADDC A ADDC A, RiRi ;AA+AA+RiRi +CY +CY ADDC A ADDC A,#data #data ;AA+ AA+ (#data#data)+CY +CY 功能:功能:将工作寄存器将工作寄存器RnRn、片内、片内RAMRAM单元中的内容、间接地址寄存器单元中的内容、间接地址寄

8、存器中的中的8 8位无符号二进制数及立即数与累加器位无符号二进制数及立即数与累加器A A中的内容和当前进位标志中的内容和当前进位标志CYCY的内容相加,相加的结果仍存放在的内容相加,相加的结果仍存放在A A中。中。 格式:格式: ADDC AADDC A,源源操作数操作数 ADDC AADDC A,R2 R2 ;AA+R2+CyAA+R2+Cy,影响影响CyCy、OVOV、ACAC、P P 1001 10101001 1010 1110 00111110 0011 + + 0 0 1 1 0111 11010111 11017 7DH 1 1 0 0DH 1 1 0 0例例2 2:A= 9AH

9、A= 9AH,R2= E3HR2= E3H,PSW= 0PSW= 0,执行指令执行指令ADDC AADDC A,R2R2 后求:后求:A= A= ,Cy= Cy= ,OV= OV= ,AC= AC= ,P= P= ,PSW=PSW= ? 10000100 = 84HCyACF0RS1RS0OVP举例:举例:设双字节数设双字节数 X X 存在片内存在片内RAMRAM 41 41H H、40H40H单元,单元,Y Y存在存在4242H H、43H43H单元,编程求单元,编程求 Z=X+YZ=X+Y,并存入片内并存入片内RAMRAM单元单元4444H H、45H45H、46H46H。ADDSADDS

10、:MOV AMOV A,40H40HADD AADD A,42H42HMOV 44HMOV 44H,A AMOV AMOV A,41H41HADDC AADDC A,43H43HMOV 45HMOV 45H,A AMOV AMOV A,#0#0ADDC AADDC A,#0#0MOV 46HMOV 46H,A ARETRET;取被加数低字节取被加数低字节;加上加数低字节;加上加数低字节;保存和的低字节;保存和的低字节;取被加数高字节;取被加数高字节;加上加数高字节;加上加数高字节;保存和的高字节;保存和的高字节;求高字节进位;求高字节进位;子程序结束;子程序结束;低字节相加;低字节相加;高字节

11、相加;高字节相加;计算高字节进位;计算高字节进位;子程序结束;子程序结束片内片内RAM地址地址内容内容46HZH45HZM44HZL43HYH42HYL41HXH40HXLBCDBCD调整指令(二进制到十进制调整):调整指令(二进制到十进制调整):DA ADA A; 对对 A A 中加法结果进行调整中加法结果进行调整功能:功能:对对BCDBCD码的加法结果进行调整。两个压缩码的加法结果进行调整。两个压缩BCDBCD码按二进制数码按二进制数相加后,必须经此指令调整才能得到压缩相加后,必须经此指令调整才能得到压缩BCDBCD码的码的“和和”。BCD码的运算:码的运算:例、例、 1 8 +) 3 2

12、 1 0 0 0 1 1 0 0 0+)0 0 0 0 0 0 1 1 0 0 0 1 1 0 1 1 B是非是非BCD码(错)码(错)需进行十进制调整:需进行十进制调整: 0 0 0 1 1 0 0 0 +)0 0 0 0 0 0 1 1 0 0 0 1 1 0 1 1 (个位大于(个位大于9,应进,应进1) +) 0 1 1 0 (加(加6使进使进1) 0 0 1 0 0 0 0 1 (结果形如(结果形如21) 十进制数的编码十进制数的编码(BCD码码)对机器:二进制数方便,对机器:二进制数方便,对人对人 :二进制数不直观,习惯于十进制数。:二进制数不直观,习惯于十进制数。在编程过程中,有

13、时需要采用十进制运算,但机器不认识十进制数。在编程过程中,有时需要采用十进制运算,但机器不认识十进制数。怎么办?怎么办?可以将十进制的字符用二进制数进行编码:可以将十进制的字符用二进制数进行编码: 0 0000 5 0101 1010 1111 1 0001 6 0110 1011 2 0010 7 0111 1100 3 0011 8 1000 1101 4 0100 9 1001 1110 这叫做二进制数对十进制编码这叫做二进制数对十进制编码BCD码码(Binary-Coded Decimal) 。上述每上述每4位二进制数表示一个十进制字符,这位二进制数表示一个十进制字符,这4位中各位的权

14、依次是:位中各位的权依次是: 8、4、2、18421 BCD码。码。BCD码码没采用没采用紧跟着加法指令使用!紧跟着加法指令使用! 十进制加法指令:十进制加法指令:ADD AADD A,源操作数源操作数DA ADA A 带进位十进制加法指令:带进位十进制加法指令:ADDC AADDC A,源操作数源操作数 DA ADA A思考题思考题:BCDBCD码加法编程。码加法编程。设设X X、Y Y为为2 2个个4 4位压缩位压缩BCDBCD码码, ,分别存放在内部分别存放在内部RAMRAM的的50H50H、51H51H和和60H60H、61H61H单元中,试编写程序求单元中,试编写程序求 Z=X+YZ

15、=X+Y,结果存入,结果存入40H40H和和41H41H。BCDBCD调整指令(二进制到十进制调整):调整指令(二进制到十进制调整):DA ADA A; 对对 A A 中加法结果进行调整中加法结果进行调整3)减法指令)减法指令SUBB A,源操作数;带借位减法指令 SUBB SUBB A A,RnRn ;AA-R2-CYAA-R2-CY SUBB SUBB A A,directdirect ;AA-direct-CYAA-direct-CY SUBB A SUBB A, RiRi ;AA-AA-RiRi -CY -CY SUBB A SUBB A,#data #data ;AA- AA- (#

16、data#data)-CY -CY 功能:功能:从从A A中减去进位位中减去进位位CYCY和指定的变量,结果存入和指定的变量,结果存入A A中。中。3)减法指令)减法指令SUBB A,源操作数;带借位减法指令SUBB ASUBB A,R2R2;AA-R2-CyAA-R2-Cy,;影响影响CyCy、OVOV、ACAC、P P00 0 0 0 000 0 0 0 0习题:习题:编程求双字节减法编程求双字节减法。设设X X、Y Y分别存放在内部分别存放在内部 RAM 50HRAM 50H、51H51H和和60H60H、61H61H单元中,试编写程序计算单元中,试编写程序计算 Z=X-Y,Z=X-Y,

17、结果存入结果存入40H40H和和41H 41H 。举例:举例:A= 5AHA= 5AH,R2= 5AHR2= 5AH,Cy= 0Cy= 0,执行下列指令执行下列指令SUBB ASUBB A,R2R2求:求:A= A= ,Cy= Cy= ,OV= OV= ,P= P= ,AC= AC= ?l 如何实现10进制减法 MCS51指令系统中没有十进制减法指令,故利用十进制加法调整指令系统中没有十进制减法指令,故利用十进制加法调整指令(指令(DA A)作为十进制减法调整,必须采用补码相加的办法。)作为十进制减法调整,必须采用补码相加的办法。用用9AH减去减数即得到其以减去减数即得到其以10为模的补码。为

18、模的补码。 如:十进制减法如:十进制减法 7235? 72补补【35】补补 MOV R2,#72MOV R3,#35CLR C ;Cy清0MOV A,#9AH ;求减数补码SUBB A,R3ADD A,R2 ;补码相加DA A ;BCD码调整MOV R3,A ;结果存入R3CLR C ;Cy清0(2 2) 增量、减量指令(增量、减量指令(不影响标志位状态不影响标志位状态?!)?!)功能功能:把指令中所指出的变量增把指令中所指出的变量增1 1,且不影响程序状态字,且不影响程序状态字PSWPSW中的任何标志。中的任何标志。 INC INC RnRn ; RnRn Rn+1 Rn+1 INC dir

19、ect INC direct ; direct direct+1 direct direct+1 INC INC RiRi ; RiRi RiRi +1 +1 INC A INC A ;AA+1AA+1 INC DPTR INC DPTR ; DPTR DPTR +1 DPTR DPTR +11 1) 增量增量(2 2) 增量、减量指令(增量、减量指令(不影响标志位状态不影响标志位状态?!)?!)注意:没有指令注意:没有指令 DEC DPTR DEC DPTR 可用指令可用指令 DEC DPL DEC DPL 代替代替。 不影响程序状态字不影响程序状态字PSWPSW中的任何标志。中的任何标志。

20、 DEC DEC RnRn ; RnRn Rn-1 Rn-1 DEC direct DEC direct ; direct direct-1 direct direct-1 DEC DEC RiRi ; RiRi RiRi -1 -1 DEC A DEC A ;AA-1AA-12 2) 减量减量(3 3)乘除指令)乘除指令MUL ABMUL AB;B B815815A A0707AAB B,Cy0Cy0,;当高字节当高字节B=0B=0,OV0OV0;B0B0,则则OV1OV1举举例:例:A= 96(60H), B= 192(C0H)A= 96(60H), B= 192(C0H),执行指令执行指

21、令 MUL AB MUL AB 后,后, 求:求:A= A= ,B= B= ,Cy= Cy= ,OV= OV= ,P= P= ?解:解: 96 96 192 = 18432(4800192 = 18432(4800H)H)0000H 48H 0 1 H 48H 0 1 0 0功能功能:把把A A和和B B中两个无符号中两个无符号8 8位数相乘,所得位数相乘,所得1616位积的低位积的低8 8位存位存于于A A中,高中,高8 8位存于位存于B B中。中。 如果成绩大于如果成绩大于255255,即高位,即高位B B不为不为0 0时,时,OVOV置位;否则置位;否则清清0 0。CYCY总是清总是清0

22、 0 。(3)乘除指令 12H 0CH 0 0 12H 0CH 0 0 0 0举举例:例:A= 156(F6H)A= 156(F6H),B= 13(0DH)B= 13(0DH),执行指令执行指令 DIV AB DIV AB 后后求:求:A= A= ,B= B= ,Cy= Cy= ,OV= OV= ,P= P= ?解:解: 156156 1 13 3 = 1 = 18 8( (12H)12H),余数余数= = 1 12 2( (0CH)0CH)。DIV AB DIV AB ;A AB B,AA商,商,BB余数,余数,Cy0Cy0,;当除数当除数B=0B=0,OV1OV1;B0B0,则则OV0OV

23、0功能功能:把把A A中无符号中无符号8 8位二进制数除以位二进制数除以B B中的无符号中的无符号8 8位二进制数,位二进制数,所得的商(整数)存于所得的商(整数)存于A A中,余数存于中,余数存于B B中。中。OVOV和和CYCY总是清总是清0 0 。 当除数当除数B=0B=0时,结果不定,则时,结果不定,则OV OV 置置1.1.算术指令小结:算术指令小结:l ADD、ADDC、DAl SUBBl MUL、DIVl INC、DEC逻辑运算指令 (完成清零、取反、移位及位逻辑运算)。(1 1)单操作数指令()单操作数指令(A A累加器为操作数)累加器为操作数)1) A A清清0 0指令:指令

24、: CLR A CLR A ;A0A02) A A取反指令:取反指令:CPL A CPL A ;A/AA/A 3)循环移位指令:循环移位指令: 8 8位循环指令:位循环指令: RL ARL A ;A A循环左移一位循环左移一位 RR ARR A ;A A循环右移一位循环右移一位 9 9位循环指令:位循环指令: RLC ARLC A;带带CyCy循环左移一位循环左移一位 RRC ARRC A;带带CyCy循环右移一位循环右移一位用用9 9位循环指令实现多字节移位位循环指令实现多字节移位举例:编程将寄存器 R6R5 中的双字节数X左移一位。CLR CMOV A,R5RLC AMOV R5,AMOV

25、 A,R6RLC AMOV R6,A0CyR6R5Cy;Cy=0, 设 R6= 55H ,R5= AAH;R6=01010101,R5=10101010,Cy=0;R6=01010101,R5=01010100,Cy=1;R6=10101011,R5=01010100,Cy=0思考题:如何将寄存器R6R5中的双字节数X右移一位。举例:利用循环移位指令将累加器A的内容乘以10。MOV A,#01HRL AMOV R2,ARL ARL AADD A,R2;把累加器A的内容乘以2;把累加器A的内容乘以2;把累加器A的内容乘以2(2)双操作数逻辑运算指令(对位逻辑运算):ANL、ORL、XRL“与操作

26、与操作”:ANL A,Rn ; (A) (A)(Rn),),以下类同。以下类同。ANL A,directANL A,RiANL A,#dataANL direct,AANL direct,#data 例例1、(、(P1)= 35H,使其高使其高4位输出位输出0,低,低4位不变。位不变。解;解; ANL P1,#0FH 此做法称为此做法称为“屏蔽屏蔽”位。位。 (2)双操作数逻辑运算指令(对位逻辑运算):ANL、ORL、XRL“或操作或操作”:ORL A,Rn ; (A) (A)(Rn),),以下类同。以下类同。ORL A,directORL A,RiORL A,#dataORL direct,

27、AORL direct,#data 例例2、将、将A中的低中的低3位送入位送入P1中,并且保持中,并且保持P1中高中高5位不变。位不变。ANL A,#07HANL P1,#0F8HORL P1,A ;(;(P1)= P17P16P15P14P13A2A1A0这称为这称为“数位组合数位组合”。 ( (2)2)双操作数逻辑运算指令双操作数逻辑运算指令( (对位逻辑运算对位逻辑运算) ):ANLANL、ORLORL、XRLXRL“异或操作异或操作”:XRL A,Rn ; (A) (A) (Rn),),以下类同。以下类同。XRL A,directXRL A,RiXRL A,#dataXRL direc

28、t,AXRL direct,#data例例3、设(、设(P1)= 0B4H = 10110100B,执行:执行: XRL P1,#00110001B 结果按结果按# 0 0 1 1 0 0 0 1 取反,即:取反,即: (P1)= 1 0 0 0 0 1 0 1 B = 85H 这称为这称为“指定位取反指定位取反”。 ( (2)2)双操作数逻辑运算指令双操作数逻辑运算指令( (对位逻辑运算对位逻辑运算) ):ANLANL、ORLORL、XRLXRL习题习题1 1:如何将累加器如何将累加器A A中的数据高中的数据高4 4位清位清0 0,低位不变?,低位不变?例:例:A=01A=01B B,表示随机状态,为表示随机状态,为1 1或或0 0,执行下,执行下述一组指令执行后述一组指令执行后A A的值如何的值如何? ? XRL AXRL A,#0C0H#0C0H ORL AORL A,#03H#03HANL AANL A,#0E7H#0E7H ;将累加器将累加器A A的内容的内容D D7 7、D D6 6取反取反 ;将累加器将累加器A A的内容的内容D D1 1、D D0 0置置1 1 ;将累加器将累加器A A的内容的内容D D4 4、D

温馨提示

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

评论

0/150

提交评论