单片机03指令系统_第1页
单片机03指令系统_第2页
单片机03指令系统_第3页
单片机03指令系统_第4页
单片机03指令系统_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

1、2007年2月信息与计算机学院第一章第一章 绪论绪论 第二章第二章 第三章第三章 MCSMCS5151单片机单片机及及 汇编语言程序设计汇编语言程序设计 第四章第四章 MCS-51MCS-51的的第五章第五章 第六章第六章 第七章第七章 单片机系统单片机系统 目目 录录2007年2月信息与计算机学院第三章第三章 MCSMCS5151单片机指令系统单片机指令系统 及汇编语言程序设计及汇编语言程序设计3.1 3.1 指令系统指令系统3.2 3.2 指令指令3.3 MCS3.3 MCS5151指令系统的指令系统的3.4 MCS3.4 MCS5151单片机单片机3.5 3.5 汇编语言程序设计汇编语言

2、程序设计 2007年2月信息与计算机学院3.4 MCS3.4 MCS5151单片机指令系统单片机指令系统MCS51单片机指令系统按指令的功能可分为: 3.4.1 类指令(28条) 3.4.2 类指令(24条) 3.4.3 类指令(25条) 3.4.4 类指令(17条) 3.4.5 指令(17条)共计111条指令。 2007年2月信息与计算机学院3.4.13.4.1 数据传送类指令数据传送类指令 在数据传送类指令中,除了以累加器A为目的操作数指令会对奇偶校验标志P产生影响外,其余指令执行时,均不会影响任何标志。v 传送指令 v 传送指令 v 传送指令,v 指令 1. 指令 2007年2月信息与计

3、算机学院1. 内部数据传送指令内部数据传送指令 data ;Adata direct ;A(direct) MOV A , Rn ;ARn Ri ;A(Ri) data ;Rndata MOVRn , direct ;Rn(direct) A ;RnA 指令为MOV,寻址区域为片内RAM。2007年2月信息与计算机学院内部数据传送指令(续)内部数据传送指令(续) MOV direct1,direct2 ;(direct1)(direct2) data ;(direct)data MOV direct, Rn ;(direct) Rn A ;(direct) A Ri ;(direct) (Ri

4、) 2007年2月信息与计算机学院内部数据传送指令(续)内部数据传送指令(续) data ;(Ri) data MOV Ri , direct ;(Ri) (direct) A ;(Ri) A MOVDPTR,data16 ;DPH dataH ;DPLdataL 注意事项1 1。不能根据主观意愿去。不能根据主观意愿去“创造创造”指令。指令。 例如:将例如:将R0R0中的数据传送到中的数据传送到R1R1中。如何使用指中。如何使用指令去完成上面的操作?令去完成上面的操作? MOV R1,R0MOV R1,R0 是否可以?回答是是否可以?回答是否定的否定的!因为!因为在在MCS-51MCS-51的

5、指令系统中没有此条指令!的指令系统中没有此条指令!只能使用:只能使用: MOV A,R0MOV A,R0 MOV R1,AMOV R1,A或或: :MOV 01H, 00H (MOV 01H, 00H (假设当前假设当前RS1=0RS1=0、 RS0=0) RS0=0)MCS-51内部数据传送类指令方式图累加器Adirect直接寻址Ri间址Rn寄存器Data立即数1。立即数data只能作为源操作数,不能作为目的操作数;2。Rn与Ri不能互为目的数;3。A、direct、Ri可互为目的操作数2007年2月信息与计算机学院2。要会正确地估计。要会正确地估计指令的字节指令的字节。方法:。方法:(1)

6、指令本身占指令本身占1B(2)出现出现1次次8位位data加加1字节,字节,1次次16位位data加加2B,1次次direct加加1B,1次次add11加加1B,1次次add16加加2B,1次次rel加加1B,1次次bit加加1B. 例:例: MOV A, direct 2BMOV A, #data2BMOV DPTR, #data3BMOV direct, #data3BMOV direct2, direct13BJBC bit, rel 3BMOV A, Ri1B内部传送类指令举例试编出把试编出把30H和和40H单元内容进行交换。单元内容进行交换。MOV A,30H ;(30h) AMOV

7、 30H,40H ;(40h) 30h MOV 40H,A ; A 40h RAMXY累加器A30H40HMCS-51 片内 、片外 数据存储器示意图 特殊功能特殊功能寄存器寄存器SFR通用数据通用数据存储器存储器80H7FH00HFFH片内数据存储器片内数据存储器 片外数据存储器片外数据存储器256个字节个字节 64K个字节个字节片外数据片外数据存储器存储器64KB0000HFFFFH注意:注意:1,访问片内访问片内RAM的的20H存储单元;存储单元;MOV A,20H或或 MOV R0,#20H MOV A,R02,访问片外访问片外RAM存储单元;存储单元; MOV R0,#20HMOVX

8、 A,R03,尽管片内与片外的尽管片内与片外的RAM单元单元的的00H-FFH地址相重叠但由于地址相重叠但由于指令的不同指令的不同(MOV,MOVX)不会发生地址混乱。不会发生地址混乱。例3.1MOVA,10H ;A10HMOV R0,20H ;R020HMOV R1,A ;R110HMOV 20H,00H ;(20H)00HMOV DPTR,2000H;DPTR2000HMOV 40H,R0 ;(40H)00HMOV R1,40H ;(10H)00H程序执行后的结果:A10H,R020H,R110H,(40H)00H(10H) 00H,(20H) 00H,DPTR2000H2007年2月信息

9、与计算机学院2007年2月信息与计算机学院2. 外部数据传送指令外部数据传送指令 MOVX A, Ri ;A (Ri)MOVX Ri,A ;(Ri) AMOVX A, DPTR ;A (DPTR)MOVX DPTR,A ;(DPTR) A片外RAM区低256B或全部64KB(0000H0FFFFH)之间进行数据传送。 2007年2月信息与计算机学院例3.2 编程将片外1000H单元的内容传送至 2000H单元中去。MOVDPTR,1000H;取源地址1000HMOVX A, DPTR;将1000H单元中数据送入AMOVDPTR,2000H ;取目的地址2000HMOVX DPTR,A;A中数送

10、入2000H单元2007年2月信息与计算机学院 3. 3. 程序存储器传送指令(查表指令)程序存储器传送指令(查表指令) ADPTR ;A(ADPTR)MOVC A, APC ;A(APC) 第一条指令可以在整个64KB的ROM 中寻址操作数,并送给累加器;常用于ROM区中已知固定地址的表格数据。第二条指令只能在相对当前PC值不超过256B的范围内寻址操作数 (随PC变化在64KB范围内浮动)。常用于ROM区中地址随程序变化的表格数据。2007年2月信息与计算机学院 4. 4. 堆栈操作指令堆栈操作指令PUSH direct ;SPSP1,(SP)(direct)POP direct ;(di

11、rect)(SP),SPSP1 MCS-51单片机软件堆栈区在片内RAM的00H7FH,其组织方式为:栈底在地址小的单元,栈顶向地址大的方向发展,且单字节操作。判断下列指令是否合法?如有错,请改正PUSH B ? PUSH A ? PUSH DPTR ?2007年2月信息与计算机学院前一个正确。后一个错,操作数应为直接寻址。改为PUSH ACC 或 PUSH 0E0H错。MCS-51的堆栈是以字节为单位操作的,且DPTR不是直接寻址。 改为两条指令PUSH DPHPUSH DPL例3.3 查表求09的平方值。ORG 1000HSTART: MOV DPTR,2000HMOV A,NUMB ;N

12、UMB09MOVC A, ADPTRSJMP $2000H: DB 0,1,4,9,16,25,36,49,64,812007年2月信息与计算机学院2000H02001H12002H42003H92004H162005H252006H362007H492008H642009H81例3.4 查表将累加器A中的09的二进制数转换成ASCII码。ORG 2000HSTART: MOV A,NUMB ;NUMB09ADD A,02H ;修正地址MOVC A, APCSJMP $;本指令2个字节TAB : DB 0,1,2,3,4,5,6,7,8,9画出此段程序及常数表格示意图2007年2月信息与计算机

13、学院例例3.5利用堆栈传送参数利用堆栈传送参数已知:(10H)01H, (20H)02H问:程序执行完毕:(10H)?,(20H)?MOV SP,30H ;修改堆栈指针PUSH 10HPUSH 20HPOP 10HPOP 20H2007年2月信息与计算机学院例例3.5利用堆栈传送参数利用堆栈传送参数2007年2月信息与计算机学院图36堆栈传送参数示意图程序执行完毕:(10H)02H,(20H)01H,实现了利用堆栈将10H单元和20H单元互换存储数据。例:若在外部例:若在外部ROM/EPROM中中2000H单元开始依次单元开始依次存放存放09的平方值,数据指针的平方值,数据指针DPTR=3A0

14、0H,用查表,用查表指令取出指令取出3的平方,要求保持的平方,要求保持DPTR中的内容不变。中的内容不变。 试试编制程序完成以上功能的程序。编制程序完成以上功能的程序。解:源程序如下:解:源程序如下:MOV A, 03H PUSH DPH PUSH DPL MOV DPTR , 2000H MOVC A, A+DPTR POP DPL POP DPH 2000H02001H12002H42003H92004H162005H252006H362007H492008H642009H812007年2月信息与计算机学院5. 交换指令交换指令 direct ;A(direct)XCH A , Rn ;A

15、Rn Ri ;A(Ri)XCHD A, Ri ;A30(Ri)30SWAP A ;A74A30 以A为中介!且只能在A与内部RAM区交换例3.6已知片外RAM 10H中有一数NUMB1,内部RAM 30H中有一数NUMB2,试编程互换之。MOVR0,10H ;片外地址存入寄存器MOVXA,R0 ;片外(10H)内的数NUMB1送入AXCH A,30H ;累加器中的数NUMB1与片内(30H);中的数NUMB2互换位置MOVX R0,A ;累加器中数NUMB2送入片外(10H)程序执行后,片外RAM (10H)NUMB2,片内RAM (30H)NUMB1。2007年2月信息与计算机学院例3.7将

16、片内RAM 20H,21H单元中两个以ASCII码表示的十进制数(31H,32H)转换成压缩BCD码并存放在累加器A中:20H的十进制数存放在A高4位,21H的十进制数存放在A低4位。MOV A,00H;累加器赋初值MOV R0,20H;取数字 1的ASCII码存放地址,R0=20HMOV R1,21H;取数字2的ASCII码存放地址,R1=21HXCHD A, R0 ;低4位交换,将第一个数字1的BCD码;送入A低4位,A = 01H,(20H) = 30HSWAP A ;A的高、低4位互换,;数字1的BCD码送入A的高4位, A=10HXCHD A,R1 ;数字数2的BCD码送入A的低4位

17、, A = 12H: (21H) = 30H2007年2月信息与计算机学院2007年2月信息与计算机学院3.4.2 算术运算类指令算术运算类指令算术运算类指令有24条,可实现加、减、增1、减1、乘、除及十进制调整的操作。对8位无符号数,可直接进行运算;也可对压缩的BCD码进行运算,但结果要进行十进制调整的操作;对有符号数及多精度数的运算要编程实现之。算术运算类指令使用的助记符有:ADD、ADDC、INC、SUBB、DEC、DA 、MUL、DIV。 2007年2月信息与计算机学院算术运算类指令对标志位的影响是:加法减法指令执行后,其结果影响Cy、AC、OV;乘法除法指令执行后,Cy0,OV 受影

18、响;若对累加器A进行操作,则影响奇偶校验标志P;INC、DEC指令的运算不影响标志位。影响标志位的指令,见下页表32。表表32影响标志位的指令影响标志位的指令助记符格式助记符格式相应操作相应操作影响的标志位影响的标志位ADD A,RnAARnCy,OV,AC,PADD A,directAA(direct)Cy,OV,AC,PADD A,RiAA(Ri)Cy,OV,AC,PADD A,#dataAAdataCy,OV,AC,PADDC A,RnAARnCyCy,OV,AC,PADDC A,directAA(direct) CyCy,OV,AC,PADDC A,RiAA(Ri) CyCy,OV,A

19、C,PADDC A,#dataAAdataCyCy,OV,AC,PSUBB A,RnAARnCyCy,OV,AC,PSUBB A,directAA(direct)CyCy,OV,AC,PSUBB A,RiAA(Ri)CyCy,OV,AC,PSUBB A,#dataAAdataCyCy,OV,AC,PDA ABCD码加法调整指令Cy,OV,AC,PINC AAA1PDEC AAA1PMUL A BBAABCy0,OV,PDIV A BAAB的商;BAB的余数Cy0,OV,P2007年2月信息与计算机学院2007年2月信息与计算机学院算术运算类指令算术运算类指令指令指令指令指令十进制十进制指令指令

20、指令指令指令指令2007年2月信息与计算机学院1. 加法指令加法指令 Rn ;AARn ADD A, Ri ;AA(Ri) direct ;AA(direct) data ;AAdata 参与运算的数为参与运算的数为8位,和也是位,和也是8位并位并存储在存储在累加器中累加器中。 注意参与运算的两操作数既可以看作无符号数,也可以看作有符号数,其结果是否正确要根据标志进行判断。若视作无符号数运算,则判Cy,当Cy=0时,结果正确;当Cy1时,结果超出8位数范围(0255),不正确。若视作有符号数,则判OV,溢出表达式OVD6Cy D7Cy;D6Cy ,D7Cy为位6向位7和位7向位Cy的进位。当O

21、V0时,结果正确;当OV1时,结果超出8位有符号数表示的范围(128127),不正确。两操作数无论是有符号数还是无符号数,运算时都影响标志位AC、Cy、OV、P。2007年2月信息与计算机学院例3.8 设A4CH,R1C5H,执行不带进位加法指令ADDA,R1,计算机操作如下: 0 1 0 0 1 1 0 0 1 1 0 0 0 1 0 1 (1) 0 0 0 1 0 0 0 1P=0;若把两个数看作无符号数,则结果为111H,AC1,Cy1,有溢出,结果不能用(不考虑OV);若看作有符号数,则结果为11H,且OV D6Cy D7Cy 1 10,没有溢出,结果是正确的。2007年2月信息与计算

22、机学院2007年2月信息与计算机学院 Rn ;AARnCyADDC A, Ri ;AA(Ri) Cy direct ;AA(direct) Cy data ;AAdataCy1. 上述指令中与之相加的Cy是指令ADDC执行之前的Cy值。2. 指令执行后对Cy、AC、OV、P产生的影响同ADD指令。3. ADDC指令与ADD指令联合可实现多字节(多精度)的加法操作。带进位加法指令带进位加法指令2007年2月信息与计算机学院自增自增1加法指令加法指令 A ;AA1 Rn ;RnRn1INC Ri ;(Ri)(Ri) 1 direct ;(direct)(direct) 1 DPTR ;DPTRDP

23、TR11加1指令不对Cy、AC、OV标志产生影响。2若对累加器A增1操作时,将影响P标志。3最后一条指令是MCS51指令系统中唯一一条对16位数的运算指令。若DPL1产生溢出会使DPH1操作,但不影响Cy。2007年2月信息与计算机学院2. 减法指令减法指令 Rn ;AARnCySUBB A,Ri ;AA(Ri) Cy direct ;AA(direct)Cy data ;AAdataCy 这几条指令的功能是把A减去源操作数及进位标志Cy,差存在A中。MCS51指令系统中无不带Cy的减法指令,若进行不带Cy的减法操作时,可先令Cy0(指令CLR C),再使用SUBB指令实现之。说明减法的两操作

24、数无论是无符号数还是有符号数,单片机将对其进行补码加法运算实现减操作。减操作对PSW中Cy,AC,OV,P产生影响。若最高位在减法操作时有借位,则Cy=1,否则Cy = 0;若低4位向高4位有借位,则AC1,否则AC0;若最高位有借位而次高位无借位或最高位无借位而次高位有借位时,OV1,否则OV0;若对累加器A操作,则影响P标志。2007年2月信息与计算机学院2007年2月信息与计算机学院自减自减1减法指令减法指令 A ;AA1 DEC Rn ;RnRn1 Ri ;(Ri)(Ri)1 direct ;(direct) (direct)1 上述指令实现自身减1功能。减1指令不影响PSW中标志,若

25、累加器A自身减1则影响P标志。有无指令DEC DPTR?可改为:DEC DPL无! 怎么改?2007年2月信息与计算机学院3. 十进制调整指令十进制调整指令(DA A)DAA ;若AC1或(A3A0)9, ;则AA06H,低半字节调整 ;若Cy1或(A7A4)9, ;则AA60H,高半字节调整 ;若(A7A4)9且(A3A0)9, ;则AA66H,高、低半字节都调整说明:(1) 十进制调整指令只影响Cy。(2) 计算机中所有的算术运算都是二进制运算,没有专门的BCD码运算。若要对BCD码进行加运算,则先要进行二进制加运算,紧接着对二进制的和进行十进制调整才能完成。2007年2月信息与计算机学院

26、说明: (3) BCD码减法运算的实现可以通过对二进制减法结果进行减6调整来实现。但MCS51指令系统中没有十进制减法调整指令。若要实现BCD码减法可采用BCD补码运算来实现,将BCD码的被减数、减数以补数形式表示(十进制的),然后相加,并对和进行十进制调整,具体实现步骤:a. 求BCD码减数的补数,即9AHBCD码减数。b. 转化:BCD1BCD2 BCD1+ (BCD2)补数 c. 将上步中的和进行十进制调整,即可得到BCD1BCD2的运算结果。例3.13 设78、56以BCD码存放在A、R1中,A78H,R156H,求BCD码减法:AR1;先求R1的BCD码补数,即9AH56H44H,再

27、求加法AR1补数;操作过程如下: 01111000(78H) 01000100(44H) 10111100(BCH) 01100110(66H) 100100010(122H) 得到的结果为:78H56H22H2007年2月信息与计算机学院对应程序:MOV R0, AMOV A,9AHCLR CSUBB A,R1ADD A , R0DA A2007年2月信息与计算机学院4. 乘法、除法指令(乘法、除法指令(MUL、DIV) MCS51指令系统中的乘除法指令均为单字节、4周期指令。指令系统中除了乘法、除法指令外,其余指令执行时间均为12机器周期。乘法、除法指令影响Cy、OV、P标志。指令执行后,

28、Cy0;若OV1,则表示乘积有溢出(255)或除数为0;因为累加器A参与操作,所以影响P标志。 2007年2月信息与计算机学院(1) 乘法指令(乘法指令(MUL) MUL AB ;BAAB, ;B(AB)158 , ;A(AB)70上述指令的功能是实现两个8位无符号数相乘。说明:. 若积255,则OV1;否则OV0,Cy0 积的高8位送B寄存器,积的低8位送累加器A。 2007年2月信息与计算机学院例例3.15 利用MUL指令实现双字节乘操作: 4054H2005H,其中R1 = 40H,R0 = 54H, R3 = 20H,R2 = 05H,结果由高到低存放在R7R4中。解:程序实现的算法:

29、 R1 R0 R3 R2 R0R2H R0R2L R1R2H R1R2L R0R3H R0R3L R1R3H R1R3L R1R3H (R1R2H (R0R2H R0R2L R0R3H R1R2L R1R3L) R0R3L ) (R7) (R6) (R5) (R4) 2007年2月信息与计算机学院(2) 除法指令(除法指令(DIV) DIV AB ;A AB的商 ;BAB的余数 ;Cy0上述指令的功能是实现两个8位无符号数相除。说明: 被除数、除数事先存放在A、B中 商送累加器A,余数送B寄存器。 当除数为0时(即B0),则OV1, 除法溢出;否则OV0 ,Cy0。2007年2月信息与计算机学

30、院 利用DIV指令将工作寄存器R7单元的 8位二进制数转换为3位BCD码。 解:因为R7中的8位二进制数最大值:255,所以转换的BCD码是3位的BCD码数。转换的算法:用除法运算先对R7的内容除100(64H),得的商为百位的BCD码,再对余数除10(0AH),其商为十位的BCD码,而余数为个位的BCD码。百位的BCD码数送R6,十位及个位的BCD码数送R7。 2007年2月信息与计算机学院程序如下:MOV B,64H ; B除数100MOV A,R7 ; A被除数DIV AB ;AB,A商(百位数BCD码),B余数MOV R6,A ;R6将百位数BCD码MOV A,B ;A余数作被除数MO

31、V B,0AH ;B除数10DIV AB ;AB,A商(十位数BCD码), ;B余数(个位BCD码)SWAP A ;十位BCD码调整到A中高4位ADD A,B ;A中压缩成2位BCD码MOV R7,A ; R7十位、个位BCD码2007年2月信息与计算机学院3.4.3 逻辑运算类指令逻辑运算类指令类指令 综合实例v逻辑与指令(ANL)v逻辑或指令(ORL)v逻辑异或指令(XRL)v累加器清0取反指令指令(4条) 2007年2月信息与计算机学院1. 逻辑运算类指令逻辑运算类指令(1) 逻辑与指令(逻辑与指令(ANL),按位),按位“与与” data ;AAdata A, direct ;AA(d

32、irect) Rn ;AARn ANL Ri ;AA(Ri) direct, data ; (direct)(direct)data A ;(direct)(direct)A 说明 :逻辑与指令能完成将某一单元数的某几位变“0”,而其余位不变的操作。 该位“与”0该位“与”12007年2月信息与计算机学院(2) 逻辑或指令(逻辑或指令(ORL) data ;AAdata A, direct ;AA(direct) Rn ;AARn ORL Ri ;AA(Ri) direct, #data ;(direct) (direct)data A ;(direct)(direct)A 说明 :逻辑或指令

33、能完成将某单元中数的某些位变“1”,其余位不变的操作。该位“或”1该位“或”02007年2月信息与计算机学院例:设累加器例:设累加器A=0AAH,P1A=0AAH,P1口口=0FFH=0FFH。试编程将累加器。试编程将累加器A A中中的低四位送的低四位送P1P1口的低四位,而口的低四位,而P1P1口的高四位不变。口的高四位不变。 解:解:MOV R0,AMOV R0,A;累加器;累加器A A中的数据暂存中的数据暂存ANL A,#0FHANL A,#0FH;屏蔽;屏蔽A A的高的高4 4位位ANL P1,#0F0HANL P1,#0F0H;屏蔽;屏蔽P1P1口的低口的低4 4位位ORL P1,A

34、ORL P1,A;在;在P1P1口组装口组装MOV A,R0MOV A,R0;恢复累加器;恢复累加器A A的数据的数据2007年2月信息与计算机学院(3) 逻辑异或指令(逻辑异或指令(XRL) data ;AA data A, direct ;AA (direct) Rn ;AA Rn XRL Ri ;AA (Ri) direct,data ;(direct)(direct) data A ;(direct)(direct) A 说明:逻辑异或指令能完成对某一单元的数某几位变反,其余位不变的操作。该位“异或”1该位“异或”02007年2月信息与计算机学院(4) (4) 累加器清累加器清0取反指

35、令取反指令 CLR A ;A0 CPL A ;A按“位”取反A 说明 :该两条指令占1字节。虽然数据传送指令或逻辑异或指令能使累加器清“0”,但指令占据2B的存储区。CPL A常用于对某一单元中有符号数的求补操作。 MOV A, #00HMOV Rn, AXRL A, Rn先按位取反,再加12007年2月信息与计算机学院 MOV A,XANL A,Y ;XYAMOV R1,A ;送;送R1暂存暂存MOV A,YXRL A,Z ;Y ZACPL A ;A取反取反ORL A,R1;(XY) (YZ)AMOV F,A ;AF+XYZF例:设例:设X、Y和和Z分别存在分别存在X、Y和和Z单元。试编出单

36、元。试编出能实现此电路功能的程序,并将结果送入能实现此电路功能的程序,并将结果送入F单元。单元。R12007年2月信息与计算机学院2. 移位类指令(移位类指令(4条)条) (1) 不带Cy的自身环移 图图 3 37 7 不带不带CyCy的自身环移示意图的自身环移示意图 如何实现累加器A高、低4位对应互换?2007年2月信息与计算机学院 A7 A4?RL(或RR) ARL(或RR) ARL(或RR) ARL(或RR) ASWAP A2007年2月信息与计算机学院(2) (2) 带带Cy的大环移的大环移 图图 3 38 8 带带CyCy环移示意图环移示意图2007年2月信息与计算机学院将双字节数扩

37、大一倍(将16位数依次左移1位,最低位补零)。16位数低BL地址在R0中,扩大后的16位数低BL地址在R1中。分析:实现了16位数扩大一倍的操作(2操作)。 2007年2月信息与计算机学院程序为:CLR C ;Cy0MOV A,R0 ;ABL,待扩16位数低字节RLC A ;左环移,将BL的最高位移到CyL中MOV R1,A ;将扩大后的低字节BL放入R1中INC R0 ;修正地址,指向高BHINC R1 ;用于存放扩大后数的高BHMOV A,R0 ;ABH,待扩16位数高字节RLC A ;扩大高字节,将CyL移入BH最低位, ;BH的最高位移到CyH中MOV R1,A ;将扩大后的高字节BH

38、放入R1中SJMP $2007年2月信息与计算机学院3.4.4 3.4.4 控制转移类指令控制转移类指令控制转移类指令其功能是实现对程序流程的控制,通过修改程序计数器PC中的地址实现改变程序顺序执行的方式。控制转移类指令共17条,有无条件转移、条件转移、子程序调用及返回和空操作指令。这类指令可控制程序实现64KB程序存储空间的长调用、长转移、2KB范围内的区域调用、区域转移;有64KB全空间的长相对转移,也有256B范围内的短相对转移。控制转移类指令的助记符有:LJMP、AJMP、 JMP、 SJMP、 LCALL、 ACALL、 JZ、 JNZ、 CJNE、 DJNZ、 RET、 RETI。

39、 2007年2月信息与计算机学院1. 无条件转移指令无条件转移指令 这类指令实现的操作是将程序无条件地转移到指令所提供的目的地址上去。(1)长转移指令 LJMP addr16 ;PCaddr16目标地址addr16是16位编码,所以该条指令可以控制程序在64KB空间(0000H0FFFFH)范围内转移,因此被称作长转移指令。用户编程时一般会以标号代替addr16,例如LJMP 1000H可改写为LJMP MAIN指令。汇编时需按上述格式代真。例:已知某单片机监控程序起始地址为A080H,问:怎样才能使单片机开机后自动执行监控程序?2007年2月信息与计算机学院分析:单片机开机PC会复位成000

40、0H,可以在0000H处存放一条转移指令,使程序转移到监控程序的位置。ORG 0000HLJMP 0A080H2007年2月信息与计算机学院AJMP addr11 ;PCPC2, ;然后PC高5位不变,PC10PC0addr11 (PC2为该指令执行后的下一条指令的PC值)程序转移的目的地址与AJMP addr11指令的下一条指令的第一个字节在同一2KB区域内。其中:a10a0是一个无符号数,因此转移指令可以在2KB范围内向前(地址减小)向后(地址增大)转移。Add11可以用符号地址代替,但汇编时需按上述格式代真。若将MCS51单片机64KB程序区分成32页(每页2KB),则PC15PC11(

41、0000011111)称为页面地址(即:0页号31页号),a10a0称为页内地址。(2)绝对转移指令2007年2月信息与计算机学院例3.22PC=2500H,执行指令: 2500H:AJMP0FFH;PCPC2 = 2502H;PC15PC11 = 00100 ,PC10PC0 = 0FFH结果:目标地址为PC = 20FFH,程序向前转移至20FFH处执行指令。例3.23PC=2FFEH,执行指令: 2FFEH:AJMP0FFH;PCPC2 = 3000H; PC15PC11 = 00110 ,PC10PC0 = 0FFH结果:目标地址为PC = 30FFH,程序向后转移至30FFH处执行指

42、令。2007年2月信息与计算机学院SJMPrel ;PC (PC2)rel ;该条指令执行后的下一条指令地址rel是8位有符号数(用补码表示),范围:128B127B,即实现以本条SJMP指令的下一条指令为起点,向前(地址减小)转移128字节,向后(地址增大)转移127个字节。 rel往往用欲转移至的地址的标号(符号地址)表示。在MCS51指令系统中没有停机指令,若想实现此功能,程序可写成“Here:SJMP Here”(或“HER:SJMP $”),其指令的代码是80FE,其中:80是SJMPrel指令的操作码,FE是(2)的补码,该指令可实现原地踏步的功能,以代替停机指令。(3)短转移指令

43、2007年2月信息与计算机学院例3.24请根据如下程序的执行情况,计算出rel = ? ORG 2000H2000H:START: MOV SP,30H MOV A,00H 2020H:80 rel SJMP START2022H: ENDRel是从SJMPSTART指令下一条指令2022H处转向START地址2000H的偏移量,程序需向前转移22H字节,而(22H)补 0DEH,所以rel = 0DEH。2007年2月信息与计算机学院图图3 310 10 三条转移指令示意图三条转移指令示意图 前三条转移指令?2007年2月信息与计算机学院JMPADPTR ;PCADPTR 该指令代码只有1个

44、字节,目的地址(PC)基址寄存器DPTR的内容偏移量寄存器A中的内容,可实现程序的分支转移。通常将转移指令表的基址放在DPTR中,要执行的转移指令在转移指令表中的偏移量放在偏移量寄存器A中,该JMP ADPTR执行后,实现了程序的分支转移,故又称散转指令。 偏移量寄存器A是8位无符号数,地址加大,范围不能超出256B。(4)长相对转移指令(基址变址)转移指令)2007年2月信息与计算机学院例3.25在累加器A中存放有待处理的键值编号03,程序中有对这4个键值处理的程序段,编程实现根据键值03,转相应程序段完成其操作。现将转移至4个键值程序段的入口地址的长转移指令组成一张散转表,表基址为TAB。

45、STAR:MOV A,NUMB ;A键值 MOV R7,A RL A ADD A,R7 ;AA3 ? MOV DPTR, TAB ;DPTR表基址 JMP A+DPTR ;依据键值转相应程序处理TAB:LJMP KEY0 ;转入0键值程序 LJMP KEY1 ;转入1键值程序 LJMP KEY2 ;转入2键值程序 LJMP KEY3 ;转入3键值程序散转表中每个LJMP指令长度为32007年2月信息与计算机学院2. 条件转移指令条件转移指令 在MCS51指令系统中,条件转移类指令有8条,可分为:累加器判零条件转移指令、比较条件转移指令和减1条件转移指令。它们都是短相对转移指令,相对于下一条指令

46、第1个字节向前(地址减少)128B,向后(地址加大)127B范围内转移,其目标地址可用标号地址代替。指令的执行不影响标志位。 2007年2月信息与计算机学院(1) 累加器判零转移指令 JZ rel ;若A = 0,则PC(PC2)rel,转移 ;若A0,则PC(PC+2),顺序执行JNZrel ;若A0,则PC(PC2)rel,转移 ;若A = 0,则P C(PC+2),顺序执行 2007年2月信息与计算机学院例:例: 将外部数据将外部数据RAMRAM的一个数据块传送到内部数据的一个数据块传送到内部数据RAMRAM,两者的首址分别为两者的首址分别为ADDR1 ADDR1 和和 ADDR2ADD

47、R2,遇到传送的数据为零,遇到传送的数据为零停止。停止。 MOV DPTR, ADDR1 ;外部数据块首址送DPTR MOV R1, ADDR2 ; 内部数据块首址送R1LOOP: MOVX A, DPTR ;取外部RAM数据入AHERE: JZ HERE ; 数据为零停止 MOV R1, A ;数据传送至内部RAM单元 INC DPTR ;修改地址指针, 指向下一数据地址 INC R1 SJMP LOOP ; 循环取数2007年2月信息与计算机学院(2)比较转移指令 A,data ,rel ;若Adata PC(PC3CJNE direct,rel;若A(direct) rel ),转移;

48、Ri ,data,rel ;(Ri) data 否则PC(PC+3) Rn, data,rel ;Rndata 顺序执行说明这四条指令都是三字节指令,指令执行时,先对两个操作数作比较(作不送结果的无符号数减操作),依据结果执行转移操作。若两操作数相等(相减为0,且使Cy0),则顺序执行;若两操作数不等(结果不为0) ,则将程序转移到PC(PC3)rel地址处执行;其中:当目的操作数源操作数时,清Cy0 (相减不为0);当目的操作数源操作数时,置Cy1。 此后若再选Cy为条件进行判断,可以判别出两个操作数的大小。因此,这4条指令操作后影响标志位Cy。2007年2月信息与计算机学院2007年2月信

49、息与计算机学院(3) 减1条件转移指令DJNZ direct,rel ;(direct) (direct) 1 ;若(direct)0, 则PC(PC3) rel,转移 ;若 (direct)0, 则PC(PC3),顺序执行DJNZ Rn,rel ;RnRn-1 ;若Rn0,则PC(PC2) rel,转移 ;若Rn0,则PC(PC2),顺序执行rel是8位有符号数,其取值范围为128B127B。这两条指令对于构成循环程序是十分有用的。2007年2月信息与计算机学院例:试编程实现将内部RAM中从ADDR单元开始的10个无符号数相加,相加结果送SUM单元保存。设相加结果不超过8位二进制数。解:源程

50、序如下: MOV R0, 0AH; 给 R0 置计数器初值 MOV R1, ADDR ; 数据块首址送R1 CLR A ; A清零LOOP:ADD A, R1 ;加一个数 INC R1 ;修改地址, 指向下一个数 DJNZ R0, LOOP ;R0 减1,不为零循环 MOV SUM, A ;存 10 个数相加和2007年2月信息与计算机学院3. 子程序调用及返回指令子程序调用及返回指令 编写程序时,有一些功能程序段常常被反复使用,为了减少书写和调试的工作量,减少程序占用的存储空间,将这种程序段定义为子程序。需要时,主程序通过调用指令调用子程序段;子程序段执行结束时,通过末尾的返回指令自动返回到

51、主程序调用指令的下一条指令,顺序执行主程序。2007年2月信息与计算机学院(1)长调用指令 LCALLaddr16 ;PC(PC3) ;SPSP1,(SP) PC7PC0 ;SPSP1,(SP) PC15PC8 ;PCaddr16(子程序入口地址) 2007年2月信息与计算机学院(2)绝对(短)调用指令 ACALL addr11 ;PCPC2 ;SPSP1, (SP) PC7PC0 ;SPSP1, (SP) PC15PC8 ;PC高5位不变,PC10PC0addr112007年2月信息与计算机学院(3)返回指令 RET ;PC158(SP),SPSP1 ;PC70(SP),SPSP1 RETI

52、 ;PC158(SP),SPSP1 ;PC70(SP),SPSP1 上述两条指令是子程序返回(主程序)指令,放在子程序末尾。其中第一条指令是一般子程序返回(主程序)指令,第二条指令是中断子程序返回(主程序)指令。说明上述两条指令实现的功能是引导CPU从子程序或中断子程序末尾处返回到主程序调用指令的下一条指令处执行程序。实现的过程是:将堆栈栈顶单元中所保存的主程序断点地址(主程序调用指令下一条指令地址)弹出并送入PC中;在下一个取指周期到来时,CPU执行主程序调用指令的下一条指令,完成返回操作。虽然两条指令的操作表达式完全一致,但在执行RETI指令后,将清除中断响应时所置位的优先级状态触发器,使

53、得已申请的同级或低级中断申请可以响应。因此,RET与RETI不能互换使用。这两条指令不影响标志。2007年2月信息与计算机学院2007年2月信息与计算机学院4. 空操作指令空操作指令 NOP ;PCPC1该指令是单字节、单周期的控制指令,不影响标志。CPU执行这条指令不作任何操作,只是空消耗1个机器周期,并且占用1B的存储空间。此条指令往往在延时程序中使用,并且在软件抗干扰上起着重要的作用。 2007年2月信息与计算机学院3.4.53.4.5 位操作类指令位操作类指令MCS51单片机的特色之一是:有一个位处理机,配套了处理位变量的指令,可实现位变量的传送、位变量的逻辑运算及控制程序转移等操作。

54、的累加器是(进位标志),位操作指令操作的对象是片内RAM区的位寻址区,即和可寻址的寄存器()。位操作类指令的:MOV、CLR、SETB、ANL、ORL、CPL、JC、JNC、JB、JNB、JBC。 2007年2月信息与计算机学院1. 位传送指令位传送指令 MOV C,bit ;Cy(bit) MOV bit,C ;(bit)Cy例: 编程实现将位地址为20H的内容控制P1口的P1.0的输出状态。MOV C, 20H ;(CY) (20H)MOV P1.0, C ;(P1.0) (CY) 【注注】 由于两个位地址之间没有直接的传送指令,常用上述两条指令并通过Cy作为中间媒介来实现位地址之间的数据传送。不能写为 MOV

温馨提示

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

评论

0/150

提交评论