第3章指令系统_第1页
第3章指令系统_第2页
第3章指令系统_第3页
第3章指令系统_第4页
第3章指令系统_第5页
已阅读5页,还剩138页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章第三章 指令系统及程序设计举例指令系统及程序设计举例Exit3.3 80513.3 8051指令系统指令系统3.1 3.1 汇编语言汇编语言3.2 3.2 寻址方式寻址方式3.4 3.4 程序设计举例程序设计举例3.1 3.1 汇编语言汇编语言3.1.1 3.1.1 指令和程序设计语言指令和程序设计语言3.1.2 3.1.2 指令格式指令格式BACK3.1.1 3.1.1 指令和程序设计语言指令和程序设计语言指令:指令:是是CPU根据人的意图来执行某种操作的命令。根据人的意图来执行某种操作的命令。程序设计语言:程序设计语言:是实现人机交换信息的基本工具,是实现人机交换信息的基本工具,分为

2、机器语言、汇编语言和高级语言。分为机器语言、汇编语言和高级语言。机器语言:机器语言:用二进制编码表示每条指令,是计算机用二进制编码表示每条指令,是计算机能直接识别和执行的语言。能直接识别和执行的语言。BACK把把10放到累加器放到累加器A中中01110100 00001010Mov A, #0AH汇编语言:汇编语言:是用助记符、符号和数字等来表示指令是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。的程序设计语言。它与机器语言指令是一一对应的。把把10放到累加器放到累加器A中中01110100 000010103.1.2 3.1.2 指令格式指令格式8051汇编语

3、言指令格式汇编语言指令格式操作码操作码 目的操作数目的操作数,源操作数,源操作数;注释;注释汇编语言指令对应的二进制代码格式汇编语言指令对应的二进制代码格式单字节指令单字节指令双字节指令双字节指令三字节指令三字节指令BACK3.2 3.2 寻址方式寻址方式一、什么是寻址方式:一、什么是寻址方式:如何找到存放操作数如何找到存放操作数的地址,把操作数提取出来的方法。的地址,把操作数提取出来的方法。二、寻址方式的种类:二、寻址方式的种类:三、寻址空间及符号注释:三、寻址空间及符号注释:BACK二、寻址方式的种类:二、寻址方式的种类:1、寄存器寻址、寄存器寻址2、直接寻址、直接寻址3、立即数寻址、立即

4、数寻址4、寄存器间接寻址、寄存器间接寻址 5、变址寻址、变址寻址6、相对寻址、相对寻址 7、位寻址、位寻址BACK1、寄存器寻址、寄存器寻址寄存器寻址:寄存器寻址:由指令指出寄存器组由指令指出寄存器组R0R7中的某一个或其他寄存器中的某一个或其他寄存器(A,B,DPTR等等)的内的内容作为操作数。容作为操作数。例如:例如:MOV A,R0;(R0)A MOV P1,A;(A)P1口 ADD A,R0;(A)+(R0)ABACK2、直接寻址、直接寻址直接寻址方式:直接寻址方式:在指令中直接给出操作数所在存储在指令中直接给出操作数所在存储单元的地址。指令中操作数部分是操作数所在地址。单元的地址。指

5、令中操作数部分是操作数所在地址。直接寻址方式可访问片内直接寻址方式可访问片内RAM的的128个单元以及所有个单元以及所有的的SFR。对于。对于SFR,既可以使用它们的地址,也可以,既可以使用它们的地址,也可以使用它们的名字。使用它们的名字。例如:例如:MOV A,3AH;(3A) A MOV A,90H; 90H是是P1口的地址口的地址 或:或: MOV A,P1;(P1口口) A BACK3、立即数寻址、立即数寻址立即数寻址:立即数寻址:指令操作码后面紧跟的是一字节指令操作码后面紧跟的是一字节或两字节操作数,用或两字节操作数,用“#”号表示,以区别直接号表示,以区别直接地址。地址。例如:例如

6、:MOV A,#3AH;3AHAMOV A,3AH;(;(3AH)A ;直接寻址;直接寻址MOV DPTR,#2000H;2000HDPTR ;(;(DPH)=20H ;(;(DPL)=00HBACK4、寄存器间接寻址、寄存器间接寻址 寄存器间接寻址:寄存器间接寻址:操作数的地址事先存放在某个寄操作数的地址事先存放在某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。地址,由该地址所指定的单元内容作为操作数。8051规定规定R0或或R1为间接寻址寄存器,它可寻址内部为间接寻址寄存器,它可寻址内部地址地址RA

7、M低位的低位的128B单元内容。还可采用单元内容。还可采用DPTR作为作为间接寻址寄存器,寻址外部数据存储器的间接寻址寄存器,寻址外部数据存储器的64KB空间。空间。例如例如BACK例如:例如:将片内RAM 65H单元内容47H送A,可执行指令“MOV A,R0”。其中R0内容为65H。如图所示:65H47HR0A47H数据存储器数据存储器地址65H以指令中所指定以指令中所指定的的R0内容(内容(65H)为指针为指针将片内将片内RAM 65H单元内容单元内容47H送送ABACK5、变址寻址、变址寻址(基址寄存器基址寄存器+变址寄存器间接寻址变址寄存器间接寻址)变址寻址:变址寻址:以某个寄存器的

8、内容为基地址,在这个基地址的基础上加上地址偏移量形成真正的操作数地址。8051中采用DPTR或PC为变址寄存器,A的内容为地址偏移量。变址寻址只能访问程序存储器,访问范围为64KB。例如例如BACK例如:例如:MOVC A,A+DPTR;(A)+(DPTR)A如图所示如图所示1EH0302HROMDPTRAA02F1H11H1EH+DPTR内容与内容与A的内容之的内容之和为程序存储器地址和为程序存储器地址程序存储器内容送程序存储器内容送ABACK6、相对寻址、相对寻址 相对寻址:相对寻址:是以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。相对寻址只出现在相对转移指令中。当前的P

9、C值是指执行完相对指令后的PC值;相对转移指令操作码所在地址称为源地址;转移后的地址称为目的地址。目的地址目的地址=源地址源地址+相对转移指令字节数相对转移指令字节数+relrel为补码表示的有符号数。BACK6、相对寻址、相对寻址 例如:例如:ROM中地址中地址2000H开始机器码开始机器码 8054H汇编:汇编:SJMP rel其中:其中:80H是操作码,是操作码,54H是偏移量是偏移量rel执行后,执行后,PC=2000h+2+54HBACK7、位寻址、位寻址位寻址:位寻址:采用位寻址方式的指令的操作数是8位二进制数中的某一位,指令中给出的是位地址。位地址在指令中用bit表示。例如:CL

10、R bit;位地址的两种表示方法:位地址的两种表示方法:直接使用位地址,如D3H;直接用寄存器名字加位数,如PSW.3。位寻址区域:位寻址区域:片内RAM的20H-2FH的16个单元中的128位;字节地址能被8整除的SFR。BACK3.3 3.3 MCS-51 MCS-51 指令系统指令系统概述:概述:MCS-51MCS-51 指令系统由指令系统由 111111 条指令组成。条指令组成。其中,单字节指令其中,单字节指令 4949 条,双字节指令条,双字节指令 4545 条,条,三字节指令三字节指令 1717 条。条。从指令执行时间看,单周期指令从指令执行时间看,单周期指令 6464 条,双周期

11、条,双周期4545 条,只有乘、除指令为条,只有乘、除指令为 4 4 个周期。个周期。BACKMCS-51MCS-51指令系统可分为五大类指令系统可分为五大类1 1 数据传送指令:数据传送指令:2828条条2 2 算术运算指令:算术运算指令:2424条条3 3 逻辑运算及移位指令:逻辑运算及移位指令:2525条条4 4 控制转移指令:控制转移指令:1717条条5 5 位操作指令(布尔操作):位操作指令(布尔操作):1717条条Back 3.3.1 3.3.1 数据传送指令数据传送指令 1.1.以累加器以累加器A A为目的操作数的指令为目的操作数的指令 (4 (4条条, ,即即4 4种寻址方式种

12、寻址方式) ) 2. 2.以寄存器以寄存器RnRn为目的操作数的指令(为目的操作数的指令(3 3条)条) 3. 3.以直接地址为目的操作数的指令(以直接地址为目的操作数的指令(5 5条)条) 4. 4.以间接地址为目的操作数的指令(以间接地址为目的操作数的指令(3 3条)条) 5. 5.十六位数据传送指令十六位数据传送指令(1(1条条) ) 6. 6.查表指令(查表指令(2 2条)条) 7. 7.累加器累加器A A与片外与片外RAMRAM传送指令传送指令(4(4条条) ) 8.栈操作指令(二条) 9. 9.交换指令交换指令(4(4条条) )Back汇编指令格式机器码格式操作注释MOV A,Rn

13、;1110 1rrr(Rn) 将工作寄存器 Rn(即R0R7)内容传送到累加器A 中MOV A,direct;1110 0101direct(direct) 将直接寻址所得的片内RAM 单元内容或特殊功能寄存器中的内容传送到累加器A 中Back1.1.以累加器以累加器A A为目的操作数的指令为目的操作数的指令(4(4条条, ,即即4 4种寻址方式种寻址方式) )MOV A,Ri;1110 011i(Ri) 将间接寻址(Ri 为 R0或 R1)所得的片内 RAM单元内容或特殊功能积存器中的内容传送到累加器A中MOV A,#data;0111 0100data #data 将立即数传送到累加器A中

14、例:30H数据为11H,R1为30HMOV AMOV A,#30H #30H MOV AMOV A, 30H 30H MOV AMOV A,R1R1MOV AMOV A,R1R1(A A)=30H=30H(A A)=11H=11H(A A)=11H=11H(A A)=30H=30H 2 2 、以寄存器、以寄存器RnRn为目的操作数的指令(为目的操作数的指令(3 3条)条)汇编指令格式 机器码格式操作注释MOV Rn,A;1111 1rrr Rn将累加器 A 中内容传送到工作寄存器 Rn(即R0-R7)中MOV Rn,direct;1010 1rrrdirect(direct) Rn将直接寻址所

15、得的片内 RAM 单元内容或特殊功能寄存器中的内容传送到工作寄存器Rn(即R0-R7)中MOV Rn,#data;0111 1rrrdata#data Rn将立即数传送到工作寄存器Rn (即R0-R7)中Back 直接寻址和立这组指令的功直接寻址和立这组指令的功能是把源操作数所指定的内容送能是把源操作数所指定的内容送到当前工作寄存器组到当前工作寄存器组R0R7R0R7中的某中的某个寄存器。源操作数有寄存器寻个寄存器。源操作数有寄存器寻址,即数寻址三种方式。址,即数寻址三种方式。如:(如:(A A)=78H=78H,(,(R5R5)=47H=47H,(,(70H70H)=F2H=F2H,执行指令

16、:执行指令:MOV R5MOV R5,A AMOV R5MOV R5,70H 70H MOV R5MOV R5,#A3H#A3HBack;(;(R5R5)=78H=78H;(;(R5R5)=F2H=F2H; (R5R5)=A3H=A3H 3 3 、以直接地址为目的操作数的指令(、以直接地址为目的操作数的指令(5 5条)条)Back 这组指令的功能是把源操作数所指 定的 内 容 送 入由 直接 地 址direct 所指出的片内存储单元中。源操作数有寄存器寻址,直接寻址,寄存器间接寻址和立即寻址等方式。Back4 4 、以间接地址为目的操作数的指令(、以间接地址为目的操作数的指令(3 3条)条)汇

17、编指令格式 机器码格式操作注释MOV Ri, A ;1111 011i(A) (Ri)将累加器A 中内容传送到间接寻址(Ri 为 R0或R1)所得的片内RAM单元中。MOV Ri, direct;0101 011i direct(direct) (Ri)将直接寻址所得的片内RAM 单元内容或特殊功能寄存器中的内容传送到间接寻址(Ri 为 R0或R1)所得的片内RAM单元中MOV Ri, #data ;0111 011Idata#data (Ri)将立即数传送到间接寻址(Ri为R0或R1)所得的片内RAM单元中Back5 5、 十六位数据传送指令十六位数据传送指令(1(1条条) ) 这条指令的功

18、能是把这条指令的功能是把1616位常数送入位常数送入DPTRDPTR。DPTRDPTR由由DPHDPH和和DPLDPL组成。组成。汇编指令格式机器码格式操作注释MOV DPTR, #data16;1000 0000高位字节低位字节dataH DPHdataL DPL将高 8 位立即数dataH 送入 DPH,低 8 位立即数dataL 送入 DPL。Back例例:M MO OV V D DP PT TR R # #1 10 00 00 0H H;(D DP PT TR R)= =1 10 00 00 0H H, (D DP PH H)= =1 10 0H H,(D DP PL L)= =0 0

19、0 0H H Back6 6 、查表指令(、查表指令(2 2条)条)汇编指令格式机器码格式操作注释MOVC A,A+DPTR;1001 0011先(PC)+1 PC,后(A)+(DPTR) A(远程查表)MOVC A, A+PC;1000 0011先(PC)+1 PC,后(A)+(PC) A(近程查表)Back基地址寄存器+变址寄存器间接寻址PC+A(程序存储器0-64K)基地址寄存器+变址寄存 器间接寻址DPTR+A(程序存储器0-64K)A寄存器图图3-7 3-7 程序存贮器传送(查表)程序存贮器传送(查表)例:若:初始MOV DPTR,#2000HMOV DPTR,#2000H;MOV

20、A, #0AH MOV A, #0AH ;MOVC A,A+DPTRMOVC A,A+DPTR;执行下面程序段后结执行下面程序段后结果如何?果如何?MOV DPTR,#2000HMOV DPTR,#2000H;MOV A, #0AH MOV A, #0AH ;MOVC A,A+DPTRMOVC A,A+DPTR;(DPTRDPTR)=2000H=2000H(A A)=0AH=0AH(A A)= =(A A)+ +(DPTRDPTR)= =(200AH200AH)则:则:(A)=(200AH)=11H 所以,最后结果为:所以,最后结果为:(A)=02 (R0)=02 (A)=02 (R0)=02

21、 (PC)=1004(PC)=1004Back7 7、 累加器累加器A A与片外与片外RAMRAM传送指令传送指令(4(4条条) ) 在 8051 指令系统中,CPU 对片外 RAM 的访问只能用寄存器间接寻址的方式,且仅有四条指令:Back汇编指令格式机器码格式操作注释MOVX A,Ri ;1110 001i(Ri) AMOVX A, DPTR ;1110 0000(DPTR) AMOVX Ri, A;1111 001i(A) (Ri)MOVX DPTR, A;1111 0000(A) (DPTR) 第第2 2,4 4两条指令以两条指令以DPTRDPTR为片外数据存储器为片外数据存储器161

22、6位地址指针,寻址范围达位地址指针,寻址范围达64KB64KB。其功能是。其功能是DPTRDPTR所指定的片外数据存储器与累加器所指定的片外数据存储器与累加器A A之间之间传送数据。传送数据。第第1 1,3 3两条指令是用两条指令是用R0R0或或R1R1作低作低8 8位地址指位地址指针,由针,由P0P0口送出,寻址范围是口送出,寻址范围是256256字节。这两字节。这两条指令完成以条指令完成以R0R0或或R1R1为地址指针的片外数据存为地址指针的片外数据存储器与累加器储器与累加器A A之间的传送数据。之间的传送数据。例例: : 若:片内若:片内RAM (30H)=01HRAM (30H)=01

23、H,片外,片外RAM RAM (30H)=02H(30H)=02H,执行下面程序段后的结果如何,执行下面程序段后的结果如何。BackMOV R1, #30H;MOVX A, R1 ;MOV R0, A ;MOV A,R1 ;MOV R2, A ;(R1)=30H(A)=02H(R0)=(A)=02H(A)=(R1)=01H(R2)=(A)=01H 8 、栈操作指令(二条)Back 例:例: MOV SP, #18H; MOV A, #30H; MOV DPTR, #1000H; PUSH ACC; PUSH DPH; PUSH DPL; POP DPL; POP DPH; POP ACC ;

24、(SP)=18H(A)=30H(DPTR)=1000H(SP)=19H(19H)=30H(SP)=1AH(1AH)=10H(SP)=1BH(1BH)=00H(DPL)=00H (SP)=1AH(DPH)=10H (SP)=19H(A)=30H (SP)=18HBack 9 9、 交换指令交换指令(4(4条条) )汇编指令格式机器码格式操作注释XCH A,Rn;1100 1rrr(A) (Rn)XCH A, direct;1100 0101direct(A) (direct)XCH A, Ri;1100 011i(A) ( (Ri) )Back(1)字节变换指令 将第二操作数所指定的工作寄存器

25、Rn(R0R7),直接寻址和间接寻址的单元内容与累加器 A 中内容互换。其操作可表示为:A 一字节 源操作数 一字节初始时:初始时:(A)=34H,(30H)=11HXCH A, 30H ;MOV R1, #30H ;XCH A, R1 ;(A)=11H,(30H)=34H(R1)=30H(A)=34H,(30H)=11H(2) (2) 半字节交换指令半字节交换指令汇编指令格式机器码格式操作注释XCHD A, Ri; 1101 011i(A03) (Ri)03) 这条指令为低半字节交换指令。该指令将累加器 A 的低 4 位与 R0 或 R1 所指出的片内 RAM 单元的低 4 位数据相互交换,

26、各自的高 4 位不变,其操作表示为:继续上例: XCHD A, R1 ; (A)=31H ; (30H)=14H3.3.2 3.3.2 算术运算指令算术运算指令 1 .1 .不带进位加法指令不带进位加法指令( (四条四条) ) 2 . 2 .带进位加法指令(四条)带进位加法指令(四条) 3 . 3 .带借位减法指令(四条)带借位减法指令(四条) 4 . 4 .乘法指令(乘法指令(1 1条)条)Back 5 5、 除法指令(除法指令(1 1条)条) 6 6、 加加1 1指令(指令(5 5条)条) 7 7、 减减1 1指令指令(4(4条条) ) 8 8、 十进制调整指令十进制调整指令(1(1条条)

27、 )Back1 1 、 不带进位加法指令不带进位加法指令( (四条四条) )BackADD A,Ri ;0010 011i(A)+(Ri) A将间接寻址(Ri为 R0 或 R1)所得的片内 RAM 单元中内容和累加器 A 中的数相加, “和”存放于累加器A中ADD A, #data;0010 0100data(A)+#data A将立即数的 8 位无符号二进制数和累加器 A 中的数相加, “和”存放于累加器A中例:例:Back若:(若:(A)=78H ,(,(R0)=64H执行执行ADD A,R0 后,结果及后,结果及PSW=?(A):):78H= 01111000 B + (R0):):64

28、H= 01100100 B (A):):DCH= 11011100 B标志位:标志位:CY=0, AC=0, OV=1, P=1, 即即 PSW=05H 结果:(结果:(A)=DCH (R0)=64H2 2 、带进位加法指令(四条)、带进位加法指令(四条)Back汇编指令格式机器码格式操作注释ADDC A, Rn ;0011 1rrr(A)+CY+(Rn) A将工作寄存器内容、CY 位和累加器 A 中的数相加, “和”存放于累加器A 中ADDC A,direct; 0011 0101direct(A)+(direct)+CY A将内部 RAM 单元内容、CY 位和累加器 A 中的 数 相 加

29、,“和”存放于累加器 A 中ADDC A,Ri;0011 011i(A)+(Ri)+CY A将间接寻址 (Ri为 R0 或 R1)所得的片内RAM单元中内容、 CY位和累加器 A中的数相加,“和”存放于累加器A中ADDC A, #data;0011 0100data(A)+#data+CY A将立即数的 8位无符号二进制数、CY 位和累加器 A 中的数相加, “和”存放于累加器A中 本组指令的功能是同时把源操作数所指出的内容和进位标志未 CY 都加到累加器 A 中,结果存放到 A 中,其余的功能和上面的 ADD 指令相同。本组指令常用于多字节加法。例:设(A)=0C3H,(R0)=0AAH,

30、(CY)=1。执行指令“ADDC A,R0”后的结果 及标志位如何? 解: (A) : C3H=1100 0011+ (CY) : 1=0000 0001 1100 0100+ (R0) : AAH=1010 1010 (A) : 6EH=0110 1110标志位:CY=1,OV=1,AC=0,结果: (A)=6EH, (R0)=0AAH。例:编程,将(30H),(31H)单元中的数与 (40H),(41H)单元中的数相加,结 果存于(30H),(31H)单元中。BackMOV A, 30HADD A, 40HMOV 30H, AMOV A, 31HADDC A, 41HMOV 31H, A3

31、 3 、带借位减法指令(四条)、带借位减法指令(四条)Back 这组指令的功能是从累加器这组指令的功能是从累加器A A中减去中减去源操作数所指出的数及进位位源操作数所指出的数及进位位CYCY的值的值, ,差保留在累加器差保留在累加器A A中。中。由于由于80518051指令系统中没有不带借位指令系统中没有不带借位的减法指令,如需要的话,可以在的减法指令,如需要的话,可以在“SUBBSUBB”指令前用指令前用“CLR CCLR C”指令将指令将CyCy清清0 0,这一点必须注意。这一点必须注意。例:设(例:设(A A)=0C9H,=0C9H,(R2R2)=54H,Cy=1=54H,Cy=1。 执

32、行指令执行指令“SUBB ASUBB A, R2 R2”的结果如何?的结果如何?Back解:解: (A)=0C9H= 11001001 B-) Cy= 1 = 00000001 B 11001000 B -) (R2)=54H = 01010100 B (A)=74H = 01110100 B结果为:(结果为:(A)=74H标志位为:标志位为:Cy=0 AC=0 OV=1 P=0 4 4、 乘法指令(乘法指令(1 1条)条)汇编指令格式机器码格式操作注释MUL AB ; 1010 0100(A)(B) B15-8 A7-0将累加器 A 和寄存器 B 中两个无符号数相乘,所得 16位积的低字节存

33、放在 A 中,高字节存放中B 中。该指令若乘积大于该指令若乘积大于0FFH0FFH,则,则OVOV置置1 1,否则,否则OVOV清清0 0。CyCy位总是被清位总是被清0 0。Back例:(A)=4EH,(B)=5DH, 执行指令“MUL AB”后结果如何? 解: 结结果果为为: (B B)= =1 1C CH H, , (A A)= =5 56 6H H, 表表示示积积(B BA A)= =1 1C C5 56 6H H,O OV V= =1 1。 Back5 5、 除法指令(除法指令(1 1条)条)汇编指令格式机器码格式操作注释DIV AB ;1000 0100(A)/(B)的商 A(A)

34、/(B)的余数 BA 中内容除以 B中内容,整数商存于 A 中,余数存于B中。Back该该指指令令执执行行后后,C CY Y 和和 O OV V 均均被被清清 0 0。若若 原原(B B)= =0 00 0H H,则则结结果果无无法法确确定定,用用 O OV V= =1 1 表表示示,C CY Y 仍仍为为 0 0。 例例: (A A)= =B BF FH H, (B B)= =3 32 2H H。 执执行行指指令令“D DI IV V A AB B” 结结果果为为(A A)= =0 03 3H H, (B B)= =2 29 9H H; 标标志志位位 C CY Y= =0 0,O OV V=

35、 =0 0。 Back 6 6、 加加1 1指令(指令(5 5条)条)汇编指令格式机器码格式操作注释INC A ;0000 0100(A)+1 AA 中内容加1。INC Rn;0000 1rrr(Rn)+1 RnRn 中内容加1。INC direct;0000 0101direct(direct)+1directDirect 单元中内容加1。INC Ri;0000 011I(Ri)+1 (Ri)Ri 间接寻址所得的片内 RAM 单元中内容加1。INC DPTR;1010 0011(DPTR)+1 DPTRDPTR中内容加1Back该组指令的操作不影响 PSW。若原单元内容为 FFH,加 1 后

36、溢出为 00H,也不影响 PSW标志。例:比较指令“INC A”和“ADD A,#01H”的结果。解: “INC A”指令只将 A 的内容加 1,标志位没有变化。而“ADD A,#01H”指令不仅将 A 的内容加 1,还影响标志位变化。例:例: 若:(若:(R1R1)=30H =30H ,(,(30H30H)=11H=11H 求执行下面指令后的结果。求执行下面指令后的结果。INC R1INC R1; (30H)=12H (30H)=12HINC R1 INC R1 ; (R1)=31H (R1)=31H解解:结结果果为为: (3 30 0H H)= =1 12 2H H, (R R1 1)=

37、=3 31 1H H。 不不影影响响 P PW WS S Back7 7、 减减1 1指令指令(4(4条条) )汇编指令格式机器码格式操作注释DEC A ;0001 0100(A)-1 AA 中内容减1。DEC Rn;0001 1rrr(Rn)-1 RnRn 中内容减 1。DEC direct;0001 0101direct(direct)-1directDirect 单元中内容减 1。DEC Ri;0001 011I(Ri)-1 (Ri)Ri 间接寻址所得的片内 RAM 单元中内容减 1。Back8 8、 十进制调整指令十进制调整指令(1(1条条) )汇编指令格式机器码格式操作注释DA A;

38、1101 0100若(A0-3)9或AC=1,则(A0-3)+6 A0-3同时,若(A4-7)9 或 CY=1,则(A4-7)+6 A4-7调整累加器内容为BCD码。Back 这条指令跟在 ADD 或 ADDC 指令后,将相加后存放在累加器中的结果进行十进制调整,完成十进制加法运算功能。 必须注意,本指令不能简单地把累加器 A的 16 进制数变换成 BCD 码,也不能用于十进制减法的调整。例例: : 设累加器设累加器A A内容为:内容为:01010110B01010110B(即为(即为5656的的BCDBCD码),寄存器码),寄存器R3R3的内容为的内容为01100111B01100111B(

39、即(即6767的的BCDBCD码),码),CYCY内容为内容为1 1。求执行下列指令后的结果。求执行下列指令后的结果。 ADDC AADDC A,R3R3;DA ADA A;解:先执行 ADDC A,R3; (A) :0101 0110 BCD:56 (R3) :0110 0111 BCD:67 (+) (CY) :0000 0001 BCD:01 和:1011 1110即(A)=1011 1110 且影响标志位 CY=0,AC=0; 再执行 DA A;因为 A 中的高四位值为 11,大于 9,低四位值为 14,也大于 9,所以内部调整自动进行加 66H的操作: 1011 1110 调整+)

40、0110 0110 1 0010 0100 BCD:124即(A)=0010 0100=24BCD,CY=1;AC=1。Back 逻辑操作指令包括:与、或、异或、清除、求反、移位等操作。该指令组全部操作数都是8位25条指令。3.3.3 3.3.3 逻辑操作指令逻辑操作指令Back 1 .1 .简单操作指令(简单操作指令(2 2条)条) 2 .2 .移位指令(移位指令(4 4条)条) 3 .3 .累加器半字节交换指令累加器半字节交换指令 4. 4. 逻辑逻辑“与与”指令(指令(6 6条)条) 5. 逻辑逻辑“或或”指令(指令(6条)条) 6 .6 .逻辑逻辑“异或异或”指令(指令(6 6条)条)

41、Back1 .1 .简单操作指令(简单操作指令(2 2条)条)汇编指令格式机器码格式操作注释CLR A ;1110 01000 A清累加器 A 为 0,只影响标志位P。Back(1) (1) 累加器累加器A A清清0 0指令指令(2)(2)累加器累加器A A取反指令取反指令汇编指令格式机器码格式操作注释CPL A ;1111 0100(A) A 对累加器A 内容逐位取反,不影响标志位Back2 .2 .移位指令(移位指令(4 4条)条)汇 编 指 令 格 式机 器 码 格 式操 作注 释RL A ;0010 0011 a7 a0累加器 A 的内容循环左移 一 位Back(1)(1)累加器累加器

42、A A循环左移指令循环左移指令(2) (2) 累加器累加器A A循环右移指令循环右移指令 汇编指令格式机器码格式操作注释RR A ;0000 0011 a7 a0将累加器 A的内容循环右移一位(3) (3) 累加器累加器A A连同进位位循环左移指令连同进位位循环左移指令 RLCRLCA A ;汇编指令格式机器码格式操作注释RLC A ;0011 0011 CY a7 a0将累加器 A 的内容连同进位位CY一起循环左移一位。 我我们们通通常常用用 R RL LC C A A 指指令令将将累累加加器器 A A 的的内内容容做做乘乘 2 2运运算算。 (4) (4) 累加器累加器A A连同进位位循环

43、右移指令连同进位位循环右移指令 RRCRRCA A ;汇编指令格式机器码格式操作注释RRC A ;0001 0011 CY a7 a0将累加器 A 的内容连同进位位CY一起循环右移一位。例如:无符号例如:无符号 8 8 位二进制数位二进制数 (A A)=10111101B=BDH=10111101B=BDH, (, (CYCY)=0=0。 将(将(A A)乘)乘 2 2,执行指令,执行指令 “RLC ARLC A”后”后 结果: (结果: (A A)=0111=0111 1010B=7AH1010B=7AH, (, (CYCY)=1=1, 而而 17AH17AH 正是正是 BDHBDH 的的

44、2 2 倍。倍。 Back3 . 3 . 累加器半字节交换指令累加器半字节交换指令 汇编指令格式机器码格式操作注释SWAP A ;1100 0100(A0-3) (A4-7)将累加器 A 的高低两半字节交换。如如:A=FAH,执执行行指指令令 “SW AP A”后后, 结结果果为为: (A)=AFH Back4. 4. 逻辑逻辑“与与”指令(指令(6 6条)条)汇编指令格式机器码格式操作注释ANL A, Rn;0101 1rrr(A)(Rn) AANL A,direct;0101 0101direct(A)(direct) AANL A, Ri;0101 011i(A)(Ri) AANL A,

45、 #data;0101 0100#data(A)#data AANL direct, A;0101 0010direct(direct)(A) directANL direct,#data;0101 0011direct#data(direct)#data directBack 这组指令中前四条指令是将累加器这组指令中前四条指令是将累加器A A的的内容和操作数所指出的内容按位进行逻内容和操作数所指出的内容按位进行逻辑辑“与与”,结果存放在,结果存放在A A中。中。后两条指令是将直接地址单元中的内容后两条指令是将直接地址单元中的内容和操作数所指出的单元的内容按位进行和操作数所指出的单元的内容按位

46、进行逻辑逻辑“与与”,结果存入直接地址单元中。,结果存入直接地址单元中。若直接地址正好是若直接地址正好是I/OI/O端口,则为端口,则为“读读改改写写”操作。操作。Back5. 逻辑逻辑“或或”指令(指令(6条)条)汇编指令格式机器码格式操作注释ORL A, Rn;0100 1rrr(A)(Rn) AORL A,direct;0100 0101direct(A)(direct) AORL A, Ri;0100 011i(A)(Ri) AORL A, #data;0100 0100#data(A)#data AORL direct, A;0100 0010direct(direct)(A) di

47、rectORL direct,#data;0100 0011direct#data(direct)#data directBack 这组指令的功能是将两个指定的操作数这组指令的功能是将两个指定的操作数按位进行逻辑按位进行逻辑“或或”,前四条指令的操作,前四条指令的操作结果存放在累加器结果存放在累加器A A中,后两条指令的操中,后两条指令的操作结果存放在直接地址单元中。作结果存放在直接地址单元中。Back6 .6 .逻辑逻辑“异或异或”指令(指令(6 6条)条)Back 这组指令的功能是将两个指定的操作数这组指令的功能是将两个指定的操作数按位进行按位进行“异或异或”,前四条指令的结果存,前四条指

48、令的结果存放在累加器放在累加器A A中,后两条指令的操作结果中,后两条指令的操作结果存放在直接地址单元中存放在直接地址单元中。上述逻辑操作类指令归纳如图。这类指上述逻辑操作类指令归纳如图。这类指令的操作均只影响标志位令的操作均只影响标志位P P。Back3.3.4 控制程序转移类指令控制程序转移类指令 1 . 无条件转移指令(无条件转移指令(4条条) 2 . 空操作指令(空操作指令(1条)条) 3 . 条件转移指令(条件转移指令(8条)条) 4 . 调用和返回指令调用和返回指令Back 一个计算机“智商”的高低,取决于它的转移类指令的多少,特别是条件转移指令的多少。计算机运行过程中,有时因为操

49、作的需要,程序不能按顺序逐条执行指令,需要改变程序的运行方向,即将程序跳转到某个指定的地址再顺序执行下去。某些指令具有修改程序计数器 PC 内容的功能,因为 PC 内容是将要执行的下一条指令的地址,所以计算机执行这类指令就能够控制程序转移到新的地址上去执行。 8051 单片机有丰富的转移类指令(17 条) ,包括无条件转移、条件转移和调用指令及返回指令等。所有这些指令的目标地址都是在 64K 字节程序存储器地址空间范围内。Back1、无条件转移指令(、无条件转移指令(4条)条) 无条件转移指令是当程序执行到该指令时,程序无条件的转移到指令所提供的地址处执行。无条件转移指令有长转移、短转移、相对

50、转移和间接转移 4 条指令。Back(1)绝对转移指令绝对转移指令 汇编指令格式机器码格式操作注释AJMP addr11 ;a10a9a8 0 0001a7 a0先(PC)+2 PC,addr11 PC100,(PC1511)不变Back 这条指令提供了11位地址,可在2K范围内无条件转移到由a10-a0所指出的地址单元中。因为指令只提供低11位地址,高5位为原PC11-15位值,因此,转移的目标地址必须在AJMP指令后面指令的第一个字节开始的同一2K字节范围内。Back (2) 长转移指令长转移指令 LJMP add16 ; ,add16 PC00000010a15-a8a7-a0Back

51、指令提供 16 位目标地址,将指令的第二、第三字节地址码分别装入 PC 的高 8 位和低 8 位中,程序无条件转向指定的目标地址去执行。由于直接提供 16 位目标地址,所以程序可转向 64K 程序存储器地址空间的任何单元。Back(3) 短转移(相对转移)指令短转移(相对转移)指令BackSJMP rel ;先(PC)+2 PC 后(PC)+rel PC 例如, 在 (PC) =0100H 地址单元有条 “SJMPrel”指令,若 rel=55H(正数) ,则正向转移到0102H+0055H=0157H 地址上;若 rel=F6H(负数)则反向转移到 0102H+FFF6H=00F8H 地址上

52、。在用汇编语言程序是,rel 可以是一个转移目的地址的标号,由汇编程序在汇编过程中自动计算偏移地址,并且填入指令代码中;在手工汇编时,我们可用转移目的地址减转移指令所在源地址,再减转移指令字节数 2 得到偏移字节数 rel。Back(4) 间接转移指令间接转移指令01110011JMP A+DPTR;, (A)+(DPTR) PCBack 该指令的转移地址由数据指针DPTR 的 16 位数和累加器 A 的 8 位数作无符号数相加形成,并直接送入。指令执行过程对 DPTR、A 和标志位均无影响。这条指令可代替众多的判别跳转指令,具有散转功能。2 空操作指令(空操作指令(1条)条) 这是一条单字节

53、指令,除 PC 加 1 外,不影响其它寄存器和标志位。 “NOP”指令常用于产生一个机器周期的延迟。NOP ;00000000(PC)+1 PCBack3 条件转移指令(条件转移指令(8条)条)BackJZ rel ;01100000相对地址(rel)(PC)+2 PC当A= 全 “ 0 ”, 则 ( PC ) = ( PC ) +rel当 A=/全“0” ,程序顺序执行(1) (1) 判零转移指令判零转移指令 JZ 和 JNZ 指令分别对累加器 A 的内容为全零和不为零进行检测并转移,当不满足各自的条件时,程序继续往下执行,当各自的条件满足时,则程序转向指定的目标地址。其目标地址是以下一条指

54、令第一个字节的地址为基础加上指令的第二各字节中的相对偏移量。相对偏移量为一个带符号的 8 位数, 偏移范围为-128+127 字节,在指令汇编和手工汇编时被确定,它是目标地址于下条指令地址之差。本指令不改变累加器 A 内容和影响任何标志位。BackBack(2)比较转移指令(比较转移指令(4条)条)BackCJNE(目的字节) , (源字节) ,rel ;三字节指令CJNE A,direct, rel ;10110101directrel(PC)+3 PC 若(direct)(A) , 则(PC)+rel PC 且 1 Cy 若(direct)=(A) ,则顺序执行CJNE A, #data,

55、 rel ;10110100#datarel(PC)+3 PC 若#data (A) , 则(PC)+rel PC 且 0 Cy 若#data (A) , 则(PC)+rel PC 且 1 Cy 若#data =(A) , 则顺序执行。CJNE Rn, #data,rel ;10111rrr#datarel(PC)+3 PC 若#data (Rn), 则(PC)+rel PC 且1 Cy 若#data = (Rn),则顺序执行.(PC)+3 PC 若#data (Ri), 则(PC)+rel PC 且 1 Cy 若#data = (Ri),则顺序执行1011011i#datarel 由于这是条

56、三字节指令,取出第三字节(rel),(PC)=3 指向下条指令的第一字节地址,然后对源字节数和目的字节数进行比较,判比较结果.由于这时的当前值已是(PC)+3,因此,程序的转移范围应从(PC)+3 为起始地址的+127-128 字节单元地址。Back(3)循环转移指令(循环转移指令(2条)条)DJNZ Rn,REL ;11011rrrrel(PC)+2 PC (Rn)-1 Rn当(Rn)=/0,则(PC)+rel PC当(Rn)=0,则顺序执行BackDJNZ direct,rel ;11010101directrel(PC)+3 PC (direct)-1 direct 当(direct)=

57、/0,则(PC)+rel PC 当(direct)=0,则结束循环,程序往下执行 程序每执行一次本指令,将第一操作数的字节程序每执行一次本指令,将第一操作数的字节变量减变量减1,并判字节变量是否为零,若不为,并判字节变量是否为零,若不为0,则转移到目标地址,继续执行循环程序段;若则转移到目标地址,继续执行循环程序段;若为为0,则结束循环程序段的执行,程序往下执,则结束循环程序段的执行,程序往下执行。行。其中,其中,rel为相对于为相对于DJNZ指令的下一条指令的指令的下一条指令的第一个字节相对偏移量,用一个带符号的第一个字节相对偏移量,用一个带符号的8位位数表示。所以,循环转移的目标地址应为数

58、表示。所以,循环转移的目标地址应为DJNZ指令的下条指令地址和偏移量之和。指令的下条指令地址和偏移量之和。Back4 调用和返回指令调用和返回指令 在程序设计中,有时因操作要求,需反复执行某段程序,是这段程序能被公用。这样可减少程序编写和调试的工作量,于是引进了主程序和子程序的概念。指令系统中一般都有主程序调用子程序的指令和从子程序返回主程序的指令。通常把具有一定功能的公用程序段作为子程序,子程序的最后一条指令为返回主程序指令(RET) 。主程序转子程序以及子程序返回主程序的过程入图所是。Back(1)长调用指令长调用指令LCALL addr16 ;00010010addr8-15addr0-

59、7(PC)+3 PC 断点值(SP)+1 SP(PC0-7) (SP)(SP)+1 SP 压入断点(PC8-15) (SP) addr0-15 PCBack例如:设(SP)=07H,符号地址“SUBRTUN” 指向程序存储器的5678H(PC)=0123H。从0123H处执行指令 LCALL SUBRTUN执行结果: (PC)+3=0123H+3=0126H,先后压入堆栈: (SP) +1=08H 压入 26H, (SP) +1=09H压入 01H, (SP)=09H。SUBRTUN=5678H 送入 PC,即(PC)=5678H,程序转向目标地址以 5678H 为首的子程序执行。Back(2

60、)绝对调用指令绝对调用指令Back 绝对绝对调用指令提供了调用指令提供了11位目位目标地址,限定在标地址,限定在2K地址空间内地址空间内调用。调用。 (PC)+2 PC, 断点值 (SP)+1 SP (PC07) (SP) 压入断点 (SP)+1 SP (PC815) (SP) addr110 PC010(2KB 区内地址) (PC1115)不变ACALL addr11 ;a10a9a810001addr07例如:设符号地址“SUBRTN”所对应的程 序存储器实际地址为0345H,在 (PC)=0123H处 执行指令ACALL SUBRTN执行结果: (PC)+2=0123H,压入堆栈, (S

温馨提示

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

评论

0/150

提交评论