第三章: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页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理与控制技术电气学院:王欣第03章:MCS-51单片机的指令系统主要内容:MCS51单片机的寻址方式指令系统的符号说明指令集,包括:

数据传送指令;

算术与逻辑操作指令;控制与转移指令;位指令(MCU的特点)三、MCS51的指令系统介绍(重点)指令集:1、数据传送指令;【已介绍】2、算术与逻辑操作指令;【本节内容】3、控制与转移指令;4、位指令(MCU的特点)2、算术与逻辑操作指令

与数据传送指令不同,多数算术运算指令会影响标志位的状态,即CPU执行算术运算指令后,根据数据操作情况自动设置标志位的状态。

复习:状态标志位(PSW中)PSW状态字PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0

标志位CYACF0RS1RS0OV—P1、用户选择位(编程设置状态)

1)F0:用户自定义标志位。

2)RS1、RS0:

工作寄存器区选择位。

复位时,PSW=00H例:复位后,设置使用工作寄存器3区,其余标志位不变。解:MOVPSW,#18H;PSW=00011000BPSW状态字PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0

标志位CYACF0RS1RS0OV—P2、标志位(自动设置状态)!!算术指令会影响这些位!!!!1)Cy:进位标志位 保存运算后最高位的进位/借位状态,当有进位/借位,Cy=1,否则Cy=0。2)AC:辅助进位标志位 保存低半字节的进位/借位状态,当D3产生进位/借位,AC=1,否则AC=0。用于十进制调整。3)OV:溢出标志位

OV=Cy7ÅCy6,补码运算产生溢出OV=1,否则OV=0。4)P:奇偶标志位 反映累加器A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。算术运算指令

(完成片内RAM和A中数据的加减乘除运算)

(1)加减法指令 1)不带进位加法

格式:ADD

A,源操作数

ADDA,Rn;A←A+R2ADDA,direct;A←A+directADDA,@Ri;A←A+@RiADDA,#data;A←A+(#data)

功能:将工作寄存器Rn、片内RAM单元中的内容、间接地址寄存器中的8位无符号二进制数及立即数与累加器A中的内容相加,相加的结果仍存放在A中。算术运算指令

(完成片内RAM和A中数据的加减乘除运算)

00111011

+00111011

0111011076H0011

ADDA,R2;A←A+R2,影响Cy、OV、AC、P

例1:A=3BH,PSW=0,执行指令ADDA,#3BH求:A=,Cy=,OV=,AC=,P=, PSW=?01000001=41HCyACF0RS1RS0OV—P

2)带进位加法

格式:

ADDCA,源操作数

ADDCA,Rn;A←A+R2+CYADDCA,direct;A←A+direct+CYADDCA,@Ri;A←A+@Ri+CYADDCA,#data;A←A+(#data)+CY

功能:将工作寄存器Rn、片内RAM单元中的内容、间接地址寄存器中的8位无符号二进制数及立即数与累加器A中的内容和当前进位标志CY的内容相加,相加的结果仍存放在A中。

格式:

ADDCA,源操作数

ADDCA,R2;A←A+R2+Cy,影响Cy、OV、AC、P

10011010

11100011

+

0

1

011111017DH1100

例2:A=9AH,R2=E3H,PSW=0,执行指令

ADDCA,R2

后求:

A=

,Cy=,OV=,AC=,P=

PSW=

?10000100=84HCyACF0RS1RS0OV—P带进位加法指令ADDC用于多字节运算举例:设双字节数X存在片内RAM41H、40H单元,Y存在42H、43H单元,编程求Z=X+Y,并存入片内RAM单元44H、45H、46H。ADDS:MOVA,40H ADDA,42H MOV44H,A MOVA,41H ADDCA,43H MOV45H,A MOVA,#0 ADDCA,#0 MOV46H,A RET;取被加数低字节;加上加数低字节;保存和的低字节;取被加数高字节;加上加数高字节;保存和的高字节;求高字节进位;子程序结束;低字节相加;高字节相加;计算高字节进位;子程序结束片内RAM地址内容46HZH45HZM44HZL43HYH42HYL41HXH40HXLBCD调整指令(二进制到十进制调整):

DAA;对A中加法结果进行调整功能:对BCD码的加法结果进行调整。两个压缩BCD码按二进制数相加后,必须经此指令调整才能得到压缩BCD码的“和”。BCD码的运算:例、18+)321

00011000+)00000011

00011011

B是非BCD码(错)需进行十进制调整:

00011000

+)0000001100011011(个位大于9,应进1)

+)0110(加6使进1)00100001(结果形如21)十进制数的编码(BCD码)对机器:二进制数方便,对人:二进制数不直观,习惯于十进制数。在编程过程中,有时需要采用十进制运算,但机器不认识十进制数。怎么办?可以将十进制的字符用二进制数进行编码:

0

0000501011010111110001601101011

2

00107011111003001181000110140100910011110

这叫做二进制数对十进制编码——BCD码(Binary-CodedDecimal)

。上述每4位二进制数表示一个十进制字符,这4位中各位的权依次是:8、4、2、1——8421BCD码。BCD码没采用紧跟着加法指令使用!——

十进制加法指令: ADDA,源操作数

DAA带进位十进制加法指令:ADDCA,源操作数

DAA思考题:BCD码加法编程。 设X、Y为2个4位压缩BCD码,分别存放在内部RAM的50H、51H和60H、61H单元中,试编写程序求Z=X+Y,结果存入40H和41H。BCD调整指令(二进制到十进制调整):

DAA;对A中加法结果进行调整3)减法指令

SUBBA,源操作数 ;带借位减法指令

SUBBA,Rn;A←A-R2-CYSUBBA,direct;A←A-direct-CYSUBBA,@Ri;A←A-@Ri-CYSUBBA,#data;A←A-(#data)-CY

功能:从A中减去进位位CY和指定的变量,结果存入A中。3)减法指令

SUBBA,源操作数 ;带借位减法指令

SUBBA,R2 ;A←A-R2-Cy, ;影响Cy、OV、AC、P000000

习题:编程求双字节减法。设X、Y分别存放在内部RAM50H、51H和60H、61H单元中,试编写程序计算

Z=X-Y,结果存入40H和41H。举例:A=5AH,R2=5AH,Cy=0,执行下列指令

SUBBA,R2求: A=,Cy=,OV=,P=,AC=?如何实现10进制减法MCS51指令系统中没有十进制减法指令,故利用十进制加法调整指令(DAA)作为十进制减法调整,必须采用补码相加的办法。用9AH减去减数即得到其以10为模的补码。如:十进制减法72-35=?72补+【-35】补

MOVR2,#72MOVR3,#35CLRC;Cy清0MOVA,#9AH;求减数补码SUBBA,R3ADDA,R2;补码相加DAA;BCD码调整MOVR3,A;结果存入R3CLRC;Cy清0(2)

增量、减量指令(不影响标志位状态?!)

功能:把指令中所指出的变量增1,且不影响程序状态字PSW中的任何标志。

INCRn;Rn←Rn+1INCdirect;direct←direct+1INC@Ri;Ri←Ri+1INCA;A←A+1INCDPTR;DPTR←DPTR+1

1)

增量(2)

增量、减量指令(不影响标志位状态?!)

注意:没有指令DECDPTR 可用指令DECDPL代替。不影响程序状态字PSW中的任何标志。

DECRn;Rn←Rn-1DECdirect;direct←direct-1DEC@Ri;Ri←Ri-1DECA;A←A-1

2)

减量(3)乘除指令

MULAB

;B8~15A0~7←A×B,Cy←0, ;当高字节B=0,OV←0;B≠0,则OV←1

举例:A=96(60H),B=192(C0H),执行指令MULAB后,

求:A=,B=,Cy=,OV=,P=?

解:

96×192=18432(4800H)00H48H010

功能:把A和B中两个无符号8位数相乘,所得16位积的低8位存于A中,高8位存于B中。如果成绩大于255,即高位B不为0时,OV置位;否则清0。CY总是清0。

(3)乘除指令12H0CH000

举例:A=156(F6H),B=13(0DH),执行指令DIVAB后求:A=,B=,Cy=,OV=,P=? 解:

156÷13=18(12H),余数=12(0CH)。

DIVAB

;A÷B,A←商,B←余数,Cy←0, ;当除数B=0,OV←1;B≠0,则OV←0

功能:把A中无符号8位二进制数除以B中的无符号8位二进制数,所得的商(整数)存于A中,余数存于B中。OV和CY总是清0。

当除数B=0时,结果不定,则OV置1.

算术指令小结:ADD、ADDC、DASUBBMUL、DIVINC、DEC逻辑运算指令

(完成清零、取反、移位及位逻辑运算)。(1)单操作数指令(A累加器为操作数)

1)A清0指令:CLRA;A←0

2)A取反指令:CPLA;A←/A

3)循环移位指令:①8位循环指令:

RLA

;A循环左移一位

RRA

;A循环右移一位②9位循环指令:

RLCA;带Cy循环左移一位

RRCA;带Cy循环右移一位用9位循环指令实现多字节移位

举例:编程将寄存器R6R5中的双字节数X左移一位。CLR CMOV A,R5RLC AMOV R5,AMOV 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“与操作”:ANLA,Rn;(A)(A)∧(Rn),以下类同。ANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#data

例1、(P1)=35H,使其高4位输出0,低4位不变。解;ANLP1,#0FH

此做法称为“屏蔽”位。(2)双操作数逻辑运算指令(对位逻辑运算):ANL、ORL、XRL“或操作”:ORLA,Rn;(A)(A)∨(Rn),以下类同。ORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data例2、将A中的低3位送入P1中,并且保持P1中高5位不变。ANLA,#07HANLP1,#0F8HORLP1,A;(P1)=P17P16P15P14P13A2A1A0这称为“数位组合”。(2)双操作数逻辑运算指令(对位逻辑运算):ANL、ORL、XRL“异或操作”:XRLA,Rn;(A)(A)⊕(Rn),以下类同。XRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data例3、设(P1)=0B4H=10110100B,执行:

XRLP1,#00110001B

结果按#00110001取反,即:(P1)=10000101B=85H这称为“指定位取反”。

(2)双操作数逻辑运算指令(对位逻辑运算):ANL、ORL、XRL习题1:如何将累加器A中的数据高4位清0,低位不变?

例:A=01××××××B,×表示随机状态,为1或0,执行下述一组指令执行后A的值如何?

XRLA,#0C0H

ORLA,#03H

ANLA,#0E7H

;将累加器A的内容D7、D6取反

温馨提示

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

评论

0/150

提交评论