《单片机技术第三章:指系统.ppt》由会员分享,可在线阅读,更多相关《单片机技术第三章:指系统.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3-1 指令格式及其操作寻址方式指令格式及其操作寻址方式 一、基本概念一、基本概念1、指令及其格式、指令及其格式 什么是指令?计算机认识什么样的指令?指令能干什么?机器指令:用2进制数0、1表示的命令代码。常以16进制表示。机器语言:由机器指令描述的程序语言。助记符指令:用字母和16进制数代替机器指令形成的符号指令。助记符语言:由助记符指令形成的程序语言,又称汇编语言。MCS-51单片机汇编语言指令格式:标号:标号: 操作码操作码 操作数操作数(目的操作数,源操作数)(目的操作数,源操作数) ;注释;注释其中: 标 号:称符号地址,代表该指令第1字节所在的地址。 操作码:规定了指令将要干什么,
2、必不可少。操作数:表示参与运算作的数数或或数的地址数的地址。注 释:可有可无,必须以“;”开始。2、指令中的符号标识、指令中的符号标识Ri、Rn、#data、#data16、addr11、addr16、 Direct、rel、bitA:寄存器寻址的累加器; ACC:直接寻址的累加器;:间接寻址符号(X):X中的内容(X): 由X的内容作为地址的单元中的内容:箭头左边的内容被右边的内容代替 :本条指令的起始地址 / :位操作数前缀,表示取反。3、汇编语言的数据形式、汇编语言的数据形式二进制( B):0,1十进制( D):0,1,9十六进制( H):0,1,9,A,B,C,D,E,F 二、寻址方式
3、二、寻址方式寻址方式:指令给出参与运算的数据的方式,即确定操作数确定操作数地址地址的方法。MCS-51指令寻址方式主要有5种:存器寻址、直接寻址、寄存器间接寻址、立即寻址和基址寄存器变址寄存器间接寻址 1、寄存器寻址寄存器寻址 由指令指出以某寄存器的内容为操作数。寄存器寻址方式使 用范围:(1)内部RAM中的32个工作寄存器R0R7; (2)A、B、C、DPTR;例如: INC R3 ;(R3)(R3)+1 操作码 操作数指令中的R3即为寄存器寻址,其执行过程如下图:本例中:R3的“门牌号”高3位为0,决定了寻址内部RAM中 00H1FH空间。对于Rn:具体寄存器由指令的低3位指定。对于A、B
4、、C、DPTR:则为隐含在指令代码中。2、直接寻址直接寻址 在指令中含有操作数的直接地址,该地址指出了参与运算的数所在的字节单元地址或位地址(位寻址)。直接寻址的寻址范围:(1)内部数据存储器的低128字节,00H7FH;(2)特殊功能寄存器,注意除A、B、DPTR外,其他SFR只能采用直接寻址方式。(3)位寻址:所有可寻址位;例如:MOV A, 70H ;(A)(70H) MOV C,70H ;(CY)(70H) 注意:对累加器直接寻址和位寻址时,要用符号“ACC”或直接地址“E0H”,以区别于寄存器寻址。3、寄存器间接寻址寄存器间接寻址 指令中指出某一个寄存器的内容为操作数的地址,以符号“
5、”表示。其寻址范围:(1)以R0,R1为地址指针,寻址内部RAM 007FH 和外RAM的低256B;(2)以堆栈SP为地址指针,寻址栈区单元;(3)以DPTR,或R0、R1(须用P2指定高8位地址) 为地址指针,寻址外部RAM的64KB空间和扩展 I/O口。例:MOV A,R0;(A)(R0) PUSH ACC ;(SP) (A) MOVX A,DPTR ;(A)(DPTR)4、立即寻址立即寻址 操作数以常数的形式出现,直接跟在操作码后面,以指令字节的形式存放在ROM中。例如: MOVA,#40H MOV DPTR, #TABLE ;TABLE为标号地址 MOV P1, #00000111B
6、 MOV R3, #185、基址寄存器变址寄存器间接寻址基址寄存器变址寄存器间接寻址(1)变址寻址以基址寄存器(PC、 DPTR)和变址寄存器(A)的内容作为无符号数相加,形成16位地址,访问程序存储器(表格)。MOVC A,A+PC ;(A)(A)+(PC)MOVCA,A+DPTR ;(A)(A)+(DPTR)例如:设(A)=30H,(PC)=1000H, 执行MOVC A,A+PC的情况如下图所示。取数地址为:1001+30=1031H。显然:当(A)=00H时,新(PC)=1001H;当(A)=FFH时,新(PC)=1100H; (2)相对寻址指令中给定地址的相对偏移量rel,以PC当前
7、值为基地址,加上rel所得结果为转移目标地址。 rel:符号数,单字节补码,-128+127。例如:1000H:JC 80H ;判C转移指令,2字节分析:当CY=1时,转移,过程如下图所示:3-2 指令系统指令系统3.2.1 程序状态字程序状态字PSW即标志寄存器,字节地址为:D0H,可字节寻址、位寻址。作用:存放指令执行时有关信息、状态,供程序查询和判别。PSW字格式:字格式: D7D6D5D4D3D2D1D0CYACF0RS1RS0OVPPSW.7:CY,进位标志,布尔处理器的累加器C。 PSW.6:AC,半进位标志。PSW.5:F0,用户标志,可置位和复位。PSW.4-PSW.3:RS1
8、、RS0,指出当前工作寄存器区Rn。PSW.2:OV,溢出标志。CY CS=1时溢出,OV=1。PSW.1:保留位,可单独使用,表示方法为D1H、PSW.1。PSW.0:P,奇偶标志,指A中“1”的个数,为奇时置1。3.2.2 指令系统指令系统一、数据传送指令、数据传送指令 最基本、最主要的指令,共有29条,包括数据传送、数据交换、栈操作三类。目的单元为A时影响P标志。1、内部、内部RAM间的数据传送(间的数据传送(16条)条)(1)指令格式指令格式:MOV 目的字节,源字节功 能:把源字节指定的变量传送到目的字节指定的存储单元中,源字节内容不变。(2)操作数操作数:A,Rn,direct,R
9、i,DPTR,#data传送关系如下图所示: (3)指令描述举例:以A目的操作数MOV A,Rn ;(A)(Rn) 以Rn为目的操作数MOVRn,direct ;(Rn)(direct)以direct为目的操作数MOV direct1,direct2 ;(direct1)(direct2) MOV direct, Ri ;(direct)(Ri)以Ri为目的操作数MOVRi, A ;(Ri)(A)MOVRi, #data ;(Ri) data16位数据传送指令MOV DPTR, #data16;高8位送DPH,低8位送DPL例例3-1:设(70H)= 60H,(60H)=20H,P1为输入口,
10、状态为0B7H,执行如下程序: MOV R0,#70H ;(78H 70H) MOV A,R0 ;(E6H) MOV R1,A ;(F9H) MOV B,R1 ;(87H F0H) MOV R0, P1 ;(A6 90H)结果:(70H)= 0B7H(B) = 20H(R1) = 60H(R0) = 70H要求:掌握指令功能、查表求机器码、寻址方式、结果例例3-2:给出下列指令的执行结果,指出源操作数的寻址方式。 MOV20H, #25H MOV25H, #10H MOVP1,#0CAH MOVR0,#20H MOVA,R0 MOVR1,A MOVB,R1 MOVR1,P1 MOVP3,R1结
11、果:(20H)=25H,(25H)=10H,(P1)=0CAH,(R0)=20H,(A)=25H,(R1)=25H,(B)=10H,(25H)=0CAH,(P3)=25H2、ACC与外部数据存储器(或扩展与外部数据存储器(或扩展I/O口)传递数据口)传递数据MOVXMOVXA,DPTRMOVXA,Ri ;均为单字节指令MOVXDPTR,AMOVXRi,A功能:A与外部RAM或扩展I/O口数据的相互传送。说明:(1)用Ri进行间接时只能寻址256个单元(0000H00FF),当访问超过256个字节的外RAM空间时,需利用P2口确定高8位地址(也称页地址),而用DPTR进行间址可访问整个64KB空
12、间。(2)在执行上述读、写外RAM指令时,P3.7(RD)、P3.6(WR)会相应自动有效。(3)可用作为扩展I/O口的输入/输出指令例例3-3:将外RAM 2010H中内容送 外RAM 2020单元中。分析:读2010H中内容A写数据 2020H中流程如右图:程序如下:MOV P2,#20H ;输出高8位地址MOV R0,#10H ;置读读低8位间接地址MOVX A,R0 ;读2010H中数据MOV R1,#20H ;置写写低8位间接地址MOVX R1,A ;将A中数据写入2020H中3、查表指令、查表指令MOVC表格:程序存储器除存放程序外,还可存放一些常数,这种数 据的结构称为表格。访问
13、:通过两条程序存储器取数指令,即查表指令来访问, 完成从ROM中读数,并只能送累加器A。指令格式:MOVCA,A+DPTR ;(A)(A)+(DPTR)MOVCA,A+PC ;(PC)(PC)+1,(,(A)(A)+(PC)特点:单字节指令,源操作数为变址寻址,执行时, PSEN会 自动有效。功能:以DPTR、PC为基地址,与A中的8位无符号数相加,得 到一个新16位地址,将其内容送A。(1)用DPTR作为基寄存器 例例3-4:设外部ROM的2000H单元开始的连续10个字 节中已存放有09的平方数,要求根据A中的 内容(09)来查找对应的平方值。START:MOVA,#3MOV DPTR,#
14、TABLE MOVC A,A+DPTR ;查表 ORG 2000H 2003单元内容TABLE:DB 0,1,4,9,16,25,36,49,64,81结果:A (2003H),(A)=09H特点:可访问整个ROM的64KB空间,表格可放在 ROM的任何位置,与MOVC指令无必然的关系。(2)用PC作为基寄存器例3-5:ORG 1000H1000H MOV A,#30H;1002H MOVCA,A+PC;结果是:A (1033H)优点:不改变PC的状态,根据A的内容取表格常数。缺点:(1)表格只能存放在查表指令以下的256个单元内。(2)当表格首地址与本指令间有其他指令时,须用 调整偏移量,调
15、整量为下一条指令的起始地址 到表格首址之间的字节数。例例3-6:阅读下列程序,给出运行结果 ,设(A)=3。 1000HADD A,#02H ;加调整量 1002H MOVC A,A+PC;查表 1003H NOP 1004H NOP 1005H TAB: DB 66,77,88H,99H,W,10结果:(A)=99H,显然,2条NOP指令没有时,不需调整。4、堆栈操作、堆栈操作 堆栈,由特殊功能寄存器SP(81H)管理,始终指向其栈顶位置,栈底视需要设在内部RAM低128B内。(1)进栈操作: PUSHdirect 功能:先(SP) (SP)+ 1,再(SP)(direct); 其中:dir
16、ect为源操作数;目的操作数为SP,隐含。例例3-7:已知:(A)=30H,(B)=70H 执行: MOVSP,#60H ;设栈底PUSHACC ;PUSHB结果:(61H)=30H,(62H)=70H,(SP)=62H(2)出栈操作: POP direct 功能:先(direct)(SP),再SP (SP)1 其中:direct为目的操作数,源操作数为SP,隐含。例例3-8:已知:(SP)=62H,(62H)=70H,(61H)=30H执行:POP DPH POP DPL 结果:(DPTR)=7030H,(SP)=60H5、与、与A的数据交换指令的数据交换指令数据交换指令共5条,完成累加器和
17、内部RAM单元之间的字节或半字节交换。(1)整字节交换:XCH A,Rn ;(A)(Rn)XCH A,direct ;(A)(direct)XCH A,Ri ;(A)(Ri)(2)半字节交换:XCHD A,Ri ;(A)03(Ri)03(3)累加器自身高低4位交换SWAP A ;(A)74(A)30例例3-9 设(A)=57H,(20H)=68H,(R0)=30H,(30H)=39H,求下列指令的执行结果(1)XCH A,20H ; 结果:(A)=68H,(20H)=57H(2)XCH A,R0 ;结果: (A)=39H,(30H)=57H(3)XCH A,R0 ;结果: (A)=30H,(R
18、0)=57H(4)XCHD A,R0 ;结果: (A)=59H,(30H)=37H)(5)SWAP A ;结果: (A)=75H例例3-10:设内部RAM 40H、41H 单元中连续存放有4个压缩的 BCD码数据,试编程序将这4 个BCD码倒序排列。分析:流程如右图程序如下:MOV A,41HSWAP AXCH A,40HSWAP AMOV 41H,A二、算术运算指令二、算术运算指令包括、加1、减1、十进制调整指令,共有24条,一般影响PSW中的CY、AC、OV、P标志位。1、加减法指令、加减法指令(12条)条)(1)指令助记符: ADD + ADDC 带C+ SUBB 带C-(2)操作数:如
19、右图,以A为目的操作数(3)指令描述举例:不带进位加法 ADD 4条ADD A, Rn ;(A) (A)+(Rn)带进位加法指令 ADDC 4条ADDC A,direct ;(A) (A)+(direct)+(CY)带进位减法指令 SUBB 4条SUBB A,Ri ;(A)(A)-(Ri)-(CY)SUBB A,#data ;(A)(A)- #data -(CY)例例3-11:设(A)=D3H,(30H)=E8H 执行: ADD A,30H 1101 0011 (D3) (45)补 无符号数 211 +) 1110 1000 (E8) (24)补 232 1 1011 1011结果:CY=1,
20、AC=0,P=0,OV=0,(A)=BBH (补码真值-69,正确) 例例3-12:设(A)=88H,(30H)=99H,CY=1 执行:ADDC A,30H1000 1000 (88H) (-78)补 1001 1001 (99H) (-67)补 +) 1 10010 0010结果:CY=1,AC=1,P=0,OV=1,(A)=22H(真值34,不正确) 例例3-13:设(A)=49H,CY=1, 执行: SUBB A,#54H0100 1001 (49H) 0101 0100 (54H) -) 1 1111 0100 (借位1)结果:CY=1,AC=0,P=0,OV=0,(A)=F4H(真
21、值-12,正确)例例3-14:试编制4位十六进制数加法程序,假定和数超过双字节(21H20H)+(31H30H) 42H41H40H分析:先低字节作不带进位求和,再作带进位高字节求和。 流程图(略),程序如下:MAIN:MOV A,20H ADD A,30H MOV 40H, A MOV A,21H ADDC A,31H ;带低字节进位加法 MOV 41H, A MOVA,#00H ;准备处理最高位MOVACC.0,CMOV 42H, ASJMP2、加、加1减减1指令指令 助记符:INC,DEC操作数:A,direct,Ri,Rn,DPTR指令描述:(不影响PSW,即使有进位或借位,CY也不变
22、,除A影响P标志)(1)INC:加:加1 5条INC A ;(A)(A)+1INC Rn ;(Rn)(Rn)+1INC Ri ;(Ri)(Ri)+1INC direct ;(direct) (direct)+1INC DPTR ;(DPTR) (DPTR)+1(2)DEC:减:减1 4条DEC A ;(A)(A)1DEC Rn ;(Rn)(Rn)1DEC Ri ;(Ri)(Ri)1DEC direct ;(direct) (direct)例例3-15:编制下列减法程序,要求:(31H30H)(41H40H) 31H30H分析:流程图(略),程序如下:MAIN:CLR C ;CY清零MOV R0
23、, #30H MOV R1, #40H MOV A, R0 SUBB A, R1 MOV R0,A ;存低字节 INC R0 ;指向31H INC R1 ;指向41H MOV A, R0 SUBB A, R1 MOV R0, A ;存高字节 HERE:SJMP HERE3、十进制调整指令、十进制调整指令格式:格式:DA A 指令用于两个BCD码加法运算的加6修正,只影响CY位。指令的使用条件:(1)只能紧跟在加法指令(ADD/ADDC)后进行(2)两个加数必须已经是BCD码(3)只能对累加器A中结果进行调整 加6修正的依据:由CPU判CY、AC是否=1?A中的高、低4位是否大于9?例如:(A)
24、=56H,(R5)=67H,(BCD码)执行:ADD A,R5 DAA 结果:(A)=23H,(CY)=1 例例3-16:试编制十进制数加法程序(单字节BCD加法),假定和数为单字节,要求: (20H)+(21H) 22H 分析:流程如右图程序如下:MOV R0, #20H MOV A, R0 INC R0ADD A, R0 DA A INC R0 MOV R0,A例例3-17:十进制减法程序(单字节BCD数减法)要求:(20H)(21H) 22H分析:主要要考虑到,DA A只能对加法调整,故必须先化 BCD减法为加法做,关键为求两位十进制减数的补码 (9AH-减数)流程如右图,程序如下:CL
25、R CMOV R0, #20HMOV R1, #21HMOV A, #9AH SUBB A, R1 ;求补ADD A, R0 ;求差DA A INC R1MOV R1, A ;存结果4、乘除法指令、乘除法指令唯一两条单字节4机器周期的指令。(1)8位无符号数乘法指令MULAB ;(B 158 )( A70)(A)(B)PSW: 1)若乘积大于256,OV=1;否则OV=0;2)CY总是清“0”。例如:(A)=50H,(B)=A0H,执行MUL AB后结果:(B)=32H,(A)=00H,(OV)=1(2)8位无符号除法指令DIVAB ; (A)(A/B)的(商); (B)(A/B)的(余数)P
26、SW: 1)CY、OV,清“0” 2)若(B)=0,OV=1。例如:(A)=2AH,(B)=05H,执行DIV AB后结果:(A)=08H,(B)=02H,(OV)=0例例3-18:双字节乘法程序,要求:(R0R1)(R2)R3R4R5分析:设(R0)=J,(R1)=K,(R2)=L,则:MOV A,R1 J KMOV B,R2 ) L MUL AB KL高 KL低 MOV R5,A +) JL高 JL低 MOV R4,B R3 R4 R5MOV A,R0 MOV B,R2MUL AB ADD A,R4MOV R4,A MOV A, BADDC A, #00HMOV R3,A例例3-19:编制
27、将A中的数转换成三位BCD码程序,百位放在20H,十位、个位放在21H中。分析:(A)/100商(百位)(20H);余数/10 商(十位)(21H)74; 余数 (个位)(21H)30;流程如右图,程序如下:MOV B,#100DIV ABMOV 20H, AMOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV 21H, ASJMP三、逻辑运算指令三、逻辑运算指令逻辑运算类指令共24条,涉及A时,影响P标志。 1、 基本与、或、异或运算指令基本与、或、异或运算指令 (1)指令助记符:ANL、ORL、XRL (2)操作数:如下图 (3)指令描述举例:逻辑“与”指令 6条A
28、NL A,Rn ;(A)(A)(Rn)ANLA,direct ;(A)(A)(direct)逻辑“或”指令 6条ORL A,Ri ;(A)(A)(Ri)ORL A,#data ;(A)(A) data逻辑“异或”指令 6条XRL direct,A ;(direct)(direct) (A)XRL direct,#data ;(direct)(direct) data 当用于修改输出口(P0P3)时,direct指口锁存器的内容而不是端口引脚电平。2、对、对A简单逻辑指令简单逻辑指令1)清零与取反CLR A ;清0CPL A ;求反2)循环移位指令RL A ;RLC A ;RR A ;RRC A
29、 ;例例3-20:按要求编程,完成下列各题:1)选通工作寄存器组中0区为工作区。 2)利用移位指令实现累加器A的内容乘6。 3)将ACC的低4位送P1口的低4位,P1口的高4位不变。例例3-20解:1)ANL PSW,#11100111B ;PSW的D4、D3位为002)CLR C RLC A ;左移一位,相当于乘2 MOV R0, A CLR C RLC A ;再乘2,即乘4 ADD A,R0;乘2 + 乘4 = 乘6 3)ANL A,#0FH ;高4位屏蔽(清0) ANL P1, #F0H ;P1低4位清0 ORL P1, A ;(P1.31.0)(A30)例例3-21:设在外RAM 20
30、00H中放有两个BCD数,编程,使这 两个BCD码分别存到2000H和2001H的低4位中。分析:流程如图程序如下:MOV DPTR,#2000H MOVX A,DPTR MOV R0,A ANL A,#0FH MOVX DPTR,A MOV A,R0 ANL A,#0F0H SWAP A INC DPTRMOVX DPTR,A四、位操作指令四、位操作指令布尔处理器C,可寻址内部RAM中的可寻址位:bit = 00FFH,和SFR中的可寻址位。位地址的描述形式: (1)直接位地址,如MOC C, 70H(2)字节地址+位地址,如20H.1,ACC.4,PSW.4等(3)位寄存器名称,如F0,C
31、,RS1,RS0等(4)伪指令定义过的位名称注意: CY-直接地址,是位寻址; C -位寄存器,为寄存器寻址。例如:CLR CY ;机器码C2 D7H CLR C;机器码C3H1、位传送指令、位传送指令MOV C,bitMOV bit, C例如:MOVC,06H MOVP1.0,C 2、位变量修改指令、位变量修改指令CLR C;(C)0CLR bit ;(bit)0CPL C ;(C)( )CPL bit ;(bit)( )SETB C ;(C)1SETB bit ;(bit)1例如:SETB P1.0bitC3、位变量逻缉、位变量逻缉“与与”指令指令ANL C,bit ;(C)(C)(bit
32、)ANL C,/ bit ;(C)(C)( )例如:设P1为输入口,P3为输出口,执行程序MOVC,P1.0ANLC,P1.1ANLC,/P1.2MOVP3.0,C结果:P3.0 = P1.0 P1.1 /P1.2。 4、位变量逻缉、位变量逻缉“或或”指令指令ORL C,bit ;(C)(C)(bit)ORL C,/ bit ;(C)(C)( )bitbit例如:设P1为输出口,执行下列程序,指出功能:(1) MOVC,00HORLC,01HMOVP1.7,C(2) MOV P1,#00H LOOP:SETBP1.0LCALLDELAYCLRP1.0LCALLDELAYAJMPLOOP(3)
33、LOOP: SETBCRLCAMOVP1,ALCALLDELAYJNBACC.7,LOOP例3-22 将位地址40H、41H中的内容进行异或,结果 存入42H中。分析:运算公式:Y= A B=程序如下:MOV C,41H ANL C,/40H MOV 42H,C MOV C,40H ANL C,/41H ORL C,42H MOV 42H,CBABA 五、控制转移指令五、控制转移指令(22条) 1、无条件转移指令、无条件转移指令 无条件转移应用举例:1)1030H:AJMP 100H ;机器码为2100H 目的地址:PC=1032H的高5位+ 100H的低11位 = 00010 + 001 0
34、000 0000 = 1100H 2)0000H:AJMP 40H ;程序转移到0040H 3)1100H:SJMP 21H ;目标地址为1123H 4)1000H:SJMP NEXT;目的地址NEXT=1020H 则:相对地址rel =1EH(补码数) 5)0060H:SJMP FEH ;踏步指令目的地址:PC =(PC)+ 2 + FEH = 0060H +2 +FFFEH = 0060H6)0000H:LJMP 0030H ;例例3-23:执行下面的散转程序,程序将根据A中的内容(命令编 号09)转相应的命令处理程序。ORG 1000HSTART:MOV R1,ARLA ;乘2ADDA,
35、R1 ;完成偏移量A =(A)3 MOV DPTR,#TABLE ;设定表格首地址 JMPA+DPRTTABLE: LJMP COMD0LJMP COMD9 COMD0: COMD9:END由于LJMP占3个字节,因此,变址寄存器必须乘3 2、条件转移指令、条件转移指令根据某种条件判断转移的指令,执行时:条件满足时,转移执行; 条件不满足时,顺序执行;目的地址:(PC)=(PC)+ 指令字节数指令字节数 2或或3 + rel包括判A、判Bit、判C三种,共有7条:1)判)判A转移,转移,2字节字节JZ rel ;条件:(A)= 0JNZ rel ;条件:(A)0 2)判)判Bit转移,转移,3
36、字节字节JB bit, rel ;条件:(bit)= 1JNB bit, rel ;条件:(bit)= 0JBC bit, rel ;条件:(bit)= 1转移,并清 bit位 3)判)判C转移,转移,2字节字节JC rel ;条件:(C)= 1JNC rel ;条件:(C)= 0例例3-24 利用P1.0、P1.1作为外接发光二极管的启停按钮,P1.2作为外接发光二极管端,试编制控制程序。程序如下:START:MOV P1, #03H ;作P1口输入时先置1 WT1:JBP1.0,WT1SETBP1.2 WT2:JBP1.1,WT2CLRP1.2SJMPWT13、比较不相等转移指令、比较不相
37、等转移指令CJNEA, direct,rel;CJNEA, #data, rel;CJNE Rn, #data, rel;CJNE Ri, #data, rel;执行时:1)两操作数相等,顺序执行,且CY=0。2)两操作数不相等,转移执行,且对于无符号数若:第一操作数第二操作数,CY=1,否则CY清“0”。目的地址:(PC)=(PC)+ 指令字节数指令字节数3 + rel例如:右图所示的比较判断,可利用CJNE和JC指令来完成。例例3-24:内部RAM 30H开头的20个连续单元中,存放有20个数,统计等于8的单元个数,结果放在R2中。分析:取一个数与8比较,相等R2加1,不相等跳过。并作20
38、次重复即可。流程如右图,程序如下: ORG 1000HSTART:MOV R0,#30HMOV R7,#20MOV R2,#0LOOP:CJNE R0,#08H,NEXTINCR2NEXT:INCR0DJNZ R7,LOOP SJMP 4、减、减“1”不为不为0转移指令转移指令又称循环转移指令,主要用来构成循环结构,有2条:DJNZRn, rel ;2字节指令,2周期指令DJNZdirect,rel ;3字节指令,2周期指令目的地址:(PC)=(PC)+ 指令字节数指令字节数2或或3 + rel 例例3-25:利用DJNZ指令设计循环延时程序,已知fosc=12MHz1) 单循环延时DELAY
39、:MOV R7,#10DJNZ R7,t=2us10+1=21us 2) 双重循环延时DELAY:MOV R7,#0AHDL: MOV R6,#64HDJNZ R6,DJNZ R7,DL t=(2us100+2+1)10+1=2031us 3) 三重循环延时DELAY:MOVR7, #10DL2:MOVR6, #200 DL1:MOVR5, #250DJNZR5, DJNZR6, DL1DJNZR7, DL2 t=(2us250+2+1) 200)+2+1) 10+1 = 1006031us 1 秒 例例3-26 P1口控制发光二极管,延时节日灯组合。LOOP:MOV P1,0AAH;灯光1A
40、CALL DELAYMOV P1,055H;灯光2 ACALL DELAYSJMP LOOPDELAY: MOV R7,0FFHDL1:MOV R6,0FFHDL2:NOP;空操作DJNZ R6,DL2DJNZ R7,DL1RET5、调用指令与返回指令、调用指令与返回指令1) 主程序和子程序结构主程序和子程序结构 2) 调用和返回调用和返回 子程序是独立于主程序的具有特定功能的程序段,单独编写,能被主程序调用,又能返回主程序。按两者的关系有两种调用情况,多次调用和子程序嵌套,如图所示。3) 堆栈和堆栈和PC值的保留值的保留 调用子程序时,CPU自动自动将当前PC值保留在堆栈中,其中高位放在PC
41、H,子程序返回时,自动弹出,送入PC。4) 现场保护和恢复现场现场保护和恢复现场现场保护 是指将需要保护的单元内容,在子程序的开始使用压栈指令存放在堆栈中的过程。恢复现场 是指在子程序返回前,通过出栈指令,将被保护内容送回原来的寄存器。5)调用与返回指令)调用与返回指令(1)短调用指令)短调用指令ACALL addr11执行时: 1)(PC)+ 2 PC,并压入堆栈,先PCL,后PCH; 2)PC1511 a100 PC,获得子程序入口地址; 3)转移范围同AJMP。(2)长调用指令)长调用指令 LCALLaddr16执行时: 1)(PC)+ 3 PC,并压入堆栈,先PCL,后PCH; 2)a
42、ddr16 PC,获得子程序起始地址; 3)可调用64K地址范围内的任意子程序。例如:已知(SP)=60H,执行下列指令后的结果:1000H:ACALL100H1000H:LCALL0800H 结果: :(SP)=62H,(61H)=02H,(62H)=10H, (PC)=1100H : (SP)=62H,(61H)=03H,(62H)=10H, (PC)=0800H(3)子程序返回指令)子程序返回指令RET 、中断返回指令、中断返回指令RETI RET:从堆栈中退出PC的高位和低位字节,栈指针减2,即:1)(PCH)(SP), (SP)(SP)- 1;2)(PCL) (SP), (SP)(S
43、P)- 1;RETI:从堆栈中退出PC的高位和低位字节,栈指针减2,同 时清除中断优先,开放低级中断。6、空操作指令、空操作指令NOP ;(PC)(PC)+1 空操作指令是一条单字节单周期指令,控制CPU不做任何操作,只作时间上的消耗,因此常用于程序的等待或时间的延迟。例例2-27 设计节日灯,通过P1.0P1.7控制8个发光二极管, 先亮1灯,隔1秒闪烁10次,然后左移1位闪10次,如此循环。分析:流程图,程序如下: MAIN: MOV A,#01HLOOP1: MOV R2,#10LOOP2: MOV P1,AACALLDELAYMOV P1,#00HACALLDELAYDJNZ R2,LOOP2RL AAJMP LOOP1DELAY: 1秒延时子程序(略)RET本章小结1、基本概念、寄存器寻址、寄存器间接寻址、直接寻址、位寻址、基寄存器加变址寄存器间接寻址。2、数据传送指令、算术运算指令、逻缉运算指令、位操作指令、控制转移指令重点:寻址方式和指令系统,简单程序阅读难点:寻址方式,控制转移指令中相对地址计算,堆栈操作,以及简单汇编程序阅读
限制150内