《03第三章课件(指系统).ppt》由会员分享,可在线阅读,更多相关《03第三章课件(指系统).ppt(91页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、3.1 指令格式及常用符号指令格式及常用符号.2本章分为七节,主要介绍:本章分为七节,主要介绍:3.2 80C51的寻址方式的寻址方式.83.3 数据传送类指令(数据传送类指令(29条条)173.4 算术运算类指令(算术运算类指令(24条)条)353.5 逻辑运算与循环类指令(逻辑运算与循环类指令(24条)条)503.6 控制转移类指令(控制转移类指令(17条)条).593.7 位操作类指令(位操作类指令(17条)条).743.1 指令格式及常用符号指令格式及常用符号3.1.1 3.1.1 机器指令的机器指令的编码编码格式格式一、一、单单字字节节指令指令1 1、8 8位位编码仅为编码仅为操作操
2、作码码:如:如:INC A。该该指令的指令的编码为编码为:0000 0100B,其十六其十六进进制表示制表示为为04H,累加器,累加器A隐隐含在操作含在操作码码中。指令的功能是累加器中。指令的功能是累加器A的内容加的内容加1。注意:在指令中用注意:在指令中用“A”表示累加器,而用表示累加器,而用“ACC”表示累加器表示累加器对应对应的地址(的地址(E0H)。)。高高5位位为为操操作作码码,低低3位位为为存存放放操操作作数数的的寄寄存存器器编码。如:编码。如:MOV A,R0 编编码码为为1110 1000B,其其十十六六进进制制表表示示为为E8H(低低3位位000为为寄寄存存器器R0的的编编码
3、码)。功功能能是是将将当当前前工作寄存器工作寄存器R0中的数据传送到累加器中的数据传送到累加器A中。中。28位编码含有操作码和寄存器编码位编码含有操作码和寄存器编码二、双字二、双字节节指令指令 第一字第一字节节表示操作表示操作码码,第二个字第二个字节节表示参表示参与操作的数据或数据存放的地址。与操作的数据或数据存放的地址。如:如:MOV A,#50H 编码编码为为0111 0100B,0101 0000B。其十。其十六六进进制表示制表示为为74H,50H。功能功能是将立即数是将立即数“50H”传传送到累加器送到累加器A中。中。三、三字三、三字节节指令指令 指令的第一字指令的第一字节节表示表示该
4、该指令的操作指令的操作码码,后后两个字两个字节节表示参与操作的数据或数据存放的表示参与操作的数据或数据存放的地址。如:地址。如:MOV 20HMOV 20H,#50H#50H 编码编码为为0111 0101B0111 0101B,0010 0000B0010 0000B,0101 0101 0000B0000B。其十六。其十六进进制表示制表示为为75H75H,20H20H,50H50H。功能功能是将立即数是将立即数“50H50H”传传送到内部送到内部RAM RAM 的的20H20H单单元中元中。3.1.2 3.1.2 符号指令的格式符号指令的格式一般格式为:操作助记符操作助记符 目的操作数目的
5、操作数,源操作数,源操作数;注释;注释 多多数数指指令令为为两两操操作作数数指指令令;当当指指令令操操作作数数隐隐含含在在操操作作助助记记符符中中时时,在在形形式式上上这这种种指指令令无无操操作作数数;另另有有一一些些指指令令为为单单操操作作数数指指令令或或三三操操作作数数指指令令。指指令令的的一一般般格格式式中中使使用用了了可可选选择择符符号号“”,包包含含的的内内容因指令的不同可以有或无。容因指令的不同可以有或无。在在两两个个操操作作数数的的指指令令中中,通通常常目目的的操操作作数数写写在在左边,源操作数写在右边左边,源操作数写在右边。如:如:ANL A,40H 功能功能是将立即数是将立即
6、数“40H”同累加器同累加器A中的数中的数进行进行“与与”操作,结果送回累加器。操作,结果送回累加器。ANL为为“与与”操作的助记符,立即数操作的助记符,立即数“40H”为源操作数,累加器为源操作数,累加器A为目的操作数。为目的操作数。注:在指令中,多数情况下累加器用注:在指令中,多数情况下累加器用“A”表示,仅在直接寻址方式中,用表示,仅在直接寻址方式中,用“ACC”表示表示累加器在累加器在SFR区的具体地址区的具体地址E0H。试比较,指令试比较,指令MOV A,30H的机器码为的机器码为74H、30H;而指令;而指令MOV ACC,30H的机的机器码为器码为75H、E0H、30H。3.2
7、80C51的的寻寻址方式址方式寻找(形成)操作数或指令地址的方式寻找(形成)操作数或指令地址的方式。80C51的的寻址方式有七种寻址方式有七种。即:。即:寄存器寻寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、直接寻址、寄存器间接寻址、立即寻址、址、变址寻址、相对寻址和位寻址。变址寻址、相对寻址和位寻址。若不特别说明,我们后面提到的寻址方式若不特别说明,我们后面提到的寻址方式均指均指源操作数源操作数的寻址方式。的寻址方式。操作数存放在寄存器中,操作数存放在寄存器中,指令中直接给出该寄存器名称的指令中直接给出该寄存器名称的寻址方式。寻址方式。可以获得较高的传送和运算速度。可以获得较高的传送和运算
8、速度。3.2.1 3.2.1 寄存器寄存器寻寻址址如:MOV A,R0 寄存器可以是:寄存器可以是:R0R7;A;B(以(以AB寄存器对形式出寄存器对形式出现);现);DPTR。指令操作码之后的字节存放的是操作数的地址,指令操作码之后的字节存放的是操作数的地址,操作数本身存放在该地址指示的存储单元中操作数本身存放在该地址指示的存储单元中的寻的寻址方式称为直接寻址。址方式称为直接寻址。3.2.2 3.2.2 直接直接寻寻址址如:MOV A,50H 直接寻址中的直接寻址中的SFR经常采用符号形式表示。经常采用符号形式表示。寻址空间为寻址空间为:片内:片内RAM低低128字节;字节;SFR。寄存器中
9、的内容为地址,从该地址去取操寄存器中的内容为地址,从该地址去取操作数作数的寻址方式称为寄存器间接寻址的寻址方式称为寄存器间接寻址。3.2.3 3.2.3 寄存器寄存器间间接接寻寻址址 寻址的存储空间为片内寻址的存储空间为片内RAM或片外或片外RAM。片内片内RAM的数据传送采用的数据传送采用“MOV”类指令,间接寻址寄存类指令,间接寻址寄存器采用寄存器器采用寄存器R0或或R1(堆栈操作时采用(堆栈操作时采用SP););片外片外RAM的数据传送采用的数据传送采用“MOVX”类指令,这时间接寻类指令,这时间接寻址寄存器有两种选择,一是采用址寄存器有两种选择,一是采用R0和和R1作间址寄存器,作间址
10、寄存器,这时这时R0或或R1提供低提供低8位地址(外部位地址(外部RAM多于多于256字节采用字节采用页面方式访问时,可由页面方式访问时,可由P2口未使用的口未使用的I/O引脚提供高位地引脚提供高位地址);二是采用址);二是采用DPTR作为间址寄存器。作为间址寄存器。寄存器间接寻址对应的空间为:寄存器间接寻址对应的空间为:片内片内RAM(采用(采用R0,R1或或SP););片外片外RAM(采用(采用R0,R1或或DPTR)。)。如:MOV A,R0 MOVX A,DPTR 指令编码中直接给出操作数指令编码中直接给出操作数的寻址方式称为立即寻址。的寻址方式称为立即寻址。在这种寻址方式中,紧跟在操
11、作码之后的操作数称为立即在这种寻址方式中,紧跟在操作码之后的操作数称为立即数。立即数可以为一个字节,也可以是两个字节,并要用数。立即数可以为一个字节,也可以是两个字节,并要用符号符号“”来标识。由于立即数是一个常数,所以只能作来标识。由于立即数是一个常数,所以只能作为源操作数。为源操作数。立即寻址所对应的寻址空间为:立即寻址所对应的寻址空间为:ROM 3.2.4 3.2.4 立即立即寻寻址址如:MOV A,50H 以一个基地址加上一个偏移量地址形成操作数地址以一个基地址加上一个偏移量地址形成操作数地址的寻的寻址方式称为变址寻址。在这种寻址方式中,以数据指针址方式称为变址寻址。在这种寻址方式中,
12、以数据指针DPTR或程序计数器或程序计数器PC作为基址寄存器,累加器作为基址寄存器,累加器A作为偏作为偏移量寄存器,基址寄存器的内容与偏移量寄存器的内容之移量寄存器,基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址。和作为操作数地址。变址寻址所对应的寻址空间为:变址寻址所对应的寻址空间为:ROM3.2.5 3.2.5 变变址址寻寻址址如:MOVC A,A+DPTR 相对寻址是以程序计数器相对寻址是以程序计数器PC的当前值的当前值(指读出该(指读出该2字节字节或或3字节的跳转指令后,字节的跳转指令后,PC指向的下条指令的地址)指向的下条指令的地址)为基为基准,加上指令中给出的相对偏移量准,
13、加上指令中给出的相对偏移量 rel 形成目标地址形成目标地址的寻的寻址方式址方式。rel 是一个带符号的是一个带符号的8位二进制数,取值范围是位二进制数,取值范围是128127,以补码形式置于操作码之后存放。,以补码形式置于操作码之后存放。3.2.6 3.2.6 相相对寻对寻址址如:JC rel;rel75H 对位地址中的内容进行操作对位地址中的内容进行操作的寻址方式称为位的寻址方式称为位寻址。采用位寻址指令的操作数是寻址。采用位寻址指令的操作数是8位二进制数中位二进制数中的某一位。指令中给出的是位地址。位寻址方式的某一位。指令中给出的是位地址。位寻址方式实质属于位的直接寻址。实质属于位的直接
14、寻址。寻址空间为:片内寻址空间为:片内RAM的的20H2FH单元中的单元中的128可寻址位;可寻址位;SFR的可寻址位。的可寻址位。3.2.7 3.2.7 位位寻寻址址 习惯上,特殊功能寄存器的寻址位常用符号位习惯上,特殊功能寄存器的寻址位常用符号位地址表示。地址表示。如:如:CLR ACC.0 MOV 30H,C3.3 数据数据传传送送类类指令(指令(29条)条)传送类指令占有较大的比重。数据传送是传送类指令占有较大的比重。数据传送是进行数据处理的最基本的操作,这类指令进行数据处理的最基本的操作,这类指令一般一般不影响标志寄存器不影响标志寄存器PSW的状态的状态。传送类指令可以分成两大类传送
15、类指令可以分成两大类。一是采用。一是采用MOV操作符,称为一般传送指令;二是采用操作符,称为一般传送指令;二是采用非非MOV操作符,称为特殊传送指令,如:操作符,称为特殊传送指令,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及及SWAP。3.3.1 3.3.1 一般一般传传送指令送指令一、一、16位传送位传送 这条指令的功能是将源操作数这条指令的功能是将源操作数data16(通(通常是地址常数)送入目的操作数常是地址常数)送入目的操作数DPTR中。源中。源操作数的寻址方式为立即寻址。操作数的寻址方式为立即寻址。例如:例如:执行指令执行指令 MOV DPTR,#1234H 后后 (
16、DPH)=12H,(,(DPL)=34H。二、二、8位传送位传送 在在5种源字节中,只有种源字节中,只有data不能用作目的字节。不能用作目的字节。所以可以用所以可以用4种目的字节为基础构造种目的字节为基础构造4类指令。相应类指令。相应的源字节选择依据是:的源字节选择依据是:源字节与目的字节不相同(除源字节与目的字节不相同(除direct外);外);寄存器寻址与寄存器间接寻址间不相互传送寄存器寻址与寄存器间接寻址间不相互传送。1以以A为目的为目的 这组指令的功能是把源字节送入累加器中。源字这组指令的功能是把源字节送入累加器中。源字节的寻址方式分别为直接寻址、寄存器间接寻址、节的寻址方式分别为直
17、接寻址、寄存器间接寻址、寄存器寻址和立即寻址四种基本寻址方式。寄存器寻址和立即寻址四种基本寻址方式。例:若(例:若(R1)=20H,(,(20H)=55H,执行指,执行指令令 MOV A,R1 后,(后,(A)=55H。2以以Rn 为目的为目的 这组指令的功能是把源字节送入寄存器这组指令的功能是把源字节送入寄存器Rn中。中。源字节的寻址方式分别为立即寻址、直接寻址和源字节的寻址方式分别为立即寻址、直接寻址和寄存器寻址(由于目的字节为工作寄存器,所以寄存器寻址(由于目的字节为工作寄存器,所以源字节不能是工作寄存器及其间址方式寻址)。源字节不能是工作寄存器及其间址方式寻址)。例:若(例:若(50H
18、)=40H,执行指令,执行指令 MOV R6,50H 后,(后,(R6)=40H。3以以direct 为目的为目的 这组指令的功能是把源字节送入这组指令的功能是把源字节送入direct中。源中。源字节的寻址方式分别为立即寻址、直接寻址、字节的寻址方式分别为立即寻址、直接寻址、寄存器间接寻址和寄存器寻址。寄存器间接寻址和寄存器寻址。例:若(例:若(R1)=50H,(50H)=18H,执行指令,执行指令MOV 40H,R1 后后,(40H)=18H。4以以Ri为目的为目的 这组指令的功能是把源字节送入这组指令的功能是把源字节送入Ri内容为地址的内容为地址的单元,源字节寻址方式为立即寻址、直接寻址和
19、单元,源字节寻址方式为立即寻址、直接寻址和寄存器寻址(因目的字节采用寄存器间接寻址,寄存器寻址(因目的字节采用寄存器间接寻址,故源字节不能是寄存器及其间址寻址)。故源字节不能是寄存器及其间址寻址)。例:若(例:若(R1)=30H,(,(A)=20H,执行指令,执行指令 MOV R1,A 后,(后,(30H)=20H。3.3.2 3.3.2 特殊特殊传传送指令送指令特殊传送指令的操作符为:特殊传送指令的操作符为:MOVC、MOVX、PUSH、POP、XCH、XCHD和和 SWAP。功能分别为:功能分别为:ROM查表、外部查表、外部RAM读读写、堆栈操作和交换指令写、堆栈操作和交换指令 一、一、R
20、OM查表查表 1DPTR内容为基址内容为基址 MOVC A,A+DPTR ;A(A)+(DPTR)该指令首先执行该指令首先执行16位无符号数加法,将获得的基址与变址位无符号数加法,将获得的基址与变址之和作为之和作为16位的程序存储器地址,然后将该地址单元的内容位的程序存储器地址,然后将该地址单元的内容传送到累加器传送到累加器A。指令执行后。指令执行后DPTR的内容不变。的内容不变。2PC内容为基址内容为基址MOVC A,A+PC ;A(A)+(PC)取出该单字节指令后取出该单字节指令后PC的内容增的内容增1,以增,以增1后的当前值去后的当前值去执行执行16位无符号数加法,将获得的基址与变址之和
21、作为位无符号数加法,将获得的基址与变址之和作为16位的程序存储器地址。然后将该地址单元的内容传送到累加位的程序存储器地址。然后将该地址单元的内容传送到累加器器A。指令执行后。指令执行后PC的内容不变。的内容不变。二、读写片外二、读写片外RAM 1读片外读片外RAM MOVX A,DPTR ;A(DPTR)MOVX A,Ri ;A(Ri)第一条指令以第一条指令以16位位DPTR为间址寄存器读为间址寄存器读片外片外RAM,可以寻址整个,可以寻址整个64K字节的片外字节的片外RAM空间。指令执行时,在空间。指令执行时,在DPH中的高中的高8位位地址由地址由P2口输出,在口输出,在DPL中的低中的低8
22、位地址由位地址由P0口分时输出,并由口分时输出,并由ALE信号锁存在地址锁信号锁存在地址锁存器中。存器中。第二条指令以第二条指令以R0或或R1为间址寄存器,也为间址寄存器,也可以读整个可以读整个64K字节的片外字节的片外RAM空间。指令空间。指令执行时,低执行时,低8位地址在位地址在R0或或R1中由中由P0口分时口分时输出,输出,ALE信号将地址信息锁存在地址锁存信号将地址信息锁存在地址锁存器中(多于器中(多于256字节的访问,高位地址由字节的访问,高位地址由P2口提供)。口提供)。读片外读片外RAM的的MOVX操作,使操作,使P3.7引脚引脚输出的信号选通片外输出的信号选通片外RAM单元,相
23、应单元的单元,相应单元的数据从数据从P0口读入累加器中。口读入累加器中。2写片外写片外RAMMOVX DPTR,A ;(;(DPTR)(A)MOVX Ri,A ;(;(Ri)(A)第一条指令以第一条指令以16位位DPTR为间址寄存器写外为间址寄存器写外部部RAM,可以寻址整个,可以寻址整个64K字节的片外字节的片外RAM空间。指令执行时,在空间。指令执行时,在DPH中高中高8位地址由位地址由P2口输出,在口输出,在DPL中的低中的低8位地址,由位地址,由P0口分时口分时输出,并由输出,并由ALE信号锁存在地址锁存器中。信号锁存在地址锁存器中。第二条指令以第二条指令以R0或或R1为间址寄存器,也
24、为间址寄存器,也可以写整个可以写整个64K字节的片外字节的片外RAM空间。指令空间。指令执行时,低执行时,低8位地址在位地址在R0或或R1中由中由P0口分时口分时输出,输出,ALE信号将地址信息锁存在地址锁存信号将地址信息锁存在地址锁存器中(多于器中(多于256字节的访问,高位地址由字节的访问,高位地址由P2口提供)。口提供)。写片外写片外RAM的的“MOVX”操作,使操作,使P3.6引脚引脚的信号有效,累加器的信号有效,累加器A的内容从的内容从P0口输出并口输出并写入选通的相应片外写入选通的相应片外RAM单元。单元。(外部外部I/O口操作类同)口操作类同)三、堆栈操作三、堆栈操作堆栈是在内部
25、堆栈是在内部RAM中按中按“后进先出后进先出”的规则组织的一片的规则组织的一片存储区。此区的一端固定,称为栈底;另一端是活动的,称存储区。此区的一端固定,称为栈底;另一端是活动的,称为栈顶。栈顶的位置(地址)由栈指针为栈顶。栈顶的位置(地址)由栈指针SP指示(即指示(即SP的内的内容是栈顶的地址)。容是栈顶的地址)。在在80C51中,堆栈的中,堆栈的生长方向是向上生长方向是向上的(地址增大)。的(地址增大)。系统复位系统复位时,时,SP的内容为的内容为07H。通常用户应在系统初始化。通常用户应在系统初始化时对时对SP重新设置。重新设置。SP的值越小,堆栈的深度越深。的值越小,堆栈的深度越深。P
26、USH direct ;SP(SP)1,(,(SP)(direct)POP direct ;direct(SP),),SP(SP)1 例:若(例:若(SP)=07H,(,(40H)=88H,执行指令,执行指令 PUSH 40H 后,(后,(SP)=08H,(,(08H)=88H。四、数据交换四、数据交换例:若(例:若(R0)=80H,(,(A)=20H。执行指令。执行指令 XCH A,R0 后,(后,(A)=80H,(,(R0)=20H。对于单一的对于单一的MOV类指令,传送通常是单向的,即数据是类指令,传送通常是单向的,即数据是从一处(源)到另一处(目的)的拷贝。而交换类指令完成从一处(源)
27、到另一处(目的)的拷贝。而交换类指令完成的传送是双向的,是两字节间或两半字节间的双向交换的传送是双向的,是两字节间或两半字节间的双向交换。1字节交换字节交换2半字节交换半字节交换 XCHD指令指令的功能是间址操作数的低半字节与的功能是间址操作数的低半字节与A的的低半字节内容互换。低半字节内容互换。SWAP指令指令的功能是累加器的功能是累加器 的高低的高低4位互换。位互换。例:若(例:若(R0)30H,(,(30H)67H,(A)20H。执行指令。执行指令 XCHD A,R0 指令后,(指令后,(A)27H,(,(30H)60H。若(若(A)30H,执行指令,执行指令SWAP A后,(后,(A)
28、03H。3.4 算算术术运算运算类类指令(指令(24条)条)算术运算指令可以完成加、减、乘、除及加加算术运算指令可以完成加、减、乘、除及加加1和减和减1等等运算。这类指令多数以运算。这类指令多数以A为源操作数之一,同时又使为源操作数之一,同时又使A为目的为目的操作数。操作数。进位(借位)标志进位(借位)标志CY为无符号整数的多字节加为无符号整数的多字节加法、减法、移位等操作提供了方便;法、减法、移位等操作提供了方便;溢出标志溢出标志OV可方便的控制补码运算;可方便的控制补码运算;辅助进位标志辅助进位标志AC用于用于BCD码运算。算术运算操作将影响码运算。算术运算操作将影响PSW中的中的OV、C
29、Y、AC和和P等。等。3.4.1 3.4.1 加法加法一、不带进位加一、不带进位加CY:和的:和的D7位有进位时,(位有进位时,(CY)=1;否则,(;否则,(CY)=0。AC:和的:和的D3位有进位时,(位有进位时,(AC)=1;否则,(;否则,(AC)=0。OV:和的:和的D7、D6位只有一个有进位时,(位只有一个有进位时,(OV)=1;溢出表示运算的结;溢出表示运算的结果超出了数值所允许的范围。果超出了数值所允许的范围。如:两个正数相加结果为负数或两个负数相如:两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果,此时(加结果为正数时属于错误结果,此时(OV)=1。P:累加器:累
30、加器ACC中中“1”的个数为奇数时,(的个数为奇数时,(P)=1;为偶数时,(;为偶数时,(P)=0。例例 若(若(A)=84H,(,(30H)=8DH,执行指令,执行指令 ADD A,30H 之后,由于:之后,由于:即:(即:(A)=11H,(,(CY)=1,(,(AC)=1,(OV)=1(D7有进位,有进位,D6无进位),(无进位),(P)=0。二、带进位加二、带进位加 指令的指令的功能功能是把源操作数与累加器是把源操作数与累加器A的内容相加的内容相加再与进位标志再与进位标志CY的值相加,结果送入目的操作数的值相加,结果送入目的操作数A中。中。加的进位标志加的进位标志CY的值的值是在该指令
31、执行之前已经是在该指令执行之前已经存在的进位标志的值,而不是执行该指令过程中产存在的进位标志的值,而不是执行该指令过程中产生的进位生的进位。三、增三、增1 1指令的指令的功能功能是把源操作数的内容加是把源操作数的内容加 1,结果再,结果再送回原单元。这些指令仅送回原单元。这些指令仅 INC A 影响影响P标志。其标志。其余指令都不影响标志位的状态。余指令都不影响标志位的状态。四、十进制调整四、十进制调整 指令的功能是对累加器指令的功能是对累加器A中刚进行的两个中刚进行的两个BCD码的加法的结果进行十进制调整。码的加法的结果进行十进制调整。两个压缩的两个压缩的BCD码按二进制相加后,必须码按二进
32、制相加后,必须经过调整方能得到正确的压缩经过调整方能得到正确的压缩BCD码的和码的和。DA A 调整要完成的任务是:调整要完成的任务是:(1)当累加器)当累加器A中的中的低低4位数出现了非位数出现了非BCD码(码(10101111)或低)或低4位产生进位位产生进位(AC=1),则应在低),则应在低4位加位加6调整,以产调整,以产生低生低4位正确的位正确的BCD结果。结果。(2)当累加器)当累加器A中的中的高高4位位数出现了非数出现了非BCD码(码(10101111)或高)或高4位产生进位位产生进位(CY=1),则应在高),则应在高4位加位加6调整,以产生调整,以产生高高4位正确的位正确的BCD
33、结果。结果。十进制调整指令执行后,十进制调整指令执行后,PSW中的中的CY表表示结果的百位值示结果的百位值。例例 若(若(A)0101 0110B,表示的,表示的BCD码为,码为,(R2)0110 0111B,表示的,表示的BCD码为,(码为,(CY)0。执。执行以下指令:行以下指令:ADD A,R2DA A由于(由于(A)0010 0011B,即,且(,即,且(CY)1,即,即结果为结果为BCD数数123。应该注意,应该注意,DA指令不能对减法进行十进制调整。指令不能对减法进行十进制调整。3.4.2 3.4.2 减法减法一、带借位减一、带借位减CY:差的位:差的位7需借位时,(需借位时,(C
34、Y)=1;否则,(;否则,(CY)=0。AC:差的位:差的位3需借位时,(需借位时,(AC)=1;否则,(;否则,(AC)=0。OV:若位:若位6有借位而位有借位而位7无借位或位无借位或位7有借位而位有借位而位6无借位无借位时,(时,(OV)=1。如要用此组指令完成不带借位减法,只需先清如要用此组指令完成不带借位减法,只需先清CY为为 0。例例 若(若(A)=C9H,(,(R2)=54H,(,(CY)=1,执行指令,执行指令 SUBB A,R2 之后,由于:之后,由于:即:(即:(A)=74H,(,(CY)=0,(,(AC)=1,(OV)=1(位(位6有借位,位有借位,位7无借位),(无借位)
35、,(P)=0。二、减二、减1这组指令的功能是把操作数的内容减这组指令的功能是把操作数的内容减 1,结果,结果再送回原单元。再送回原单元。这组指令仅这组指令仅 DEC A 影响影响P标志。其余指令都标志。其余指令都不影响标志位的状态。不影响标志位的状态。3.4.3 3.4.3 乘法乘法 MUL AB ;累加器;累加器A与与B寄存器相乘寄存器相乘 该指令的该指令的功能功能是将累加器是将累加器A与寄存器与寄存器B中的无中的无符号符号8位二进制数相乘位二进制数相乘,乘积的低,乘积的低8位留在累加器位留在累加器A中,高中,高8位存放在寄存器位存放在寄存器B中。中。当乘积大于当乘积大于FFH时,溢出标志位
36、(时,溢出标志位(OV)=1。而标志而标志CY总是被清总是被清0。例例 若(若(A)=50H,(,(B)=A0H,执行指令,执行指令 MUL AB 之后,(之后,(A)=00H,(,(B)=32H,(OV)=1,(,(CY)=0。3.4.4 3.4.4 除法除法 DIV AB ;累加器;累加器A除以寄存器除以寄存器B 该指令的该指令的功能功能是将累加器是将累加器A中的无符号中的无符号8位二位二进制数除以寄存器进制数除以寄存器B中的无符号中的无符号8位二进制数位二进制数,商商的整数部分存放在累加器的整数部分存放在累加器A中,余数部分存放在寄中,余数部分存放在寄存器存器B中中。当除数为当除数为0时
37、,则结果的时,则结果的A和和B的内容不定,且溢的内容不定,且溢出标志位(出标志位(OV)=1。而标志。而标志CY总是被清总是被清0。例例 若(若(A)=FBH(251),),(B)=12H(18),执行指令),执行指令 DIV AB 之后,之后,(A)=0DH,(,(B)=11H,(,(OV)=0,(CY)=0。3.5 逻辑运算与循环类指令(逻辑运算与循环类指令(24条)条)逻辑运算指令逻辑运算指令可以完成与、或、异或、清可以完成与、或、异或、清0和取反操作,当以累加器和取反操作,当以累加器A为目的操作数时,为目的操作数时,对对P标志有影响;标志有影响;累加器清累加器清0操作对操作对P标志有影
38、响。标志有影响。循环指令循环指令是对累加器是对累加器A的循环移位操作,的循环移位操作,包括左、右方向以及带与不带进位位等移位包括左、右方向以及带与不带进位位等移位方式,移位操作时,带进位的循环移位对方式,移位操作时,带进位的循环移位对CY和和P标志有影响;标志有影响;3.5.1 3.5.1 逻辑逻辑与与 前前2条指令的功能是把源操作数与直接地址指示的条指令的功能是把源操作数与直接地址指示的单元内容相与,结果送入直接地址指示的单元。单元内容相与,结果送入直接地址指示的单元。后后4条指令的功能是把源操作数与累加器条指令的功能是把源操作数与累加器A的内容相的内容相与,结果送入累加器与,结果送入累加器
39、A中。中。例例 若(若(A)=C3H,(,(R0)=AAH,执行指令,执行指令 ANL A,R0 之后,(之后,(A)=82H。前前2条指令的功能是把源操作数与直接地址指示的单元条指令的功能是把源操作数与直接地址指示的单元内容相或,结果送入直接地址指示的单元。内容相或,结果送入直接地址指示的单元。后后4条指令的功能是把源操作数与累加器条指令的功能是把源操作数与累加器A的内容相或,的内容相或,结果送入累加器结果送入累加器A中。中。3.5.2 3.5.2 逻辑逻辑或或例例 若(若(A)=C3H,(,(R0)=55H,执行指令,执行指令ORL A,R0 之后,(之后,(A)=D7H。3.5.3 3.
40、5.3 逻辑逻辑异或异或 前前2条指令的功能是把源操作数与直接地址指示的单元内容条指令的功能是把源操作数与直接地址指示的单元内容异或,结果送入直接地址指示的单元。异或,结果送入直接地址指示的单元。后后4条指令的功能是把源操作数与累加器条指令的功能是把源操作数与累加器A的内容异或,结的内容异或,结果送入累加器果送入累加器A中。中。例例 若(若(A)=C3H,(,(R0)=AAH,执行指令,执行指令 XRL A,R0 之后,(之后,(A)=69H。3.5.4 3.5.4 累加器清累加器清0 0和取反和取反 ;A 0;A 这两条指令的功能分别是把累加器这两条指令的功能分别是把累加器A的内容清的内容清
41、 0 和取反,结果仍在和取反,结果仍在A中。中。例例 若(若(A)=A5H,执行指令,执行指令 CLR A 之后,之后,(A)=00H。3.5.5 3.5.5 累加器循累加器循环环移位移位 有时有时“累加器累加器A内容乘内容乘2”的任务可以的任务可以利用指令利用指令RLC A方便地完成。方便地完成。例:若(例:若(A)=BDH=1011 1101B,(,(CY)0。执行指令。执行指令RLC A后,(后,(CY)=1,(,(A)=0111 1010B=7AH,(,(CY)1。结果为:结果为:17AH(378)2BDH(189)。)。3.6 控制控制转转移移类类指令(指令(17条)条)通常情况下,
42、程序的执行是顺序进行通常情况下,程序的执行是顺序进行的,但也可以根据需要的,但也可以根据需要改变程序的执行改变程序的执行顺序顺序,这种情况,这种情况称作程序转移称作程序转移。控制程序的转移要利用转移指令。控制程序的转移要利用转移指令。80C51的转移指令有的转移指令有无条件转移、条件无条件转移、条件转移及子程序调用与返回等转移及子程序调用与返回等。一、一、短跳转短跳转 3.6.1 无条件转移无条件转移 AJMP addr11 ;PC(PC)+2,;PC100 addr11 该指令执行时,先将该指令执行时,先将PC的内容加的内容加2(这是(这是PC指向指向的是的是AJMP的下一条指令),然后把指
43、令中的下一条指令),然后把指令中11位地址位地址码传送到码传送到PC100,而,而PC1511保持原内容不变。保持原内容不变。在目标地址的在目标地址的11位中,前位中,前3位为页地址,后位为页地址,后8位为页位为页内地址(每页含内地址(每页含256个单元)。个单元)。当前当前PC的高的高5位(即下条指令的存储地址的高位(即下条指令的存储地址的高5位)位)可以确定可以确定32个个2KB段之一。所以,段之一。所以,AJMP指令的转移指令的转移范围为包含范围为包含AJMP下条指令在内的下条指令在内的2KB区间。区间。二、二、长跳转长跳转 LJMP addr16 ;PC addr16 第一字节为操作码
44、,该指令执行时,将指令的第一字节为操作码,该指令执行时,将指令的第二、三字节地址码分别装入指令计数器第二、三字节地址码分别装入指令计数器PC的的高高8位和低位和低8位中,程序无条件地转移到指定的目位中,程序无条件地转移到指定的目标地址去执行。标地址去执行。LJMP提供的是提供的是16位地址,因此程序可以转向位地址,因此程序可以转向64KB的程序存储器地址空间的任何单元。的程序存储器地址空间的任何单元。例例 若标号若标号“NEWADD”表示转移目标地址表示转移目标地址1234H。执行。执行指令指令 LJMP NEWADD 时,两字节的目标地址将装入时,两字节的目标地址将装入PC中,使程序转向目标
45、地址中,使程序转向目标地址 1234H 处运行。处运行。三、三、相对转移相对转移 SJMP rel ;PC(PC)+2,PC(PC)+rel 第一字节为操作码,第二字节为相对偏移量第一字节为操作码,第二字节为相对偏移量 rel,rel 是一是一个带符号的偏移字节数(个带符号的偏移字节数(2的补码),取值范围为的补码),取值范围为 127 128(00H7FH对应表示对应表示0 127,80HFFH对应表示对应表示1281)。负数表示反向转移,正数表示正向转移。)。负数表示反向转移,正数表示正向转移。rel 可以是一个转移目标地址的标号,由汇编程序在汇编过可以是一个转移目标地址的标号,由汇编程序
46、在汇编过程中自动计算偏移地址,并填入指令代码中。在手工汇编时,程中自动计算偏移地址,并填入指令代码中。在手工汇编时,可用转移目标地址减转移指令所在的源地址,再减转移指令字可用转移目标地址减转移指令所在的源地址,再减转移指令字节数节数2得到偏移字节数得到偏移字节数rel。例例 若标号若标号“NEWADD”表示转移目标地址表示转移目标地址0123H,PC的当的当前值为前值为0100H。执行指令。执行指令 SJMP NEWADD 后,程序将转向后,程序将转向 0123H 处执行(此时处执行(此时re l=0123H(01002)=21H)。)。四、四、散转移散转移 JMP A+DPTR ;PC(PC
47、)+1,PC(A)+(DPTR)该指令具有散转功能,可以代替许多判别跳转指令。其转移地址该指令具有散转功能,可以代替许多判别跳转指令。其转移地址由数据指针由数据指针DPTR的的16位数和累加器位数和累加器A的的8位数进行无符号数相加形位数进行无符号数相加形成,并直接装入成,并直接装入PC。该指令执行时对标志位无影响。该指令执行时对标志位无影响。例例 有一段程序如下:有一段程序如下:MOV DPTR,#TABLE JMP A+DPTRTABLE:AJMP ROUT0 AJMP ROUT1 AJMP ROUT2 AJMP ROUT3当(当(A)=00H时,程序将转到时,程序将转到 ROUT0处执行
48、;当(处执行;当(A)=02H时,时,程序将转到程序将转到 ROUT1处执行;其余类推。处执行;其余类推。3.6.2 条件转移条件转移 一、一、累加器判累加器判0转移转移 指令的功能是对累加器指令的功能是对累加器A的内容为的内容为 0 和不为和不为 0 进行检测并转移。当进行检测并转移。当不满足各自的条件时,程序继续往下执行。当各自的条件满足时,程序不满足各自的条件时,程序继续往下执行。当各自的条件满足时,程序转向指定的目标地址。目标地址的计算与转向指定的目标地址。目标地址的计算与SJMP指令情况相同。指令执指令情况相同。指令执行时对标志位无影响。行时对标志位无影响。例例 若累加器若累加器A原
49、始内容为原始内容为00H,则:,则:JNZ L1 ;由于;由于A的内容为的内容为00H,所以程序往下执行,所以程序往下执行 INC A ;JNZ L2 ;由于;由于A的内容已不为的内容已不为0,所以程序转向,所以程序转向L2 处执行处执行 二、二、比较不相等转移比较不相等转移 这组指令的功能是对指定的目的字节和源字节进行比这组指令的功能是对指定的目的字节和源字节进行比较,若它们的值不相等则转移,转移的目标地址为当前的较,若它们的值不相等则转移,转移的目标地址为当前的PC值加值加3后,再加指令的第三字节偏移量后,再加指令的第三字节偏移量rel;若目的字节的内;若目的字节的内容大于源字节的内容,则
50、进位标志清容大于源字节的内容,则进位标志清0;若目的字节的内容小;若目的字节的内容小于源字节的内容,则进位标志置于源字节的内容,则进位标志置1;若目的字节的内容等于源;若目的字节的内容等于源字节的内容,程序将继续往下执行。字节的内容,程序将继续往下执行。三、三、减减1不为不为0转移转移 这组指令每执行一次,便将目的操作数的循环控制单元的这组指令每执行一次,便将目的操作数的循环控制单元的内容减内容减1,并判其是否为,并判其是否为 0。若不为。若不为0,则转移到目标地址继,则转移到目标地址继续循环;若为续循环;若为0,则结束循环,程序往下执行。,则结束循环,程序往下执行。例例 有一段程序如下:有一