3 MCS-51单片机的指系统.ppt

上传人:hwp****526 文档编号:84367521 上传时间:2023-04-05 格式:PPT 页数:116 大小:1.33MB
返回 下载 相关 举报
3 MCS-51单片机的指系统.ppt_第1页
第1页 / 共116页
3 MCS-51单片机的指系统.ppt_第2页
第2页 / 共116页
点击查看更多>>
资源描述

《3 MCS-51单片机的指系统.ppt》由会员分享,可在线阅读,更多相关《3 MCS-51单片机的指系统.ppt(116页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第3章章 MCS-51单片机的指令系统单片机的指令系统本章内容MCS-51单片机指令系统的格式 MCS-51单片机寻址方式 指令系统的分析 本章采用简单例程讲解解汇编语言指令功能13.1 指令格式指令:即命令,人们给计算机的命令指令有两种表示方式:机器码机器语言(机器能直接识别)助记符汇编语言(供设计人员使用)机器码和助记符一一对应,汇编语言可汇编为机器语言,机器语言可反汇编为汇编语言。指令格式:汇编语言格式标号:操作码助记符 操作数;注释2 START:MOVA,#20H;把数20H送入累加器A 中 INCA;(A)加一3.1 指令格式汇编语言指令的几种形式(1)没有操作数:RET,RET

2、I,NOP(2)有1个操作数:INCA,DEC20H,CLRC,SJMPNEXT(3)有2个操作数:MOVR7,#DATA,ADDA,R0,DJNZR2,LOOP(4)有3个操作数:CJNEA,#20H,NEQ33.1 指令格式机器语言的几种形式:(1)单字节指令:INCDPTR指令机器代码:A3ADDA,R7指令机器代码:2F(2)双字节指令:SUBBA,2BH指令机器代码:952BORLC,/27H指令机器代码:A027(3)三字节指令:MOV20H,#00H指令机器代码:752000LJMP2000H指令机器代码:02200043.2 MCS-51 单片机的寻址方式寻址方式:CPU执行指

3、令时获取操作数的方式 MSC-51单片机有7种不同的寻址方式:(1)立即寻址方式(2)直接寻址方式(3)寄存器寻址方式(4)寄存器间接寻址方式(5)变址寻址方式(6)位寻址方式(7)相对寻址方式 53.2 MCS-51 单片机的寻址方式(1)立即寻址方式 在指令中直接给出了参与运算的操作数。MOV A,#20H(2)直接寻址方式 指令中给出了参与运算的操作数所在单元的地址或所在位的位地址 MOV A,20H 直接寻址方式的使用范围:1)单元地址:007FH、21个SFR 2)对SFR的访问只能采用直接寻址方式63.2 MCS-51 单片机的寻址方式(3)寄存器寻址方式指令中,指出了参与运算的操

4、作数所在的寄存器。MOVA,R0寄存器寻址方式中的寄存器:1)工作(通用)寄存器R0R7、DPTR2)累加器A、寄存器B(仅在乘除法时)和布 尔累加器C 7(4)寄存器间接寻址方式在指令中,指出了存放参与运算的操作数所在单元地址的寄存器。MOVA,R0 3.2 MCS-51 单片机的寻址方式地址寄存器CPU?!操作数在哪儿?它的地址在R0中RAM得到地址了!找数!AROMMOVA,R08 3.2 MCS-51 单片机的寻址方式 可以作为地址寄存器的寄存器把存放操作数地址的寄存器称为地址寄存器。地址寄存器可以是:R0、R1、DPTR、SP(隐含)。在指令中表示为R0、R1、DPTR寄存器间接寻址

5、方式寻址范围:1)片内RAM:007FH 地址寄存器:R0、R12)片外RAM:0000FFFFH 地址寄存器:R0、R1、DPTR9(5)变址寻址方式(基址寄存器+变址寄存器间接寻址)操作数的地址由基址寄存器+变址寄存器间接寻址指出。MCS-51单片机中可以作基址寄存器:2个十六位寄存器,DPTR和PC MCS-51单片机中变址寄存器:8位寄存器:累加器A操作数存放在一个由(PC)+(A)或(DPTR)+(A)指出的十六位地址所指的单元中(在ROM中),有以下3种指令MOVCA,A+PCMOVCA,A+DPTRJMPA+DPTR 3.2 MCS-51 单片机的寻址方式10(6)位寻址方式在指

6、令中,指出了参与运算的操作数(一位)所在的位地址或寄存器(仅有位累加器C)指令中位地址:1)202FH的16个单元的128位;007FH2)专用寄存器(SFR)中的某些寄存器中的位(80FFH)CLR CMOV 00H,CMOV 20H.0,C3.2 MCS-51 单片机的寻址方式11(7)相对寻址方式 与程序的执行顺序有关,在指令执行时改变了程序计数器PC的内容,从而改变了程序转移的目标地址。当前的PC值加上指令中给出的地址偏移量rel而形成的目的(标)地址。相对寻址只出现在相对转移指令中。目的地址=源地址+rel+指令的字节数 rel=目的地址源地址指令的字节数 rel:指令中给出的地址偏

7、移量。-128+127,用补码表示,大于0正向跳转(向后),小于0则反向跳转(向前)。JCrelSJMPNEXT1JZFIRSTDJNZR1,LOOP23.2 MCS-51 单片机的寻址方式123.3 指令系统分析MCS-51单片机共有111条指令(1)按指令代码的字节数 单字节指令(49条)双字节指令(45 条)三字节指令(17 条)(2)按指令执行的时间 单机器周期指令(64条)双机器周期指令(45条)四机器周期指令(2条)3.3.1 指令的分类133.3.1 指令的分类(3)按照指令功能可分成五类:数据传送类指令(2929条)条)算术运算类指令(24条)逻辑运算类指令(24条)控制转移类

8、指令(17条)位操作类指令 (17条)143.3.2 指令系统分析 一、一、数据传送类指令数据传送(Data Transfers)类指令共有29条,分为以下5种类型:(1)通用传送指令 (2)堆栈操作指令 (3)交换指令 (4)访问程序存储器的指令 (5)访问外部RAM的指令 153.3.2 指令系统分析(一)通用传送指令(一)通用传送指令 通用传送指令的一般形式为:MOV 目的操作数,源操作数(1)以以A为目的操作数的传送指令为目的操作数的传送指令(4条)条)MOV A,源操作数MOVA,Rn;(Rn)(A),n07MOVA,direct;(direct)(A)MOVA,Ri;(Ri)(A)

9、,i0,1MOVA,#data;data(A)MOVA,R2MOVA,30HMOVA,R0MOVA,#36H163.3.2 指令系统分析(2)以Rn为目的操作数的传送指令(3条)一般形式:MOV Rn,源操作数MOVRn,A;(A)(Rn)MOVRn,(direct);(direct)(Rn)MOVRn,#data;data(Rn)如:MOVR0,AMOVR3,30HMOVR7,#36HMOVR1,#30MOVR6,#01101100B17(3)以直接地址为目的操作数的指令(5条)一般形式:MOV direct,源操作数MOVdirect,A;(A)(direct)MOVdirect,Rn;(

10、Rn)(direct)MOVdirect1,direct2;(direct2)(direct1)MOVdirect,Ri;(Ri)(direct)MOVdirect,#data;data(direct)如:MOV30H,AMOVP1,R2MOV38H,60HMOVTL0,R1MOV58H,#36H3.3.2 指令系统分析183.3.2 指令系统分析(4)以间接地址为目的操作数的指令)以间接地址为目的操作数的指令(3条)条)一般形式:MOV Ri,源操作数MOVRi,A;(A)(Ri)MOVRi,direct;(direct)(Ri)MOVRi,#data;data(Ri)如:MOVR0,AMO

11、VR1,36HMOVR0,SBUFMOVR1,#48MOVR0,#0D6H193.3.2 指令系统分析例1:已知(PSW)00H,(A)11H,(20H)22H,分析下列程序的执行结果MOVR0,A(A)(R0)MOVR1,20H(20H)(R1)MOVR2,#33H33H(R2)分析结果如下:(R0)(00H)11H(R1)(01H)22H(R2)(02H)33H203.3.2 指令系统分析例2:已知(PSW)00H,(A)11H,(00H)22H,(01H)36H,(36H)33H,(33H)44H,分析下列程序的执行结果。MOV30H,A;(A)(30H)MOV31H,R0;(R0)(3

12、1H)MOV32H,33H;(33H)(32H)MOV34H,R1;(R1)(34H)MOV35H,#55H(35H)55H分析结果如下:(30H)11H,(31H)22H,(32H)44H,(34H)33H,(35H)55H。213.3.2 指令系统分析(5)十六位数据传送指令十六位数据传送指令(1条)条)MOVDPTR,#data16;data815(DPH),data07(DPH)如:MOVDPTR,#2368H MOVDPTR,#35326上述操作同:MOVDPH,#23HMOVDPL,#68H223.3.2 指令系统分析在使用通用数据传送指令时,应注意以下几点:(1)MCS-51单片

13、机不支持工作寄存器R0R7内容直接传送给由地址寄存器内容指定的单元,或由地址寄存器内容指定单元的内容送给工作寄存器R0R7,如果需要传送,如果在程序中需要这样的数据传送,可以采用其他方式间接实现。例如:希望把地址寄存器R1内容指定的单元内容传送给工作寄存器R5,可以采用MOVA,R1MOVR5,A233.3.2 指令系统分析(2)虽然可以将一个指定的特殊功能寄存器的内容复制给累加器A,但下面这条指令是无效的:MOVA,ACC(3)在通用数据传送指令中,地址寄存器只能由工作寄存器R0和R1担当,其他工作寄存器没有这个功能。(4)虽然MCS-51单片机由2个16位的寄存器:PC和DPTR,但只有D

14、PTR用户可以用指令方式直接设置其内容。243.3.2 指令系统分析(二)堆栈操作指令(二)堆栈操作指令堆栈是在内部RAM中开辟的一个先进后出(后进先出)的区域,用来保护CPU执行程序的现场1入栈指令PUSHdirect;CPU操作:(SP)+1(SP),修改堆栈指针;(direct)(SP),入栈:例如:MOVSP,#70HPUSH60H 6061707172A869FEC6CA片内RAM(SP)(SP)A8253.3.2 指令系统分析2出栈指令POPdirectCPU操作:(SP)(direct),出栈,把堆栈中由(SP)所指单元的内容传送到指定单元direct。(SP)1(SP),修改堆

15、栈指针例如:MOVSP,#71HPOP60H 6061707172A869FEC6CA片内RAM(SP)(SP)C6263.3.2 指令系统分析在使用堆栈时,应注意以下几点:(1)PUSH和POP指令的操作数必须是单元地址。PUSH指令中指定的单元地址是被保护单元的地址(源操作数),指令隐含了目的操作数;而POP指令中指定的单元地址是内容要恢复的单元地址(目的操作数),指令隐含了源操作数。(2)MCS-51单片机的堆栈建在内部RAM中,单片机复位后,(SP)07H,从08H单元开始的区域均为栈区。在应用系统中,一般把栈区开辟在内部RAM的307FH这一区域,栈区最好靠近内部RAM的末端,以避免

16、堆栈加1向上增长时覆盖有效数据。273.3.2 指令系统分析(3)在使用堆栈操作指令时,入栈指令PUSH和出栈指令POP应成对出现,保护指定单元内容时,必须遵循先进后出的步骤,否则,单元内容在出栈恢复时会发生改变。(4)MCS-51单片机不支持对工作寄存器R0R7直接使用堆栈操作指令。如果要用堆栈操作保护某一寄存器Rn(n07)的状态,可用该工作寄存器对应单元进行操作。如当(PSW.4)1、(PSW.3)0时,把R5的内容入栈,可用PUSH15H;出栈时,PUSH15H,即可恢复R5原来的内容。283.3.2 指令系统分析例:已知(30H)11H,(31H)22H,则下列程序段的操作过程如图3

17、.8所示。MOVSP,#60H;开辟栈区PUSH30H;(SP)+1(SP),30H单元内容进栈61H单元PUSH31H;(SP)+1(SP),31H单元内容进栈62H单元,(SP)62HPOPACC;(SP)(ACC),栈顶62H单元内容弹出到累加器ACC,(SP)1(SP),(SP)61H。POPB;(SP)(B),栈顶61H单元内容弹出寄存器B,(SP)1(SP),(SP)60H。29(三)(三)交换指令交换指令 (1)字节交换指令 将源操作数的内容与A累加器的内容互换。XCHA,源源Rn,direct,Ri指令:XCHA,Rn;(A)(Rn)XCHA,direct;(A)(direct

18、)XCHA,Ri;(A)(Ri)例:将内RAM的20H单元的内容与40H单元交换。3.3.2 指令系统分析303.3.2 指令系统分析方法1:MOVA,20HXCHA,40HMOV20H,A方法2:MOVA,20HMOV20H,40HMOV40H,A31(2)半字节交换指令XCHA,Ri;(A03)(Ri)03将某一单元内容的低四位与累加器A的低四位互换,而二者的高四位保持不变。3.3.2 指令系统分析D0D1D2D3D4D5D6D7(A)D0D1D2D3D4D5D6D7(R0)D0D1D2D3D4D5D6D7(A)D0D1D2D3D4D5D6D7(R0)XCHA,Ri执行过程例题:两个单元的

19、低四位互换。323.3.2 指令系统分析(3)高低四位互换指令将累加器A的高四位和低四位互换。SWAPA;(A03)(A47)D0D1D2D3D4D5D6D7(A)(A)D0D1D2D3D4D5D6D7如:设(A)=5BHSWAPA;(A)=B5H333.3.2 指令系统分析交换指令总结343.3.2 指令系统分析(四)(四)访问程序存储器的指令(查表指令)访问程序存储器的指令(查表指令)MOVCA,A+DPTR;(A)+(DPTR)(A)DPTR放表的首地址,A放所查数据在表中的偏移;查表范围为64KB空间。MOVCA,A+PC;(A)+(PC)(A)PC的值为下一条指令的地址,A放所查数据

20、相对PC值的偏移;查表范围为最大为256B空间353.3.2 指令系统分析(五)(五)访问外部访问外部RAMRAM和外部和外部I/OI/O口的数据传送指令口的数据传送指令1 以以DPTR为地址寄存器的为地址寄存器的指令(1)读(输入)指令:MOVXA,DPTR;(DPTR)(A)说明:上述指令以DPTR为片外RAM单元的16位地址指针,寻址范围为寻址范围为0000FFFFH,即64K。363.3.2 指令系统分析CPU执行读外部数据存储器和外部I/O口指令的时序373.3.2 指令系统分析例:把外部RAM的2000H单元的内容存入单片机内部RAM的30H单元。MOVDPTR,#2000HMOV

21、XA,DPTRMOV20H,A注意:1、外部RAM单元和外部I/O口的地址为16位;2、外部RAM单元和外部I/O口的信息必须通过A累加器才能进入单片机的CPU。383.3.2 指令系统分析(2)写(输出)指令:将单片机的累加器A的内容输出到外部RAM某一单元或外部I/O口。MOVXDPTR,A;(A)(DPTR)说明:上述指令以DPTR为片外RAM单元的16位地址指针,寻址范围为寻址范围为0000FFFFH,即64K393.3.2 指令系统分析CPU执行写外部数据存储器和外部I/O口指令的时序403.3.2 指令系统分析例:把单片机内部RAM的20H单元的内容转存到外部RAM的8000H单元

22、。MOVDPTR,#8000HMOVA,20HMOVXDPTR,A注意:1、外部RAM单元和外部I/O口的地址为16位;而单片机内部RAM的单元地址为8位。2、单片机片内RAM单元的信息输出到外部RAM单元或外部I/O口,必须通过A累加器实施。413.3.2 指令系统分析2 以以R0和和R1为地址寄存器的为地址寄存器的指令(1)读(输入)指令MOVXA,Ri;(P2)(Ri)(A),Ri=0,1;说明:上述指令以R0或R1作低8位地址指针,由P0口送出,寻址范围为00FFH,256B空间,高8位由当前的P2口状态提供。423.3.2 指令系统分析(2)写(输出)指令MOVXRi,A;(A)(P

23、2)(Ri),Ri=0,1;说明:上述指令以R0或R1作低8位地址指针,由P0口送出,寻址范围为256B空间,高8位由当前的P2口状态提供。注意:(1)上述2种指令的操作时序与前面访问外部RAM的指令相同。(2)采用R0或R1作为地址寄存器指出的是外部RAM和外部I/O口的低八位地址,当扩展的数据存储器单元和I/O口的空间不大于256个时,P2口可以作为I/O口使用。433.3.2 指令系统分析 ROM和片外数据RAM传送类指令总结ROM数据传送指令图 片外RAM数据传送指令 44(一)二进制加法指令(1)不带进位位的加法指令 ADDA,源;(A)+源(A)源#data,Rn,direct,R

24、i指令:ADDA,#data;(A)+data(A)ADDA,Rn;(A)+(Rn)(A)ADDA,direct;(A)+(direct)(A)ADDA,Ri;(A)+(Ri)(A)影响标志位Cy,AC,OV,P 3.3.3 算术运算指令453.3.3 算术运算指令加法指令加法指令执行过程与标志位之间的关系D0D1D2D3D4D5D6D7(A)源(A)结果进位(AC)=1进位(Cy)=1(Cy)D6与D7两位其中一位在运算中有进位,而另一位没有,则(OV)=1,否则,(OV)=0.运算结果(A)中1的个数为偶数,(P)=0,否则,(P)=1463.3.3 算术运算指令加法指令例:单字节二进制加

25、法:x存放在20H单元,y存放在21H单元,求 z=x+y(设z小于FFH)D0D1D2D3D4D5D6D7)(Cy)如果z=x+y的结果大于255,势必会产生进位,进位如何处理?47(2)带进位位的加法指令 ADDCA,源;(A)+源+(Cy)(A)源#data,Rn,direct,Ri指令:ADDCA,#dataADDCA,RnADDCA,directADDCA,Ri影响标志位Cy,AC,OV,P3.3.3 算术运算指令加法指令483.3.3 算术运算指令加法指令例1:单字节二进制加法:x存放在20H单元,y存放在21H单元,求 z=x+yD0D1D2D3D4D5D6D7)Cy000000

26、0000000000493.3.3 算术运算指令加法指令例2:双字节二进制加法:x存放在20H、21H单元(高8位在20H单元),y存放在22H、23H单元(高8位在20H单元),求 z=x+yXX20HXX21HXX22HXX23HXX24HXX25HXX26HXX27H内RAM20H21H23H22H+)32H31H33H为什么会出现3个字节?多字节二进制加法与双字节原理相同,我们可以将此算法推广到多字节。50(3)加1指令INC源;源+1源源A,Rn,direct,Ri指令INCAINCRnINCdirectINCRiINCDPTR以上指令不影响标志CY、AC和OV NOTENOTE:上

27、溢上溢3.3.3 算术运算指令加法指令51(4)十进制加法调整指令DAA影响标志位Cy、AC、OV、P说明:1)该指令必须与加法指令联合使用!将A中的和调整为BCD码,并且ADD或ADDC的两个操作数是BCD码;2)调整方法:若(A03)9或(AC)=1,则(A03)+6(A03);若(A47)9或(Cy)=1,则(A47)+6(A47);例:多字节十进制加法3.3.3 算术运算指令加法指令523.3.3 算术运算指令加法指令CPU执行DAA的流程533.3.3 算术运算指令加法指令使用DAA指令时,必须注意以下几点:(1)该指令的前提是两个2位十进制数(BCD码)的加法,对加法运算的结果进行

28、调整,使结果为十进制数,即将A中的和调整为BCD码。(2)必须与加法指令联合使用!(3)单独使用该指令是不能把累加器A中的数据转换为BCD码形式的,因为,DAA的调整结果不仅依赖于累加器A的内容,而且与标志位Cy和AC的状态有关。543.3.3 算术运算指令加法指令例:已知在30H和31H单元中分别存储两个BCD码表示的十进制数19和53。求两个数之和,并把结果存到32H单元。程序如下:MOVA,30H;(A)19H ADDA,31H;(A)19H53H6CH DAA;十进制调A72H MOV32H,A;(32H)72H55(二)二进制减法指令(1)带借位的减法指令SUBBA,源;(A)源(C

29、y)(A)源#data,Rn,direct,Ri指令:SUBBA,#dataSUBBA,RnSUBBA,directSUBBA,Ri影响标志位Cy,AC,OV,P 3.3.3 算术运算指令减法指令563.3.3 算术运算指令减法指令例:设累加器A的内容为0C9H,寄存器R2的内容为54H,当前Cy的状态为1,执行指令SUBBA,R2结果:累加器A的内容为74H,(Cy)0,(AC)0,(OV)1,(P)0。57(2)减1指令DEC源;源1源源A,Rn,direct,Ri指令:DECADECRnDECdirectDECRi以上指令不影响标志CY、AC和OV NOTE:下溢下溢3.3.3 算术运算

30、指令减法指令583.3.3 算术运算指令减法指令例:设R0的内容为7EH,内部RAM的7DH和7EH单元的内容分别为00H和40H,P1口的内容为55H,执行下列指令后,R0、P1、7EH和7FH单元的内容分别是多少?DECR0DECR0DECR0DEC7FHDECP1593.3.3 算术运算指令乘法指令(三)乘法指令MULAB(A)(B)的乘积高八位存储在(B),D低八位存储在(A)。说明:(1)此指令为无符号数乘法;(2)指令执行后,(Cy)=0。若乘积大于255,则(OV)=1。例:已知x存放在(20H)中,y存放在(21H),求x*y.603.3.3 算术运算指令乘法指令多字节乘以单字

31、节的乘法算法:十进制数乘法运算会给我们什么启示?899818 0 1899818 0 172多字节乘以单字节的实现算法613.3.3 算术运算指令除法指令(四)除法指令DIV AB(A)/(B)的商存储在(A),余数存储在(B)说明:(1)此指令为无符号数除法;(2)若除数(B)=0,则(OV)=1,若(B)0,则(OV)=0;(Cy)=0。例:已知x存放在(20H)中,y存放在(21H),求x/y.623.3.3 算术运算指令总结63逻辑运算指令包括与、或、异或、清除、求反、移位等操作。这类指令一般不影响标志位CY、AC和OV。3.3.4 逻辑运算指令(一)由累加器A实现的逻辑操作指令(1)

32、清零CLRA说明:执行结果同MOVA,#00H,只影响标志位P(2)累加器A取反指令(按位取反)CPL A ;(/A)A说明:不影响标志位。例:设(A)=56H(01010110)CPLA;结果为0A9H(10101001)643.3.4 逻辑运算指令逻辑操作指令(3)循环左移 RLA;D0D1D2D3D4D5D6D7说明:(1)每次只移动一位;(2)在(A)07FH时,左移一位相当于(A)乘以2;653.3.4 逻辑运算指令逻辑操作指令(4)带进位位循环左移 RLCA;例:多字节二进制数乘2D0D1D2D3D4D5D6D7Cy说明:(1)每次只移动一位;左移一位相当于(A)乘以2;(3)带进

33、位位移动时,影响标志位Cy和P。663.3.4 逻辑运算指令逻辑操作指令(5)循环右移 RRA;D0D1D2D3D4D5D6D7说明:(1)每次只移动一位;(2)在(A)为偶数时,右移一位相当于(A)除以2;673.3.4 逻辑运算指令逻辑操作指令(6)带进位位循环右移 RRCA;例:多字节二进制数除以2D0D1D2D3D4D5D6D7Cy说明:(1)每次只移动一位;移一位相当于(A)除以2;(3)带进位位移动时,影响标志位Cy和P。683.3.4 逻辑运算指令与操作指令(二)与逻辑操作指令ANL 目的操作数,源操作数(1)以累加器A为目的操作数的与逻辑运算指令ANLA,#data;(A)da

34、ta(A)ANLA,Rn;n=07,(A)(Rn)(A)ANLA,direct;(A)(direct)(A)ANLA,Ri;;i=0,1,(A)(Ri)(A)这4条指令执行时仅影响标志位P(2)以某个单元为目的操作数的与逻辑运算指令ANLdirect,#data;(direct)data(direct)ANLdirect,A;(direct)(A)(direct)指令执行时不会影响任何标志位693.3.4 逻辑运算指令与操作指令与逻辑操作指令用于实现屏蔽。屏蔽码屏蔽码xxxxxxxxD0D1D2D3D4D5D6D7011100100 xxx00 x0单元单元设某位数值为di=0,1,与运算法则

35、如下:di0=0(屏蔽)di1=di(保留)例:设累加器A的内容为0CBH(11001011B),内部RAM30H单元的内容为0AAH(10101010B),执行指令:ANLA,30H则累加器A的内容为8AH(10001010B)703.3.4 逻辑运算指令或操作指令(三)或逻辑运算指令ORL 目的操作数,源操作数(1)以累加器A为目的操作数的或逻辑运算指令ORLA,#data;(A)data(A)ORLA,Rn;n=07,(A)(Rn)(A)ORLA,direct;(A)(direct)(A)ORLA,Ri;;i=0,1,(A)(Ri)(A)指令执行时仅影响标志位P(2)以某个单元为目的操作

36、数的或逻辑运算指令ORLdirect,#data;(direct)data(direct)ORLdirect,A;(direct)(A)(direct)指令执行时不会影响任何标志位713.3.4 逻辑运算指令与操作指令或逻辑操作指令用于实现置位。设某位数值为di=0,1,与运算法则如下:di0=di(保留)di1=1(置位)例:设累加器A的内容为0D5H,执行指令ORLA,#0FH,则累加器A的内容为?则累加器A的内容为0DFH(11011111B)置位码置位码单元单元x x x x x x x xD0D1D2D3D4D5D6D70 1 1 1 0 0 1 0 x 1 1 1 x x 1 x7

37、23.3.4 逻辑运算指令异或操作指令(四)异或逻辑运算指令XRL 目的操作数,源操作数(1)以累加器A为目的操作数的异或逻辑运算指令XRLA,#data;(A)data(A)XRLA,Rn;n=07,(A)(Rn)(A)XRLA,direct;(A)(direct)(A)XRLA,Ri;;i=0,1,(A)(Ri)(A)指令执行时仅影响标志位P。(2)以某个单元为目的操作数的异或逻辑运算指令XRLdirect,#data;(direct)data(direct)XRLdirect,A;(direct)(A)(direct)指令执行时不会影响任何标志位733.3.4 逻辑运算指令与操作指令异或

38、逻辑操作指令用于实现取反。例:累加器A的内容为0C3H(11000011B),寄存器R0的内容为0AAH,执行指令:XRLA,R0,则累加器A的内容为?例:一个负数的原码存放在30H单元,求其补码。设某位数值为di=0,1,与运算法则如下:di0=di(保留)di1=di(置位)取反码取反码单元单元x x x x x x x xD0D1D2D3D4D5D6D70 1 1 1 0 0 1 0 x x x x x x x x743.3.4 逻辑运算指令总结753.3.5 3.3.5 位操作指令位操作指令位操作指令包括位变量传送、逻辑运算、控制转移等指令,共17条。适用范围:位地址空间适用范围:位地

39、址空间 指令中,位地址的表示方法:(1)直接用位地址 如:D4H (2)用特殊功能寄存器名加位数 如:PSW.4 (3)用位名称 如:RS1 (4)用伪指令bit定义的有名字的位地址(稍后介绍)如:SUB.REG bit RS1,FLAGRUN bit 02H763.3.5 3.3.5 位操作指令位操作指令位数据传送指令位数据传送指令(1)位数据传送指令)位数据传送指令(2条)条)MOV C,bit;(bit)(C)MOV bit,C;(bit)C说明:位与位之间的状态传送必须通过C来进行,2个位地址的位不能直接传送。例:MOVC,TR0MOV08H,C773.3.5 位操作指令位修正指令2、

40、位修正指令(6条)(1)位清0CLRC;0(C)CLRbit;0(bit)(2)位置1SETBC;1(C)SETBbit;1(bit)(3)位取反CPLC;(/C)(C)CPLbit;(/bit)(bit)(C)(C)783.3.5 3.3.5 位操作指令位操作指令位逻辑运算指令3、位逻辑运算指令(4条)(1)位逻辑与运算指令ANL C,bit ;(C)(bit)(C)ANL C,/bit ;(C)(/bit)C(C)(bit)(C)(C)(bit)(C)793.3.5 3.3.5 位操作指令位操作指令位逻辑运算指令 (2)位逻辑或运算指令ORL C,bit ;(C)(bit)(C)ORL C

41、,/bit ;(C)(/bit)C(C)(bit)(C)(C)(bit)(C)803.3.5 3.3.5 位操作指令位操作指令总结813.3.5 3.3.5 位操作指令位操作指令例:采用位操作指令实现下列逻辑表达式假设UP1.1,VP1.2,WP1.3,X27H.1,Y27H.0,ZTF0,QP1.5,编制程序实现下列逻辑表达式:(1)(2)823.3.6 3.3.6 控制转移指令控制转移指令CPU控制转移指令将改变程序的执行顺序,这类指令有以下几种:(1)无条件转移指令(2)条件转移指令(3)循环控制转移指令(4)调用/返回指令本节主要从编程角度出发,根据指令的功能介绍控制转移指令的使用方法

42、。833.3.6 控制转移指令无条件转移一、无条件转移指令这组指令相当于高级语言的“GOTO标号”语句,CPU在执行程序的过程中,碰到该类型指令将“无条件”地改变PC的内容,改变程序执行的流向。(1)转移指令AJMP addr11 转移范围:含有下一条指令首地址的同一个2KB范围,即高5位地址相同;例:AJMPNEXT使用方式:SJMP LABELCPU的执行过程;(PC)+2(PC);addr11(PC)100,(PC1511)不变843.3.6 控制转移指令无条件转移(2)长转移指令LJMP addr16说明:转移范围:64KB全程序空间任何单元CPU的执行过程addr16(PC)使用方式

43、:LJMPLABEL例:长转移指令应用;INCA;LJMPLOOP1;无条件转移到LOOP1执行程序853.3.6 控制转移指令无条件转移(3)短转移指令SJMPrelrel为指令代码中的转移范围(相对量):128+127;对应rel值为:00H7FH(0+127)、80HFFH(1281);用法:SJMP LABEL例:SJMPNEXTCPU的执行过程(PC)+2(PC),(PC)+rel(PC)863.3.6 控制转移指令无条件转移(4)间接转移指令JMPA+DPTR;(A)+(DPTR)(PC)说明:(1)具有多分枝转移功能,即散转功能,又叫散转指令;(2)转移范围:是以DPTR为首地址

44、的256B。例:根据累加器A中的命令键键值,设计命令键操作程序入口跳转表。873.3.6 控制转移指令无条件转移CLRCRLCAMOVDPTR,#JPTABJMPA+DPTRJPTAB:AJMPCCS0AJMPCCS1AJMPCCS2:883.3.6 控制转移指令条件转移条件转移指令相当于高级语言的“IF条件THEN标号”语句(一)以累加器A内容为判别条件的转移指令(1)判(A)为零转移JZrel;(PC)+2(PC)当(A)=0时,(PC)+rel(PC)转移;当(A)0时,顺序执行。用法:JZLABEL(PC)+2(PC)(A)=0?(PC)+rel(PC)下一条指令目标地址CPU执行过程

45、YN(A)=0?下一条指令LABELNY二、条件转移指令893.3.6 控制转移指令条件转移(2)判(A)不为零转移JNZrel;(PC)+2(PC)当(A)0时,(PC)+rel(PC)转移;当(A)=0时,顺序执行。用法:JNZLABEL(PC)+2(PC)(A)0?(PC)+rel(PC)下一条指令目标地址CPU执行过程YN(A)0?下一条指令LABELYN903.3.6 控制转移指令条件转移例:设无符号数存放于20H单元,存放于21H单元,比较两个数、是否相等,若相等置标志位F0位1,否则,F0清0。913.3.6 控制转移指令比较转移(二)比较转移指令(1)累加器A与指定单元比较的转

46、移指令CJNEA,direct,rel;(PC)+(PC);若(A)(direct),则(PC)+rel(PC),且0(Cy);;若(A)(direct),0(Cy)(A)(direct),0(Cy)(A)#data,则(PC)+rel(PC),且0(Cy);;若A#data,则(PC)+rel(PC),且0(Cy);;若(Rn)#data,则(PC)+rel(PC),且0(Cy);;若(Ri)#data,则(PC)+rel(PC),且1(Cy);;若(Ri)=#data,则顺序执行,且0(Cy)。使用方式:CJNERi,#data,LABEL953.3.6 控制转移指令比较转移例:比较两个数

47、x、y是否相等,若相等置标志位F0位1,否则,F0清0。例:从内部RAM的30H单元开始连续存储有20个无符号8位二进制数。统计这一组数据中00H的个数,结果存入60H单元。963.3.6 控制转移指令比较转移指令(三)以进位位Cy状态为判别条件的转移指令 (1)以Cy状态是1为判别条件的转移指令JC rel ;(PC)+2(PC);(Cy)=1,则(PC)+rel(PC);(Cy)=0,则顺序向下执行(PC)+2(PC)(Cy)=1?(PC)+rel(PC)下一条指令目标地址CPU执行过程YN用法:JCLABEL(Cy)=1下一条指令LABELYN973.3.6 控制转移指令比较转移指令(2

48、)以Cy状态是0为判别条件的转移指令JNC rel ;(PC)+2(PC);(Cy)=0,则(PC)+rel(PC);(Cy)=1,则顺序向下执行(PC)+2(PC)(Cy)=0?(PC)+rel(PC)下一条指令目标地址CPU执行过程YN用法:JCLABEL(Cy)=0?下一条指令LABELYN983.3.6 控制转移指令比较转移指令例:比较两个数x、y的大小,将大数存放在MAX单元,若相等置标志位F0位1,否则,F0清0。993.3.6 控制转移指令比较转移指令(四)以位状态为判别条件的转移指令(1)以位状态为1作为判别条件JBbit,rel;;(PC)+3(PC);若(bit)=1,则(

49、PC)+rel(PC);若(bit)=0,则顺序向下执行(PC)+3(PC)(bit)=1?(PC)+rel(PC)下一条指令目标地址CPU执行过程YN用法:JBbit,LABEL(bit)=1?下一条指令LABELYN100(2)以位状态为0作为判别条件JNBbit,rel;(PC)+3(PC);若(bit)=0,则(PC)+rel(PC);若(bit)=1,则顺序向下执行(PC)+3(PC)(bit)=0?(PC)+rel(PC)下一条指令目标地址CPU执行过程YN用法:JNBbit,LABEL(bit)=0?下一条指令LABELYN3.3.6 控制转移指令比较转移指令1013.3.6 控

50、制转移指令比较转移指令例:已知累加器A的内容为56H(01010110B),执行下列指令序列:JBCACC.3,LABEL1JBCACC.2,LABEL2程序将转移到LABEL2处,并且累加器A的内容变为52H(01010010B)1023.3.6 控制转移指令比较转移指令(3)判断位值并清0JBCbit,rel;(PC)+3;若(bit)=1,则(PC)+rel(PC);若(bit)=0,则顺序向下执行用法:JBCbit,LABEL(PC)+3(PC)(bit)=1?(Cy)=0(PC)+rel(PC)下一条指令目标地址CPU执行过程YN(bit)=1?下一条指令(Cy)=0YNLABEL1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁