1、概述概述寻址方式寻址方式分类指令介绍分类指令介绍第7章 MCS-51指令系统7.1.17.1.1指令分类指令分类l MCS-51MCS-51的指令系统的指令系统使用使用4242种助记符,表达种助记符,表达3333种种功能,共由功能,共由111111条指令构成。条指令构成。l 按指令编码的字节数分类:按指令编码的字节数分类:1 1字节字节(49(49条条)、2 2字节字节(45(45条条)、3 3字节字节(17(17条条)。l 按指令的机器周期数分类:按指令的机器周期数分类:1 1个机器周期个机器周期(64(64条条);2 2个机器周期个机器周期(45(45条条);4 4个机器周期个机器周期(2
2、(2条条,乘、除各乘、除各1 1条)条)实际应用中最频繁的指令,为单周期指令,故实际应用中最频繁的指令,为单周期指令,故f foscosc=12MHz,T=1=12MHz,T=1 s s。速度指标为速度指标为1MIPS1MIPS7.1 7.1 指令系统概述指令系统概述指令的类别及其要素指令的类别及其要素l数据传送类30条条l算术运算类24条条l逻辑运算类35条条l转移操作类22条条l布尔指令类位操作子集位操作子集l指令的功能l指令的寻址方式l指令对PSW的影响l指令的编码字节数l指令的机器周期在程序中行中,指令语句按如下形式书写:在程序中行中,指令语句按如下形式书写:标号标号:助记符助记符 操
3、作数操作数11,操作数操作数22,操作数操作数33;注释注释 l标号于程序行中,代表指令所在的地址标号于程序行中,代表指令所在的地址符号地址;符号地址;l在指令功能解释阶段不使用标号;在指令功能解释阶段不使用标号;l两个操作数的情况比较多,常写成如下:两个操作数的情况比较多,常写成如下:操作码操作码 目的操作数,源操作数目的操作数,源操作数或或op_code dst,src7.1.2 7.1.2 书写格式与缩略语书写格式与缩略语Rn-Rn-当前组的通用寄存器,当前组的通用寄存器,n=0n=07 7Ri-0Ri-0或或1 1,R0R0或或R1R1作间接寻址寄存器。作间接寻址寄存器。direct-
4、8direct-8位内部单元的地址,即直接寻址。位内部单元的地址,即直接寻址。#data#data,#data16-#data16-分别为分别为8 8位和位和1616位立即数。位立即数。addr16-16addr16-16位目的地址。位目的地址。addr11-11addr11-11位目的地址。位目的地址。rel-8rel-8位带符号的补码偏移量。位带符号的补码偏移量。bit-bit-内部内部RAMRAM可位寻址的位地址。可位寻址的位地址。/表示取反操作。表示取反操作。(X)-X(X)-X单元中的内容。单元中的内容。(X)-(X)-以以X X单元内容为地址的单元的内容。单元内容为地址的单元的内容
5、。-间接寄存器或基址寄存器的前缀。间接寄存器或基址寄存器的前缀。寻址方式常用符号说明寻址方式常用符号说明l寻找操作数(数据,指令的处理对象)的方式寻找操作数(数据,指令的处理对象)的方式 寄存器寻址寄存器寻址 直接寻址直接寻址 立即寻址立即寻址 寄存器间接寻址寄存器间接寻址 变址寻址变址寻址l寻找目标地址(程序流程控制)的方式寻找目标地址(程序流程控制)的方式 相对寻址相对寻址 绝对寻址绝对寻址 隐含寻址隐含寻址l位寻址位寻址7.1.3 7.1.3 寻址方式寻址方式(Addressing Mode)(Addressing Mode)寄存器操作数,寻址范围:寄存器操作数,寻址范围:(1 1)4
6、4组组R0 R0 R7R7共共3232个工作寄存器个工作寄存器(2 2)部分特殊功能寄存器,例如)部分特殊功能寄存器,例如A A、B B 以及数以及数据指针寄存器据指针寄存器DPTRDPTR等。等。例:例:MOVMOVA A,RnRn ;(;(RnRn)AA,n=0n=07 7MOVMOVB B,A A寄存器寻址寄存器寻址(Registor AddressingRegistor Addressing)存储器操作数,其地址直接编码到指令中存储器操作数,其地址直接编码到指令中 寻址范围:寻址范围:(1)(1)内部内部RAMRAM的低的低128128个单元(个单元(00-7FH00-7FH)例例MO
7、V AMOV A,40H40H (2)(2)特殊功能寄存器。特殊功能寄存器。例例MOV AMOV A,80H80H ;地址码形式;地址码形式 MOV AMOV A,P0P0;SFRSFR符号形式符号形式两者的机器码完全一致,后者便于记忆。两者的机器码完全一致,后者便于记忆。直接寻址直接寻址(Direct Addressing)(Direct Addressing)超过7FH就到SFR范围MOV A,3AH寄存器寄存器 A AINC INC A A;寄存器寻址寄存器寻址特殊功能寄存器特殊功能寄存器AccAcc(E0HE0H)INC INC ACCACC;直接寻址直接寻址,名称符号,名称符号或或I
8、NC INC 0 0E0HE0H;直接寻址,地址码;直接寻址,地址码指令都使累加器中内容加指令都使累加器中内容加1 1。但是寻址方式不同,。但是寻址方式不同,指令编码字节数也不同。指令编码字节数也不同。累加器的两种寻址方式累加器的两种寻址方式 常数操作数,编码在指令中常数操作数,编码在指令中(取指完成,操(取指完成,操作数立即得到,因此得名)作数立即得到,因此得名),立即数有前缀标,立即数有前缀标志志“#”#”。例例MOV AMOV A,#40H#40H 在表示法中,记为在表示法中,记为#data8#data8位立即数;位立即数;#datal616#datal616位立即数。位立即数。区别:区
9、别:MOV AMOV A,#3AH3AH;立即寻址;立即寻址 MOV AMOV A,3AH3AH;直接寻址;直接寻址立即寻址立即寻址(Immediate addressingImmediate addressing)存储器操作数,地址在寄存器中存储器操作数,地址在寄存器中寄存器名加前缀寄存器名加前缀“”标志标志例例 MOV A,R0寄存器间接寻址寄存器间接寻址(Registor Indirect Addressing)(Registor Indirect Addressing)间接寻址空间及范围间接寻址空间及范围存储空间存储空间/助记符助记符间址寄存器地址范围地址范围内部内部RAM RAM M
10、OVMOVRiRi00H-FFH00H-FFH扩展RAM MOVXRiRiDPTRDPTR00H-FFH00H-FFH0000-FFFFH扩展RAM页MOVXRiRi页地址由P2确定页内地址00H-FFH例:MOVA,R0例:MOVXDPTR,A需先向间址寄存器写入地址码基址寄存器基址寄存器:DPTR:DPTR或或PCPC(含(含1616位地址)位地址)变址寄存器变址寄存器:A:A(含(含8 8位地址)位地址)两寄存器内容相加,作为两寄存器内容相加,作为1616位存储器地址,在代码空间位存储器地址,在代码空间访问操作数(常数)或目标地址(转移)访问操作数(常数)或目标地址(转移)仅有仅有3 3
11、条这样的指令:条这样的指令:MOVMOVC C A A,A+DPTRA+DPTRMOVMOVC C A A,A+PCA+PCJMP JMP A+DPTRA+DPTR前两条为查表指令,后一条实现散转。前两条为查表指令,后一条实现散转。基址变址寻址基址变址寻址(Based Indexed Addressing)(Based Indexed Addressing)相对寻址相对寻址l相对寻址不用于操作数的寻址,只用于控制转移指令,相对寻址不用于操作数的寻址,只用于控制转移指令,是程序目标地址的形成方法之一。是程序目标地址的形成方法之一。l目标地址目标地址=当前指令地址当前指令地址+指令字节数指令字节数
12、+rell例:例:JZ 30H ;若若A=0,(,(PC)(PC)+02H+30H ;若若A0,则程序顺序执行,则程序顺序执行 指令中给出可寻址位的位地址,据此进行位操作。指令中给出可寻址位的位地址,据此进行位操作。位寻址位寻址范围包括:范围包括:(1 1)内部)内部RAMRAM中的可位寻址区中的可位寻址区字节地址字节地址20-2FH20-2FH,128128个位,位地址个位,位地址00-7FH00-7FH(2 2)SFRSFR的可寻址位的可寻址位字节地址能被字节地址能被8 8整除整除,位地址位地址80-FFH80-FFH例:例:MOVMOVC C,20H 20H 不是直接寻址注意不是直接寻址
13、注意例:例:SETBSETB F0F0位寻址(位寻址(Bit AddressingBit Addressing)l直接位地址表示法:如直接位地址表示法:如D5HD5H,表示,表示PSWPSW的的D5D5位;位;l点操作符法:点操作符法:PSW.520H.1 ACC.7;l位名称法位名称法:P C F0 P1.0 P3.5 T0;l伪指令自定义的字符名称。如伪指令自定义的字符名称。如USRF bit F0USRF bit F0以后的程序中就用以后的程序中就用USRFUSRF代替代替F0F0;问题:在程序行中,大致相同的助记符,其中的地址理问题:在程序行中,大致相同的助记符,其中的地址理解为字节地
14、址还是位地址?是否位操作?解为字节地址还是位地址?是否位操作?这主要看指令功能、上下文。这主要看指令功能、上下文。位地址表示法位地址表示法l内部数据传送指令(内部数据传送指令(15条)条)l外部数据传送指令(外部数据传送指令(7条)条)l堆栈操作指令(堆栈操作指令(2条)条)l数据交换指令(数据交换指令(4条)条)使用最频繁的一类指令使用最频繁的一类指令,通用格式:通用格式:MOV dstMOV dst,srcsrc 执行后,源操作数保持不变执行后,源操作数保持不变 基本不影响标志位,例外的是基本不影响标志位,例外的是奇偶标志位奇偶标志位P P以以PSW为为dst7.2 数据传送类指令MOV
15、A,#data ;(A)#dataMOV direct,#data ;(direct)#dataMOV Ri,#data ;(Ri)#dataMOV Rn,#data ;(Rn)#dataMOV DPTR,#datal6 ;(DPTR)#data161.立即数为源操作数的传送指令MOV A,direct;(A)(direct)MOV direct,A ;(direct)(A)MOV A,Ri ;(A)(Ri),i取取0或或1MOV Ri,A ;(Ri)(A),i取取0或或1MOV A,Rn ;(A)(Rn),n取取07MOV Rn,A ;(Rn)(A),n取取072 累加器A(Rn、RAM、S
16、FR)之间的数据传送MOV direct,direct;(direct)(direct)MOV direct,Ri ;(direct)(Ri),i取取0或或1MOV Ri,direct ;(Ri)(direct),i取取0或或1MOV direct,Rn ;(direct)(Rn)MOV Rn,direct ;(Rn)(direct),n取取073.RAM,Rn,SFR之间的数据传送字节交换指令字节交换指令XCH A,direct;(A)(direct)XCH A,Ri;(A)(Rt),i取取0或或1XCH A,Rn;(A)(Rn),n取取07半字节交换指令半字节交换指令XCHD A,Ri ;
17、(A3A0)(Ri)30)特点:特点:围绕围绕A设计的指令,设计的指令,操作数寻址方式有限制操作数寻址方式有限制4.字节、半字节交换指令设设(R0)=20H,(A)4EH,(20H)=85H 执行指令:执行指令:XCH A,R0,结果:结果:(A)85H,(20H)4EH,实现,实现A与与20H单单元内容互换。元内容互换。设设(R0)30H,(A)=46H,(30H)=85H执行指令执行指令:XCHD A,R0结果:结果:(30H)=86H,(A)=45H,实现了低,实现了低4位内位内容互换,而高容互换,而高4位内容不变。位内容不变。例7-1,7-2MOV指令数据传送指令数据传送5 栈操作指令
18、l进栈指令 PUSH direct ;(SP)(SP)+1,(SP)(direct)功能:堆栈指针SP加1,然后将直接地址direct单元的内容送到SP所指向的栈顶。l出栈指令 POP direct ;(direct)(SP),(SP)(SP)1 功能:将SP所指向的堆顶的内容送到直接地址direct指向的单元中,然后堆栈指针SP减1。例73在中断响应时,在中断响应时,(SP)26H,(DPTR)=0213H。执行下列指令。执行下列指令PUSH DPL PUSH DPH后后RAM地址地址27H,28H和栈指针和栈指针SP的内容。的内容。DPL和和DPH分别是分别是DPTR的低的低8位和高位和高
19、8位,并可以单独使用。另外,位,并可以单独使用。另外,本指令系统的堆栈只支持本指令系统的堆栈只支持8位操作,因此位操作,因此16位的位的DPTR需要保存到堆栈需要保存到堆栈就只能分两次实现。就只能分两次实现。执行执行PUSH DPL后:后:(SP)+1 (SP)27H,(DPL)=13H (27H)执行执行PUSH DPH后:后:(SP)+1 (SP)28H,(DPH)02H (28H);执行结果:执行结果:内部内部RAM(27H)13H,(28H)02H,(SP)28H正误正误PUSH指令的操作数只能是直接寻址,以下指令是合法的:PUSH ACC POP BPUSH 01H但下列两条指令是错
20、误的:PUSHAPUSHR1ACC、B、01H都是直接地址,而A和R1都是寄存器。例74设(SP)62H,内部RAM的60H62H中的内容分别为20H,23H,01H,执行下列指令分别有怎样的结果?POP DPH (SP)=(62H)01H (DPH)(SP)-1=62-1=61H (SP)POP DPL(SP)(61H)23H DPL(SP)161H160H SP POP SP(SP)-15FH SP(SP)(60H)20H SP结果:(DPTR)0123H,(SP)20H这里第3条指令特殊,其操作为:栈指针(SP)先减1为5FH,后装入由栈顶弹出的值,最后(SP)20H。1 外部外部RAM
21、的与累加器的与累加器A之间的数据传送之间的数据传送 MOVX A,DPTR MOVX DPTR,A MOVX A,Ri MOVX Ri,Al 前面两条指令可以访问外部前面两条指令可以访问外部RAM的整个的整个64K空空间,地址范围是间,地址范围是0000HFFFFH;l后两条指令可以访问外部后两条指令可以访问外部RAM任一页中任一页中00HFFH的的256个字节,页地址由个字节,页地址由P2口的锁存器决定。口的锁存器决定。外部数据传送指令2 2外部外部ROM向累加器向累加器A传送指令传送指令 这类指令共有两条变址寻址,单向传输,这类指令共有两条变址寻址,单向传输,因专用于查表,又称为查表指令,
22、指令的格式为因专用于查表,又称为查表指令,指令的格式为:MOVC A,A+PC MOVC A,A十十DPTR把把20H20H2FH2FH单元中的内容转移到单元中的内容转移到40H40H4FH4FH单元中单元中 MOV R0,#20H MOV R0,#20H ;设定源数据块指针;设定源数据块指针 MOV R1,#40H MOV R1,#40H ;设目的数据块指针;设目的数据块指针 MOV R2,#16 MOV R2,#16 ;数据块长度,;数据块长度,1010进制进制LOOPLOOP:MOV A,R0 MOV A,R0 ;取数;取数 MOV R1,AMOV R1,A ;存数;存数 INC R0
23、INC R0 ;指针调整;指针调整 INC R1 INC R1 ;指针调整;指针调整 DJNZDJNZ R2,LOOP R2,LOOP ;循环控制;循环控制LOOPLOOP是标号,标记循环的开始地址;是标号,标记循环的开始地址;DJNZDJNZ是循环控制指令,后面才讲到。是循环控制指令,后面才讲到。思考:如果题目要求变一下,把思考:如果题目要求变一下,把20H20H2FH2FH单元中的内单元中的内容转移到容转移到28H28H37H H单元中,应该怎样修改程序?单元中,应该怎样修改程序?例补例 MCS5l MCS5l有比较丰富的算术运算指令有比较丰富的算术运算指令:可以分为可以分为加法、减法、十
24、进制调整加法、减法、十进制调整和和乘除法乘除法四类。四类。除除加加1 1和和减减1 1指令指令外,其余指令均能影响外,其余指令均能影响PSWPSW标志特标志特征。征。7.3算术运算类指令l参加运算的两个数必须是参加运算的两个数必须是8位二进制数,结果也是位二进制数,结果也是一个一个8位二进制数,且对位二进制数,且对PSW中标志位产生影响。中标志位产生影响。l既可以把参加运算的两个操作数理解为无符号数既可以把参加运算的两个操作数理解为无符号数(0255),也可以把理解为带符号数的补码形式,也可以把理解为带符号数的补码形式(128127)。lCPU同时按无符号数运算法则影响同时按无符号数运算法则影
25、响PSW中的中的CY标标志位志位;按带符号数法则影响按带符号数法则影响PSW中的中的OV标志位。标志位。加减法指令的特点:加减法指令的特点:不带进位不带进位lADD A,#data ;(A)(A)+#datalADD A,direct ;(A)(A)+(direct)lADD A,Ri ;(A)(A)+(Ri)lADD A,Rn ;(A)(A)+(Rn)带进位加法指令带进位加法指令lADDC A,#data ;(A)(A)+#data+(C)lADDC A,direct ;(A)(A)+(dirct)+(C)lADDC A,Ri ;(A)(A)+(Ri)+(C)lADDC A,Rn ;(A)(
26、A)+(Rn)+(C)加法指令带借位减法指令带借位减法指令SUBB A,#data ;(A)(A)data (C)SUBB A,data ;(A)(A)(data)(C)SUBB A,Ri ;(A)(A)(Ri)(C)SUBB A,Rn ;(A)(A)(Rn)(C)MCS-51的减法指令只有带借位的一种选择,如果不需要带借位的减法运算,减法指令前增加一条CLR C指令,这条指令的功能是清除进位标志。加加1减减1指令指令加1指令INC A ;(A)(A)+1INC Direct ;(direct)(direct)+1INC Ri ;(Ri)(Ri)+1INC Rn ;(Rn)(Rn)+1INC
27、DPTR ;(DPTR)(DPTR)+1减1指令DEC A ;(A)(A)1DEC Direct ;(direct)(diret)1DEC Ri ;(Ri)(Ri)1DEC Rn ;(Rn)(Rn)1例写出以下一段程序各写出以下一段程序各条指令执行的结果条指令执行的结果 MOVMOVA A,#0B3H#0B3H MOV MOV20H20H,#10H#10H MOV MOVR0R0,#20H#20H ADD ADDA A,R0R0 ADD ADDA A,R0R0 ADD ADDA A,#20H#20H(A)=0B3H(20H)=10H(R0)=20H(A)+(R0)=0B3H+10H=0C3HC
28、Y=0,OV=0(A)+(R0)=0C3H+20H=0E3HCY=0,OV=0(A)+20H=0E3H+20H=03HCY=1,OV=0写出以下一段程序各写出以下一段程序各条指令执行的结果条指令执行的结果 MOVMOVA A,#0B3H#0B3H MOV MOV20H20H,#10H#10H MOV MOVR0R0,#20H#20H ADD ADDA A,R0R0 ADD ADDA A,R0R0 ADD ADDA A,#20H#20H(A)=0B3H(20H)=10H(R0)=20H(A)+(R0)=0B3H+10H=0C3HCY=0,OV=0(A)+(R0)=0C3H+20H=0E3HCY=
29、0,OV=0(A)+20H=0E3H+20H=03HCY=1,OV=0第一数存于第一数存于30H30H和和31H31H地址单元,第二数存于地址单元,第二数存于32H32H和和33H33H地地址单元,和存于址单元,和存于34H34H和和35H35H地址单元。数据存储时假定高地址单元。数据存储时假定高位在前,低位在后。位在前,低位在后。MOV AMOV A,31H31H;取第;取第1 1数低位数低位 ADD AADD A,33H33H;加第;加第2 2数低位数低位 MOV 35HMOV 35H,A A;存和的低位;存和的低位 MOV AMOV A,30H30H;取第;取第1 1数高位数高位 ADD
30、C AADDC A,32H32H;带进位加第;带进位加第2 2数高位数高位 MOV 34HMOV 34H,A A;存和的高位;存和的高位例 两个16位数加法DA ADA A没有直接的没有直接的BCDBCD码运算指令码运算指令借用二进制加法运算指令实现压缩借用二进制加法运算指令实现压缩BCDBCD码的运算码的运算两个两个BCDBCD码的加法可能结果不是码的加法可能结果不是BCDBCD码码该指令对累加器中的结果进行调整。该指令对累加器中的结果进行调整。调整依据:调整依据:1 BCD1 BCD码的低位码的低位9 9 或或 半进位半进位ACAC1 1 加加06H06H调整;调整;2 BCD2 BCD码
31、的高位码的高位9 9 或或 CYCY1 1 加加60H60H调整;调整;3 3 如果以上两条都符合,则加如果以上两条都符合,则加66H66H调整调整指令仅对进位标志指令仅对进位标志CYCY产生影响。产生影响。十进制调整指令例7-5l多字节加法运算问题:两个8字节无符号数分别存放在内部RAM的30h和38h开始的连续地址单元,且低位在前,高位在后。假定计算结果仍不超过8字节的范围,并要求将结果放在30h开始的连续8个存储单元。试编写该程序段。MOVB,#8;计数初值MOVR0,#30H;第一操作数起始地址MOVR1,#38H;第一操作数和结果起始地址CLRC ;清除进位位REPEAT:MOVA,
32、R0;取加数到AADDC A,R1;带进位加法MOVR1,A;存结果INCR0;地址调整INCR1;地址调整DJNZB,REPEAT;B内容减1,若不等于0则跳转思考:1 为什么要有CLR C 语句?2 如果是8字节BCD码运算,应该如何修改?作业7-12类似3 为什么INC指令不影响CY?l MUL AB MUL AB 乘法乘法 l(B)B)(A)A)(B)(B)15158 8l(A)A)(A)A)(B)(B)7 70 0l除法除法 DIV ABDIV ABl(A)=(A)/(B)(A)=(A)/(B)l(B)=(A)%(B)(B)=(A)%(B)无符号整数乘法和除法指令(1616位部分积)
33、位部分积)(R7R7)(R5R5)(1616位部分积)位部分积)(30H30H)(31H)31H)(32H32H)2424位乘积位乘积+(R6R6)(R5R5)(R6)R6)(R7R7)(R5R5)例 16X8位乘法程序l仿照十进位数竖式乘法,编程如下:仿照十进位数竖式乘法,编程如下:MOV AMOV A,R7R7 MOV B MOV B,R5R5 MUL AB MUL AB;(;(R7R7)*(R5R5)MOV 32HMOV 32H,A A;部分积的低;部分积的低8 8位直接保存位直接保存32H32H单元单元 MOV R7,BMOV R7,B;部分积高位暂存在;部分积高位暂存在R7R7中中
34、MOV AMOV A,R6R6 MOV B MOV B,R5R5 MUL AB MUL AB;(;(R6R6)(R5R5)ADD AADD A,R7R7;部分积低;部分积低8 8位与上次部分积高位与上次部分积高8 8位相加位相加 MOV 31HMOV 31H,A A;存中;存中8 8位字节位字节 CLR ACLR A ADDC A ADDC A,B B;部分积高;部分积高8 8位与中位与中8 8位的进位位相加位的进位位相加 MOV 30HMOV 30H,A A;存中;存中8 8位字节位字节l双操作数逻辑运算双操作数逻辑运算l与与 ANLANLl或或 ORLORLl异异 XRLXRLl单操作数逻
35、辑运算单操作数逻辑运算l累加器其清零累加器其清零 CLRCLRA Al累加器取反指令累加器取反指令 CPL ACPL Al累加器移位指令累加器移位指令 RR RR A A7.4 逻辑操作类指令以直接地址为目的操作数以直接地址为目的操作数与累加器内容或立即数与累加器内容或立即数数按位与运算数按位与运算结果送回直接地址;结果送回直接地址;以累加器以累加器A为目的操作数为目的操作数把累加器把累加器A和源地址中操作和源地址中操作数按位与运算数按位与运算结果送回累加器结果送回累加器A;逻辑与指令ANL A,RnANL A,directANL A,RiANL A,#data8ANL direct,AANL
36、 direct,#data87.4.2逻辑或指令、逻辑异或指令lORL A,RnlORL A,directlORL A,RilORL A,#data8lORL direct,AlORL direct,#data8lXRL A,RnlXRL A,directlXRL A,RilXRL A,#data8lXRL direct,AlXRL direct,#data8例例7-6设(A)36H,(R4)0FH。求执行指令 ANL A,R4 后的结果执行结果 (A)00110110B (R4)00001111B (A)00000110B怎样在内存中将az的ASCII码变换为AZ的ASCII码?已知a和A的
37、ASCII分别为61h和41h,其余字母的ASCII按16进制数规律顺序递增。小写字母的ASCII码与上11011111B,得到相应的大写字母的ASCII码。设(A)0A8H ,data0FH。执行指令 ORL A,#data执行结果 (A)10101000B data 00001111B (A)10101111B 怎样在内存中将AZ 的ASCII码变换为az的ASCII码?大写字母的ASCII码或上00100000B,得到相应的小写字母的ASCII码。例例7-7设:一个以设:一个以ASCIIASCII码形式表示的两位数,其十位和个位码形式表示的两位数,其十位和个位分别存放在内部的分别存放在内
38、部的20H,21H20H,21H地址,试将其转换成一字节地址,试将其转换成一字节表示的表示的BCDBCD码数,并发送到码数,并发送到P1P1端口。端口。MOV R0,#20HMOV R0,#20H MOV A,R0 MOV A,R0 ;取十位ASCII码 ANL A,#0FHANL A,#0FH ;保留低4位,高4位清0 INC R0 INC R0 MOV B,#10H MOV B,#10H ;个位移到高4位上 MUL ABMUL AB XCHD A,R0 XCHD A,R0 ;将个位的低4位交换过来 MOV P1MOV P1,A A如果是将这两个如果是将这两个ASCIIASCII码转成二进制
39、数,要作怎样的修改?码转成二进制数,要作怎样的修改?例数字数字52的的ASCII码码35H32H20H21H5 2BCD码码SWAP A即实验二 8-70-9减30H A-F减37H已知:内部已知:内部RAM 30HRAM 30H中有一数(如中有一数(如AAHAAH)现欲)现欲令它高令它高4 4位不变低位不变低4 4位取反,试写出相应指令组。位取反,试写出相应指令组。MOV AMOV A,#0FH#0FH;XRL 30H,AXRL 30H,A例CLR ACLR A;清;清0 0 CPL ACPL A;取反;取反 为单字节单周期指令。试比较下列两组指令:为单字节单周期指令。试比较下列两组指令:累
40、加器清零和取反指令MOV R0,#0MOV R1,#0MOV R2,#0MOV R3,#0CLR AMOV R1,AMOV R2,AMOV R3,AMOV R4,A RL ARL A;累加器左环移一位累加器左环移一位;RLC A RLC A;累加器通过累加器通过C C左环移一位左环移一位;RR A RR A 累加器右环移一位累加器右环移一位;RRC A RRC A;累加器通过累加器通过C C 右环移一位右环移一位 SWAP ASWAP A;半字节交换半字节交换累加器A移位指令(1字节1周期)l1 1)无条件转移指令)无条件转移指令l2 2)条件转移指令)条件转移指令l3 3)子程序调用和返回指
41、令)子程序调用和返回指令7.5 控制转移类指令 LJMP addr16LJMP addr16;长转移指令;长转移指令 AJMP addr11AJMP addr11;绝对转移指令;绝对转移指令 SJMP rel SJMP rel ;相对转移指令,;相对转移指令,JMP A+DPTRJMP A+DPTR;变址寻址转移指令;变址寻址转移指令无条件转移指令l长转移指令长转移指令(64KB(64KB范围内转移指令范围内转移指令)LJMP LJMPaddr16addr16 执行时,执行时,addrl6addrl6送入程序计数器送入程序计数器PCPC,下条指令取指令,下条指令取指令时,转移自然发生。时,转移
42、自然发生。本指令为本指令为3 3字节字节2 2周期指令周期指令例例 已知某型号已知某型号MCUMCU在出厂时自带一段有用的程序代码,在出厂时自带一段有用的程序代码,ROMROM区的地址是区的地址是F100HF100H,怎样转移到该处执行?,怎样转移到该处执行?用指令用指令LJMP 0F100HLJMP 0F100Hl绝对转移指令绝对转移指令(2K(2K地址内的转移指令地址内的转移指令)AJMP addr11 AJMP addr11执行时,执行时,addrl1addrl1送入程序计数器送入程序计数器PCPC的低的低1111位,位,PCPC的高的高5 5位不位不变,即在一定范围内转移变,即在一定范
43、围内转移本指令为本指令为2 2字节字节2 2周期指令周期指令功能:功能:(PC)(PC)+2,(PC)(PC)+rel 转移范围转移范围 Rel=-128Rel=-128+127+127 目标地址目标地址=源地址源地址+rel或或Rel=目标地址源地址。目标地址源地址。l关于源地址的解释:关于源地址的解释:l指令微操作期间,指令微操作期间,(PC)实际在取指的同时递增实际在取指的同时递增l取指毕但尚未执行时,取指毕但尚未执行时,(PC)已递增到其下一条指令的地址,已递增到其下一条指令的地址,这就是源地址。这就是源地址。l这就是这就是(PC)(PC)+2。lrel由汇编器计算,为由汇编器计算,为
44、1字节补码,带符号扩展后与字节补码,带符号扩展后与16位位(PC)相加,实现跳转。相加,实现跳转。l从现行指令的首地址算起,该范围就是从现行指令的首地址算起,该范围就是126+129。相对转移指令 SJMP rel 2000H 80 54H SJMP rell间接转移指今间接转移指今 JMP A+DPTRJMP A+DPTR;(PC)(PC)(DPTR)+(A)(DPTR)+(A)1 1字节字节2 2周期转移指令;周期转移指令;目标地址由基址目标地址由基址+变址获得,习惯上称为间接转移。该指变址获得,习惯上称为间接转移。该指令实现散转,支持类似于令实现散转,支持类似于C C语言中的语言中的sw
45、itch/caseswitch/case选择。如选择。如图图实现散转的程序安排实现散转的程序安排MOV DPTR,#TABLEADD A,A ;A内容乘2,因散转表每一项为2字节JMP A+DPTRTABLE:AJMP K0;散转表,第0项,转K0执行 AJMP K1 ;散转表,第1项,转K0执行 AJMP K5 ;散转表,第5项,转K5执行 K0:;K0分支实际入口AJMPDONE;K0分支结束,转出K1:;K1分支实际入口AJMPDONE;K1分支结束,转出 K5:;K5分支实际入口AJMPDONE;K5分支结束,转出(此为最后一项)DONE:(1)(1)累加器累加器A A判零转移指令判零
46、转移指令 JZ rel JZ rel 若若(A)=0 PCPC+2+REL(A)=0 PCPC+2+REL 若若(A)0 PCPC+2(A)0 PCPC+2 JNZ rel JNZ rel 若若(A)0 PCPC+2+REL(A)0 PCPC+2+REL 若若(A)=0 PCPC+2(A)=0 PCPC+2 许多许多MPUMPU都具有用于判断运算结果是否为零都具有用于判断运算结果是否为零的标志位;但是,的标志位;但是,MCS-51MCS-51省略了该标志。它仅凭省略了该标志。它仅凭(A)(A)的内容,不需要运算,就直接用于判别。的内容,不需要运算,就直接用于判别。条件转移指令(2)根据进位标志
47、位转移根据进位标志位转移lJC rel ;Cy=1时转移:PC PC+2+rel,;Cy=0时顺序执行:PCPC+2lJNC rel;C=0时转移:PC PC+2+rel,;Cy=1时顺序执行:PCPC+2例例010001XXXY POSI:DONE:MOVMOVJZJNBMOVSJMPMOVA,DONEACC.7,A,DONEA,21H,20HPOSI#0FFH#01HA;A X;若;若X=0转转DONE;X0转转POSI;若;若X0,则,则Y=1;存函数值;存函数值如下函数,如下函数,变量X存放在20H单元内,函数值Y存放在21H单元中,试按下式的要求给Y赋值。(3)(3)比较条件转移指令
48、比较条件转移指令 CJNE A,direct,relCJNE A,direct,rel 若若(A)direct,PCPC+3+rel(A)direct,PCPC+3+rel相对转移;相对转移;(A)=(A)=(directdirect),),PCPC+3PCPC+3顺序执行;顺序执行;且若且若(A)(A)(directdirect),),CY=0;CY=0;(A)(A)(directdirect),),CY=1CY=1类似的指令还有三条:类似的指令还有三条:CJNE A,#data8,relCJNE A,#data8,rel CJNE Rn,#data8,rel CJNE Rn,#data8,
49、rel CJNE Ri,#data8,rel CJNE Ri,#data8,rel都是都是3 3字节指令,源地址为指令存储地址字节指令,源地址为指令存储地址+3+3,偏移量,偏移量relrel为为-128-128+127+127。相对于其存储地址来说,转移范围为相对于其存储地址来说,转移范围为-125-125+130+130。比较相当于减法,但不保存结果,只影响比较相当于减法,但不保存结果,只影响CyCy标志。标志。若参加比较的操作数若参加比较的操作数X X和和Y Y是无符号数,若是无符号数,若cy=0cy=0,则,则X XY Y;若若CyCyl l,则,则X XY Y。若是补码,则仅根据若是
50、补码,则仅根据CyCy无法判断它们的大小的。无法判断它们的大小的。建议先将待比较的两个数都加建议先将待比较的两个数都加80H80H,转为无符号比较和判,转为无符号比较和判断,比较完毕,根据需要在把两数恢复成原来的数。断,比较完毕,根据需要在把两数恢复成原来的数。例例l7-14 内部RAM 30H单元开始存放8个无符号字节型数据,试找出其中的最大数,并将其存放在R7中。程序段程序段MOV R0,#30H;数据区首地址MOV R6,#08H;数据区长度MOV A ,R0;读第一个数DEC R6LOOP:INC R0 MOV B,R0;读下一个数 CJNE A,B,NE;数值比较,不相等转移Norm