1、第三章第三章 指令系统指令系统3.3 89C513.3 89C51指令系统指令系统3.1 3.1 汇编语言汇编语言3.2 3.2 寻址方式寻址方式3.4 3.4 程序设计举例程序设计举例学习目的及要求熟悉熟悉89C51汇编语言指令格式,汇编语言指令格式,掌握掌握89C51的的7种寻址方式,并能实际种寻址方式,并能实际应用。应用。熟记熟记89C51的的111条汇编语言指令,条汇编语言指令,并会根据需要编制汇编语言程序。并会根据需要编制汇编语言程序。熟悉指令的功能、操作对象和结果以及熟悉指令的功能、操作对象和结果以及 指令执行后对指令执行后对PSW各个位的影响。各个位的影响。3.1 3.1 汇编语
2、言汇编语言3.1.1 3.1.1 指令和程序设计语言指令和程序设计语言3.1.2 3.1.2 指令格式指令格式3.1.1 3.1.1 指令和程序设计语言指令和程序设计语言指令:指令:是是CPU根据人的意图来执行某种操作的命令。根据人的意图来执行某种操作的命令。程序设计语言:程序设计语言:是实现人机交换信息的基本工具,是实现人机交换信息的基本工具,分为机器语言、汇编语言和高级语言。分为机器语言、汇编语言和高级语言。机器语言:机器语言:用二进制编码表示每条指令,是计算机用二进制编码表示每条指令,是计算机能直接识别和执行的语言。能直接识别和执行的语言。汇编语言:汇编语言:是用助记符、符号和数字等来表
3、示指令是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。的程序设计语言。它与机器语言指令是一一对应的。3.1.2 3.1.2 指令格式指令格式89C51汇编语言指令格式汇编语言指令格式操作码操作码 目的操作数目的操作数,源操作数,源操作数;注释;注释例如:例如:MOV A,#00H汇编语言指令对应的二进制代码格式汇编语言指令对应的二进制代码格式单字节指令单字节指令双字节指令双字节指令三字节指令三字节指令单字节指令单字节指令1、指令码中隐含着对某一种寄存器的操作、指令码中隐含着对某一种寄存器的操作如:指令如:指令“INC DPTR”的指令代码格式为:的指令代码格式为
4、:A3H=1 0 1 0 0 0 1 12、由指令中的、由指令中的rrr三位的不同编码指定某一三位的不同编码指定某一寄存器寄存器如:指令如:指令“MOV A,Rn”的指令代码格式为:的指令代码格式为:1 1 1 0 1 r r r 双字节指令双字节指令用一个字节表示操作码,另一个字节表用一个字节表示操作码,另一个字节表示操作数或操作数所在的地址。示操作数或操作数所在的地址。格式为:格式为:操作码操作码立即数或地址立即数或地址三字节指令三字节指令一个字节操作码,两个字节操作数。一个字节操作码,两个字节操作数。格式为:格式为:操作码操作码立即数或地址立即数或地址立即数或地址立即数或地址3.2 3.
5、2 寻址方式寻址方式寻址方式:寻址方式:如何找到存放操作数的地址,把操如何找到存放操作数的地址,把操作数提取出来的方法。作数提取出来的方法。3.2.1 7种寻址方式种寻址方式寻址方式:寻址方式:3.2.2 寻址空间及符号注释:寻址空间及符号注释:3.2.1 7种寻址方式:种寻址方式:1、寄存器寻址、寄存器寻址2、直接寻址、直接寻址3、立即数寻址、立即数寻址4、寄存器间接寻址、寄存器间接寻址 5、变址寻址、变址寻址6、相对寻址、相对寻址 7、位寻址、位寻址1、寄存器寻址、寄存器寻址寄存器寻址:寄存器寻址:由指令指出寄存器组由指令指出寄存器组R0R7中的某一个或其他寄存器中的某一个或其他寄存器(A
6、,B,DPTR等等)的内的内容作为操作数。容作为操作数。例如:例如:MOV A,R0;(R0)A MOV P1,A;(A)P1口 ADD A,R0;(A)+(R0)A2、直接寻址、直接寻址直接寻址方式:直接寻址方式:在指令中直接给出操作数所在存储在指令中直接给出操作数所在存储单元的地址。指令中操作数部分是操作数所在地址。单元的地址。指令中操作数部分是操作数所在地址。直接寻址方式可访问片内直接寻址方式可访问片内RAM的的128个单元以及所有个单元以及所有的的SFR。对于。对于SFR,既可以使用它们的地址,也可以,既可以使用它们的地址,也可以使用它们的名字。使用它们的名字。例如:例如:MOV A,
7、3AH;(3A)A MOV A,P1;(P1口口)A 或:或:MOV A,90H;90H是是P1口的地址口的地址3、立即数寻址、立即数寻址立即数寻址:立即数寻址:指令操作码后面紧跟的是一字节指令操作码后面紧跟的是一字节或两字节操作数,用或两字节操作数,用“#”号表示,以区别直号表示,以区别直接地址。接地址。例如:例如:MOV A,3AH;(;(3AH)AMOV A,#3AH;3AHAMOV DPTR,#2000H;2000HDPTR ;(;(DPH)=20H ;(;(DPL)=00H4、寄存器间接寻址、寄存器间接寻址 寄存器间接寻址:寄存器间接寻址:操作数的地址事先存放在某个寄操作数的地址事先
8、存放在某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。地址,由该地址所指定的单元内容作为操作数。89C51规定规定R0或或R1为间接寻址寄存器,它可寻址内为间接寻址寄存器,它可寻址内部地址部地址RAM低位的低位的128B单元内容。还可采用单元内容。还可采用DPTR作作为间接寻址寄存器,寻址外部数据存储器的为间接寻址寄存器,寻址外部数据存储器的64KB空间,空间,但不能用这种方式寻址特殊功能寄存器。但不能用这种方式寻址特殊功能寄存器。在访问片内在访问片内RAM低低128B和片外和片外RAM低地址的低地址的
9、256B单元时,用单元时,用R0或或R1作地址指针;在访问全部作地址指针;在访问全部64KB外外部部RAM时,使用时,使用DPTR作地址指针进行间接寻址。作地址指针进行间接寻址。例如:例如:将片内RAM 65H单元内容47H送A,可执行指令“MOV A,R0”。其中R0内容为65H。如图所示:65H47HR0A47H数据存储器数据存储器地址65H以指令中所指定以指令中所指定的的R0内容(内容(65H)为指针为指针将片内将片内RAM 65H单元内容单元内容47H送送A5、变址寻址、变址寻址(基址寄存器基址寄存器+变址寄存器间接寻址变址寄存器间接寻址)变址寻址:变址寻址:以某个寄存器的内容为基地址
10、,在这个基地址的基础上加上地址偏移量形成真正的操作数地址。89C51中采用DPTR或PC为变址寄存器,A的内容为地址偏移量。变址寻址只能访问程序存储器,访问范围为64KB。例如例如例如:例如:MOVC A,A+DPTR;(A)+(DPTR)A如图所示如图所示1EH0302HROMDPTRAA02F1H11H1EH+DPTR内容与内容与A的内容之的内容之和为程序存储器地址和为程序存储器地址程序存储器内容送程序存储器内容送A6、相对寻址、相对寻址 相对寻址:相对寻址:是以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。相对寻址只出现在相对转移指令中。当前的PC值是指执行完相对指令后的
11、PC值;相对转移指令操作码所在地址称为源地址;转移后的地址称为目的地址。目的地址目的地址=源地址源地址+相对转移指令字节数相对转移指令字节数+relrel为补码表示的有符号数。例如:例如:例如:执行指令:“JC rel”,设rel75H,CY=1。ALU0111 01010100 0000程序存储器地址1000H1001H1002H1077HJC rel rel75H(PC)=1002H(PC)(PC)CY=11077H7、位寻址、位寻址位寻址:位寻址:采用位寻址方式的指令的操作数是8位二进制数中的某一位,指令中给出的是位地址。位地址在指令中用bit表示。例如:CLR bit;位地址的两种表示
12、方法:位地址的两种表示方法:直接使用位地址,如D3H;直接用寄存器名字加位数,如PSW.3。位寻址区域:位寻址区域:片内RAM的20H-2FH的16个单元中的128位;字节地址能被8整除的SFR。三、寻址空间及符号注释三、寻址空间及符号注释1、寻址空间:、寻址空间:见表见表3-2。2、符号注释:符号注释:表表3-2 操作数寻址方式和有关空间操作数寻址方式和有关空间MCS-51MCS-51指令系统可分为五大类指令系统可分为五大类1 1 数据传送指令:数据传送指令:2828条条2 2 算术运算指令:算术运算指令:2424条条3 3 逻辑运算及移位指令:逻辑运算及移位指令:2525条条4 4 控制转
13、移指令:控制转移指令:1717条条5 5 位操作指令(布尔操作):位操作指令(布尔操作):1717条条 3.3.1 3.3.1 数据传送指令数据传送指令 1.1.以累加器以累加器A A为目的操作数的指令为目的操作数的指令 (4(4条条,即即4 4种寻址方式种寻址方式)2.2.以寄存器以寄存器RnRn为目的操作数的指令(为目的操作数的指令(3 3条)条)3.3.以直接地址为目的操作数的指令(以直接地址为目的操作数的指令(5 5条)条)4.4.以间接地址为目的操作数的指令(以间接地址为目的操作数的指令(3 3条)条)5.5.十六位数据传送指令十六位数据传送指令(1(1条条)6.6.查表指令(查表指
14、令(2 2条)条)7.7.累加器累加器A A与片外与片外RAMRAM传送指令传送指令(4(4条条)8.栈操作指令(二条)9.9.交换指令交换指令(4(4条条)汇编指令格式机器码格式操作注释MOV A,Rn;1110 1rrr(Rn)将工作寄存器 Rn(即R0R7)内容传送到累加器A 中MOV A,direct;1110 0101direct(direct)将直接寻址所得的片内RAM 单元内容或特殊功能寄存器中的内容传送到累加器A 中1.1.以累加器以累加器A A为目的操作数的指令为目的操作数的指令(4(4条条,即即4 4种寻址方式种寻址方式)MOV A,Ri;1110 011i(Ri)将间接寻
15、址(Ri 为 R0或 R1)所得的片内 RAM单元内容或特殊功能积存器中的内容传送到累加器A中MOV A,#data;0111 0100data#data 将立即数传送到累加器A中例:设例:设(30H)=11H,(R1)=30H,执行一下指令执行一下指令 MOV A MOV A,#30H#30H ;(;(A A)=30H=30H MOV A MOV A,30H 30H ;(;(A A)=11H=11H MOV A MOV A,R1 R1 ;(;(A A)=11H=11H MOV A MOV A,R1 R1 ;(;(A A)=30H=30H 2 2、以寄存器、以寄存器RnRn为目的操作数的指令(
16、为目的操作数的指令(3 3条)条)这组指令的功能是把源操作数所指定这组指令的功能是把源操作数所指定的内容送到当前工作寄存器组的内容送到当前工作寄存器组R0R7R0R7中中的某个寄存器。源操作数有寄存器寻的某个寄存器。源操作数有寄存器寻址,直接寻址和立即数寻址三种方式。址,直接寻址和立即数寻址三种方式。如:(如:(A A)=78H=78H,(,(R5R5)=47H=47H,(,(70H70H)=F2H=F2H,执行指令:执行指令:MOV R5MOV R5,A A ;(;(A A)R5R5,(R5R5)=78H=78HMOV R5MOV R5,70H 70H;(;(70H70H)R5R5,(R5R
17、5)=F2H=F2HMOV R5MOV R5,#A3H#A3H;A3HA3HR5R5,(R5R5)=A3H=A3H注意注意,在,在89C5189C51指令系统中没有指令系统中没有“MOV RnMOV Rn,RnRn”传送指令。传送指令。3 3、以直接地址为目的操作数的指令(、以直接地址为目的操作数的指令(5 5条)条)汇编指令格式 机器码格式操作注释MOV direct,A;1111 0101 direct(A)direct将累加器 A 中内容传送到直接地址direct所指出的片内存储单元中。MOV direct,Rn;111 1rrr direct(Rn)direct将工作寄存器Rn(即R0
18、-R7)中内容传送到直接地址 direct所指出的片内存储单元中MOV direct,direct;1000 0101 源direct目的direct(源direct)目的direct将直接地址源direct所指出的片内存储单元中内容传送到直接地址目的 direct 所指出的片内存储单元中MOV direct,Ri;1000 011i direct(Ri)direct将间接寻址(Ri为R0或R1)所得的片内RAM单元内容传送到直接地址 direct 所指出的片内存储单元中MOV direct,#data;0111 0101 direct data#data direct将立即数传送到直接地址
19、direct 所指出的片内存储单元中4 4、以间接地址为目的操作数的指令(、以间接地址为目的操作数的指令(3 3条)条)汇编指令格式 机器码格式操作注释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)
20、所得的片内RAM单元中RidirectRn#dataACC图36 传送指令在片内存储器的操作功能5 5、十六位数据传送指令十六位数据传送指令(1(1条条)这条指令的功能是把这条指令的功能是把1616位常数送入位常数送入DPTRDPTR。DPTRDPTR由由DPHDPH和和DPLDPL组成。组成。汇编指令格式机器码格式操作注释MOV DPTR,#data16;1000 0000高位字节低位字节dataH DPHdataL DPL将高 8 位立即数dataH 送入 DPH,低 8 位立 即 数dataL 送入 DPL。6 6、查表指令(、查表指令(2 2条)条)汇编指令格式机器码格式操作注释MOV
21、C A,A+DPTR;1001 0011先(PC)+1 PC,后(A)+(DPTR)A(远程查表)MOVC A,A+PC;1000 0011先(PC)+1 PC,后(A)+(PC)A(近程查表)基地址寄存器+变址寄存器间接寻址PC+A(程序存储器0-64K)基地址寄存器+变址寄存 器间接寻址DPTR+A(程序存储器0-64K)A寄存器图图3-7 3-7 程序存贮器传送(查表)程序存贮器传送(查表)例:若:初始 ROM 内容 2000H00H2001H01H2002H09H2003H04H2004H06H2005H08H2006HFFH2007H66H2008H45H2009HABH200AH1
22、1H执行下面程序段后结果如何?执行下面程序段后结果如何?MOV DPTR,#2000H MOV DPTR,#2000H;(;(DPTRDPTR)=2000H=2000HMOV A ,#0AH MOV A ,#0AH ;(;(A A)=0AH=0AHMOVC A,A+DPTR MOVC A,A+DPTR ;(A A)=(A A)+(DPTRDPTR)=(200AH200AH)则:则:(A)=(200AH)=11H(A)=(200AH)=11H例例:若:初始 ROM 内容为:100FH01H1010H02H1011H03H1012H04H 所以,最后结果为:所以,最后结果为:(A)=02 (A)=
23、02 (R0)=02 (PC)=1004(R0)=02 (PC)=10047 7、累加器累加器A A与片外与片外RAMRAM传送指令传送指令(4(4条条)在 8051 指令系统中,CPU 对片外 RAM 的访问只能用寄存器间接寻址的方式,且仅有四条指令:汇编指令格式机器码格式操作注释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为片外数据存储器为片外数据存储器1616位地址
24、指针,寻址范围达位地址指针,寻址范围达64KB64KB。其功能是。其功能是DPTRDPTR所指定的片外数据存储器与累加器所指定的片外数据存储器与累加器A A之间之间传送数据。传送数据。第第1 1,3 3两条指令是用两条指令是用R0R0或或R1R1作低作低8 8位地址指位地址指针,由针,由P0P0口送出,寻址范围是口送出,寻址范围是256256字节。这两字节。这两条指令完成以条指令完成以R0R0或或R1R1为地址指针的片外数据存为地址指针的片外数据存储器与累加器储器与累加器A A之间的传送数据。之间的传送数据。上述四条指令的操作如图上述四条指令的操作如图3-83-8所示所示:累加器A寄存器间接寻
25、址 寄存器间接寻址 R1.R0DPTR(片外RAM 0-255B)(片外RAM 0-64KB)图 3-8 外部数据存储器传送操作例例:若:片内若:片内RAM(30H)=01HRAM(30H)=01H,片外,片外RAM RAM(30H)=02H(30H)=02H,执行下面程序段后的结果如何,执行下面程序段后的结果如何。MOV R1,#30H;(R1)=30H MOVX A,R1;(A)=02H MOV R0,A ;(R0)=(A)=02H MOV A,R1 ;(A)=(R1)=01H MOV R2,A ;(R2)=(A)=01H 8、栈操作指令(二条)堆栈:先进后出,后进先出。汇编指令格式机器码
26、格式操作注释PUSH direct;1100 0000 direct先(SP)+1 SP,后(direct)(SP)PUSH(入栈)指令PUSH direct;1101 0000direct先(SP)direct,后(SP)1 SPPOP(出栈)指令 例:例: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)(1)字节变换指令 将第二操作数所指定的工作寄存器 Rn(R0R7),直接寻址和间接寻址的单元
27、内容与累加器 A 中内容互换。其操作可表示为:A 一字节 源操作数 一字节例例:初始时:(A)=34H,(30H)=11HXCH A,30H ;(A)=11H,(30H)=34HMOV R1,#30H;(R1)=30HXCH A,R1 ;(A)=34H,(30H)=11H(2)(2)半字节交换指令半字节交换指令汇编指令格式机器码格式操作注释XCHD A,Ri;1101 011i(A03)(Ri)03)继续上例:XCHD A,R1;(A)=31H;(30H)=14H3.3.2 3.3.2 算术运算指令算术运算指令 1.1.不带进位加法指令不带进位加法指令(四条四条)2.2.带进位加法指令(四条)
28、带进位加法指令(四条)3.3.带借位减法指令(四条)带借位减法指令(四条)4.4.乘法指令(乘法指令(1 1条)条)5 5、除法指令(除法指令(1 1条)条)6 6、加加1 1指令(指令(5 5条)条)7 7、减减1 1指令指令(4(4条条)8 8、十进制调整指令十进制调整指令(1(1条条)1 1、不带进位加法指令不带进位加法指令(四条四条)汇编指令格式机器码格式操作注释ADD A,Rn;0010 1rrr(A)+(Rn)A将工作寄存器内容和累加器 A 中的数相加,“和”存放于累加器 A中ADD A,direct;0010 0101direct(A)+(direct)A将内部 RAM 单元内容
29、和累加器 A中的 数相 加,“和”存放于累加器A中ADD A,Ri;0010 011i(A)+(Ri)A将间接寻址(Ri为 R0 或 R1)所得的片内 RAM 单元中内容和累加器 A 中的数相加,“和”存放于累加器A中ADD A,#data;0010 0100data(A)+#data A将立即数的 8 位无符号二进制数和累加器 A 中的数相加,“和”存放于累加器A中注意:ADD指令只能用于内部RAM 单元的相加,若需要把片外RAM单元的数与A相加,则应先把外部RAM中的数送入内部RAM 单元中,再执行ADD指令。如:要求把片外RAM 单元(20H)=30H和片内RAM单元 (20H)=40H
30、相加,把相加的结果存入寄存器A中。MOV R0,#20H ;(R0)=20H MOVX A,R0 ;(A)=(R0)=(20H)=30H ADD A,20H ;(A)=(A)+(20H)=70H例:例:若(A)=0C3H ,(R0)=0AAH 执行 ADD A,R0 后,结果及 PSW=?(A):1100 0011 B +(R0):1010 1010 B 1 0110 1101 B 标志位:CY=1,AC=0,OV=1,P=1,即 PSW=85H 结果:(A)=6DH (R0)=0AAH 2 2 、带进位加法指令(四条)、带进位加法指令(四条)汇编指令格式机器码格式操作注释ADDC A,Rn;
31、0011 1rrr(A)+CY+(Rn)A将工作寄存器内容、CY 位和累加器 A 中的数相加,“和”存放于累加器A 中ADDC A,direct;0011 0101direct(A)+(direct)+CY A将内部 RAM 单元内容、CY 位和累加器 A 中的 数 相 加,“和”存放于累加器 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
32、位和累加器 A 中的数相加,“和”存放于累加器A中 本组指令的功能是同时把源操作数所指出的内容和进位标志未 CY 都加到累加器 A 中,结果存放到 A 中,其余的功能和上面的 ADD 指令相同。本组指令常用于多字节加法。例:设(A)=0C3H,(R0)=0AAH,(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。例:双字节加法编程,将
33、(30H),(31H)单元中的数与(40H),(41H)单元中的数相加,结果存于(30H),(31H)单元中,其中31H、41H为高8位字节单元,30H、40H为低8位字节单元。解:MOV A,30H ADD A,40H MOV 30H,A MOV A,31H ADDC A,41H MOV 31H,A3 3 、带借位减法指令(四条)、带借位减法指令(四条)汇编指令格式机器码格式操作注释SUBB A,Rn;1001 1rrr(A)-CY-(Rn)A将累加器 A 中的数减去 CY 位及工作寄存器内容“差”存放于累加器 A 中SUBB A,direct;1001 0101direct(A)-CY-(
34、direct)A将累加器 A 中的数减去 CY 位及内部RAM单 元 内 容“差”存放于累加器 A 中SUBB A,Ri;1001 011i(A)-CY-(Ri)A将累加器 A 中的数减去 CY 位及间接寻址(Ri 为 R0 或R1)所得的片内 RAM单 元 中 内 容,“差”存放于累加器 A 中SUBB A,#data;1001 0100data(A)-CY-#data A将累加器 A 中的数减去 CY 位及立即数的 8 位无符号二进制数,“差”存放于累加器 A 中 这组指令的功能是从累加器这组指令的功能是从累加器A A中减去中减去源操作数所指出的数及进位位源操作数所指出的数及进位位CYCY
35、的值的值,差保留在累加器差保留在累加器A A中。中。由于由于89C5189C51指令系统中没有不带借位指令系统中没有不带借位的减法指令,如需要的话,可以在的减法指令,如需要的话,可以在“SUBB”SUBB”指令前用指令前用“CLR C”CLR C”指令将指令将CyCy清清0 0,这一点必须注意。,这一点必须注意。例:设(例:设(A A)=0C9H,=0C9H,(R2R2)=54H,Cy=1=54H,Cy=1。执行指令执行指令“SUBB ASUBB A,R2”R2”的结果的结果 如何?如何?解:(A)=0C9H=11001001 B-)Cy=1=00000001 B 11001000 B -)(
36、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位积的低字节存放在 A 中,高字节存放中B中。该指令若乘积大于该指令若乘积大于0FFH0FFH,则,则OVOV置置1 1,否则,否则OVOV清清0 0。CyCy位总是被清位总是被清0 0。例:(A)=4EH,(B)=5DH,执行指令“MUL AB”后结果如何?
37、解:结果为:(结果为:(B B)=1CH=1CH,(A A)=56H=56H,表示积(表示积(BABA)=1C56H=1C56H,OV=1OV=1。5 5、除法指令(除法指令(1 1条)条)汇编指令格式机器码格式操作注释DIV AB ;1000 0100(A)/(B)的商 A(A)/(B)的余数 BA 中内容除以 B中内容,整数商存于 A 中,余数存于B中。该该指指令令执执行行后后,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)
38、=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=0 0。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
39、 (Ri)Ri 间接寻址所得的片内 RAM 单元中内容加1。INC DPTR;1010 0011(DPTR)+1 DPTRDPTR中内容加1该组指令的操作不影响 PSW。若原单元内容为 FFH,加 1 后溢出为 00H,也不影响 PSW标志。例:例:若:(若:(R1R1)=30H=30H,(,(30H30H)=11H=11H 求执行下面指令后的结果。求执行下面指令后的结果。INC R1INC R1;(30H)=12H(30H)=12HINC R1 INC R1;(R1)=31H(R1)=31H7 7、减减1 1指令指令(4(4条条)汇编指令格式机器码格式操作注释DEC A;0001 0100(
40、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。这组指令的功能是将操作数所指的单元内容减1,其操作不影响标志位CY。若原单元内容为00H,则减1后为FFH,也不会影响标志位。其他情况与加1指令相同。8 8、十进制调整指令十进制调整指令(1(1条条)汇编指令格式机器码格式操作注释DA A;1101 0100若(A0-3)9或AC
41、=1,则(A0-3)+6 A0-3同时,若(A4-7)9 或 CY=1,则(A4-7)+6 A4-7调整累加器内容为BCD 码。例例:设累加器设累加器A A内容为:内容为:01010110B01010110B(即为(即为5656的的BCDBCD码),寄存器码),寄存器R3R3的内容为的内容为01100111B01100111B(即(即6767的的BCDBCD码),码),CYCY内容为内容为1 1。求执行下列指令后的结果。求执行下列指令后的结果。ADDC AADDC A,R3R3;DA ADA A;再执行 DA A;因为 A 中的高四位值为 11,大于 9,低四位值为 14,也大于 9,所以内部
42、调整自动进行加 66H的操作:1011 1110 调整+)0110 0110 1 0010 0100 BCD:124即(A)=0010 0100=24BCD,CY=1;AC=1。3.3.3 3.3.3 逻辑操作指令逻辑操作指令 1.1.简单操作指令(简单操作指令(2 2条)条)2.2.移位指令(移位指令(4 4条)条)3.3.累加器半字节交换指令累加器半字节交换指令 4.4.逻辑逻辑“与与”指令(指令(6 6条)条)5.逻辑逻辑“或或”指令(指令(6条)条)6.6.逻辑逻辑“异或异或”指令(指令(6 6条)条)1.1.简单操作指令(简单操作指令(2 2条)条)汇编指令格式机器码格式操作注释CL
43、R A;1110 01000 A清累加器A 为 0,只影响标志位P。(1)(1)累加器累加器A A清清0 0指令指令(2)(2)累加器累加器A A取反指令取反指令汇编指令格式机器码格式操作注释CPL A;1111 0100(A)A 对累加器A 内容逐位取反,不影响标志位2.2.移位指令(移位指令(4 4条)条)汇 编 指 令 格 式机 器 码 格 式操 作注 释RL A;0010 0011 a7 a0累加器 A 的内容循环左移 一 位(1)(1)累加器累加器A A循环左移指令循环左移指令(2)(2)累加器累加器A A循环右移指令循环右移指令 汇编指令格式机器码格式操作注释RR A;0000 0
44、011 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连同进位位循环右移指令连同进位位循环右移指令 RRCRRCA A;汇编指令格式机器码格式操作注释RRC A;0001 0011 CY a7 a0将累加器 A 的内容连同进位位
45、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 的的 2 2 倍。倍。3.3.累加器半字节交换指令累加器半字节交换指令 汇编指令格式机器码格式操作注释SWAP A;1100 0100(A0-3)(A4-7)将累加器 A 的高低两半字节
46、交换。如如:A=FAH,执执行行指指令令 “SW AP A”后后,结结果果为为:(A)=AFH 4.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,#data;0101 0100#data(A)#data AANL direct,A;0101 0010direct(direct)(A)directANL direct,#data;0101 0011direct#data(d
47、irect)#data direct 这组指令中前四条指令是将累加器这组指令中前四条指令是将累加器A A的的内容和操作数所指出的内容按位进行逻内容和操作数所指出的内容按位进行逻辑辑“与与”,结果存放在,结果存放在A A中。中。后两条指令是将直接地址单元中的内容后两条指令是将直接地址单元中的内容和操作数所指出的单元的内容按位进行和操作数所指出的单元的内容按位进行逻辑逻辑“与与”,结果存入直接地址单元中。,结果存入直接地址单元中。若直接地址正好是若直接地址正好是I/OI/O端口,则为端口,则为“读读修改修改写写”操作。操作。5.逻辑逻辑“或或”指令(指令(6条)条)汇编指令格式机器码格式操作注释O
48、RL 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)directORL direct,#data;0100 0011direct#data(direct)#data direct 这组指令的功能是将两个指定的操作数这组指令的功能是将两个指定的操作数按位进行逻辑按位进行逻辑“或或”,前四条指令的操,前四条指令的操作结果存
49、放在累加器作结果存放在累加器A A中,后两条指令的中,后两条指令的操作结果存放在直接地址单元中。操作结果存放在直接地址单元中。6.6.逻辑逻辑“异或异或”指令(指令(6 6条)条)这组指令的功能是将两个指定的操作数这组指令的功能是将两个指定的操作数按位进行按位进行“异或异或”,前四条指令的结果,前四条指令的结果存放在累加器存放在累加器A A中,后两条指令的操作结中,后两条指令的操作结果存放在直接地址单元中果存放在直接地址单元中。这类指令的操作均只影响标志位这类指令的操作均只影响标志位P P。3.3.4 控制程序转移类指令控制程序转移类指令 1.无条件转移指令(无条件转移指令(4条条)2.空操作
50、指令(空操作指令(1条)条)3.条件转移指令(条件转移指令(8条)条)4.调用和返回指令调用和返回指令 一个计算机“智商”的高低,取决于它的转移类指令的多少,特别是条件转移指令的多少。计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序的运行方向,即将程序跳转到某个指定的地址再顺序执行下去。某些指令具有修改程序计数器 PC 内容的功能,因为 PC 内容是将要执行的下一条指令的地址,所以计算机执行这类指令就能够控制程序转移到新的地址上去执行。1、无条件转移指令(、无条件转移指令(4条)条)(1)短转移指令短转移指令 汇编指令格式机器码格式操作注释AJMP addr11
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。