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

下载本文档

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

文档简介

1、1第第3 3章章 80C5180C51的指令系统的指令系统 本章内容本章内容23.1指令系统简介指令系统简介1) 指令概述指令概述 一台微机所具有的所有指令的集合,就构成了指令系统。一台微机所具有的所有指令的集合,就构成了指令系统。指令系统越丰富,说明指令系统越丰富,说明CPU的功能越强。的功能越强。2)机器指令机器指令 一台微机能执行什么样的操作,是在微机设计时确定的。一台微机能执行什么样的操作,是在微机设计时确定的。一条指令对应着一种基本操作。由于计算机只能识别二进制一条指令对应着一种基本操作。由于计算机只能识别二进制数,所以指令也必须用二进制形式来表示,称为指令的机器数,所以指令也必须用

2、二进制形式来表示,称为指令的机器码或机器指令。码或机器指令。 MCS-51单片机指令系统共有单片机指令系统共有33种功能,种功能,42种助记符,种助记符,111条指令。条指令。 31 1、二进制的表示形式:、二进制的表示形式:(以(以“累加器的内容累加器的内容+08H”为例)为例) 00100100B 操作码操作码 OP (加法)(加法) 00001000B 操作数操作数DATA(08H)特点:特点: 能被能被CPU直接识别、运行的形式。也称机器码、汇编直接识别、运行的形式。也称机器码、汇编语言的目标代码。语言的目标代码。缺点:缺点:不便于阅读、记忆和调试修改。不便于阅读、记忆和调试修改。3)

3、 指令表示指令表示4 2 2、十六进制表示方式:、十六进制表示方式: 它是对二进制形式的一种简化。它是对二进制形式的一种简化。 00100100B 24H 00001000B 08H 二进制表示的形式二进制表示的形式 十六进制表示的形式十六进制表示的形式在实验室等少数环境下,可以将这种形式作为输入程序的在实验室等少数环境下,可以将这种形式作为输入程序的一种辅助手段。但是,这种形式的指令格式必须由对应的监控一种辅助手段。但是,这种形式的指令格式必须由对应的监控程序把它们翻译成二进制的程序把它们翻译成二进制的“机器码机器码”后存入程序存储器并运后存入程序存储器并运行。行。5 3 3、指令的、指令的

4、“助记符助记符”方式(也称方式(也称“汇编格式汇编格式”):): 00100100B 24H 00001000B 08H ADD A,#08H 二进制表示形式二进制表示形式 十六进制表示十六进制表示 汇编格式汇编格式返回1)这是一种由)这是一种由英文单词英文单词或或字母、数字字母、数字来表征指令功能的形式。是来表征指令功能的形式。是一种便于阅读、书写和交流的表示形式。一种便于阅读、书写和交流的表示形式。2) “汇编汇编”格式的指令必须格式的指令必须 “翻译翻译”为二进制形式为二进制形式 “机器码机器码”后才能为后才能为CPU所识别和执行。所识别和执行。3)三种不同的表示方法适用于不同的场合。)

5、三种不同的表示方法适用于不同的场合。6指令格式:即指令的结构形式。指令格式:即指令的结构形式。OPDATA 或或 ADDRESS由操作码和操作数(或操作数地址)构成指令的结构。由操作码和操作数(或操作数地址)构成指令的结构。举例:举例:MOV A,#0FFH ADD A,R0返回4) 指令格式指令格式7采用助记符表示的汇编语言指令格式如下:采用助记符表示的汇编语言指令格式如下: 标号标号是程序员根据编程需要给指令设定的是程序员根据编程需要给指令设定的符号地址符号地址,可,可有可无;标号由有可无;标号由18个字符组成,第一个字符必须是英文字,个字符组成,第一个字符必须是英文字,不能是数字或其它符

6、号;标号后必须用冒号。不能是数字或其它符号;标号后必须用冒号。 4) 指令格式指令格式8 操作码操作码表示指令的操作种类,如表示指令的操作种类,如MOV表示数据传送操表示数据传送操作,作,ADD表示加法操作等。表示加法操作等。 操作数或操作数地址操作数或操作数地址表示参加运算的数据或数据的有表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如作数隐含在操作码中,如RET指令;只有一个操作数,如指令;只有一个操作数,如CPL A指令;有两个操作数,如指令;有两个操作数,如MOV A,#00H指令,操

7、作指令,操作数 之 间 以 逗 号 相 隔 ; 有 三 个 操 作 数 , 如数 之 间 以 逗 号 相 隔 ; 有 三 个 操 作 数 , 如 C J N E A,#00H,NEXT指令,操作数之间也以逗号相隔。指令,操作数之间也以逗号相隔。 注释注释是对指令的解释说明,用以提高程序的可读性;是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。注释前必须加分号。 4) 指令格式指令格式9 在在MCS-51MCS-51单片机的指令系统中,因指令操作码和操作数的不同,指单片机的指令系统中,因指令操作码和操作数的不同,指令(在存储器中)长度也各不相同。令(在存储器中)长度也各不相同。 分为

8、单字节、双字节和三字节。分为单字节、双字节和三字节。单字节指令(单字节指令(4949条):条):分分无操作数、有操作数无操作数、有操作数两种。两种。 无操作数:无操作数:如如 INC DPTR 10100011B INC A 00000100B 【特点特点】:操作数隐含在操作码中。:操作数隐含在操作码中。 含有操作数寄存器名称的单字节指令:含有操作数寄存器名称的单字节指令: 如:如:MOV A,R0 11101000B MOV A,R1 11101001B 【特点特点】:寄存器名以三位数代码的形式在指令的后三位。:寄存器名以三位数代码的形式在指令的后三位。5) 指令长度与执行时间5)指令长度与

9、执行时间10 双字节指令(双字节指令(4646条):条): 指令的操作码和操作数各占一个字节。指令的操作码和操作数各占一个字节。 如:如: MOV A , #data 01110100B data 很明显:很明显:8位的操作数本身占据一个字节。位的操作数本身占据一个字节。程序存储器程序存储器01110100datann+1双字节指令在程序存储器的存放示意图双字节指令在程序存储器的存放示意图5) 指令长度与执行时间指令长度与执行时间11 三字节指令(三字节指令(1616条):条): 指令中的操作数为双字节。如:指令中的操作数为双字节。如: MOV DPTR,#data16MOV DPTR,#da

10、ta16 10010000B,data15-8,data7-010010000B,data15-8,data7-0 或者:指令中分别包含或者:指令中分别包含1 1个字节的操作数和个字节的操作数和1 1个字节的操作数地址。个字节的操作数地址。如:如: MOV direct, #dataMOV direct, #data 举例:举例:MOV 20H,#0FFHMOV 20H,#0FFH 10010000data15-8data7-0MOV DPTR,#data16OP (75H)direct (20H)data (FFH)MOV direct, #data三字节指令在存储器中存放的方式示意图5)

11、指令长度与执行时间指令长度与执行时间12指令的字节多是否意味着指令周期就长?指令的字节多是否意味着指令周期就长?指指 令令字节数字节数周期数周期数指令说明指令说明 MOV A,R011R0内容送累加器内容送累加器AMOV A,#0FFH21立即数立即数FFH送送AMOV 20H,#30H32立即数立即数30H送内存送内存20H单元单元MUL AB14乘法指令乘法指令INC DPTR1116位寄存器位寄存器DPTR加一加一从表中可见,指令的字节数与指令周期不是对等的关系从表中可见,指令的字节数与指令周期不是对等的关系返回5) 指令长度与执行时间5) 指令长度与执行时间指令长度与执行时间136)

12、符号说明符号说明符符 号号含含 义义RnRn表示当前选定寄存器组的工作寄存器表示当前选定寄存器组的工作寄存器R0R0R7R7RiRi表示作为间接寻址的地址指针表示作为间接寻址的地址指针R0R0R1R1#data#data表示表示8 8位立即数,即位立即数,即00H00HFFHFFH#data16#data16 表示表示1616位立即数,即位立即数,即0000H0000HFFFFHFFFFHaddr16addr16表示表示1616位地址,用于位地址,用于64K64K范围内寻址范围内寻址addr11addr11表示表示1111位地址,用于位地址,用于2K2K范围内寻址范围内寻址directdire

13、ct8 8位直接地址,可以是内部位直接地址,可以是内部RAMRAM区的某一单元或某一特殊功能寄存器的地址区的某一单元或某一特殊功能寄存器的地址relrel带符号的带符号的8 8位偏移量(位偏移量(-128-128+127+127)bitbit位寻址区的直接寻址位位寻址区的直接寻址位间接寻址寄存器的前缀间接寻址寄存器的前缀/ /位操作前置,表示位取反,如位操作前置,表示位取反,如 /bit/bit参见参见P51说明说明(X X)X X地址单元中的内容,或地址单元中的内容,或X X作为间接寻址寄存器时所指单元的内容作为间接寻址寄存器时所指单元的内容( ((X X)) ) 以寄存器或以寄存器或X X

14、地址单元中的内容作为地址所指单元的内容地址单元中的内容作为地址所指单元的内容将将 后面的内容传送到前面去后面的内容传送到前面去14 找到参与运算的数据或数据所在的地址找到参与运算的数据或数据所在的地址的方式,称为寻址方式。的方式,称为寻址方式。 寻址方式主要是指源操作数的寻址。寻址方式主要是指源操作数的寻址。寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址基本方式扩展方式16目的地目的地操作数1) 立即数寻址17 MOV A, 3AH 直接寻址是指把存放操作数的内存单元的地址直接写直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在在指令中。在MCS-51单片机中,可以直

15、接寻址的存储器单片机中,可以直接寻址的存储器主要有内部主要有内部RAM区和特殊功能寄存器区和特殊功能寄存器SFR区。区。(参见参见P37)88H3AH内部 RAM88HA2) 直接寻址183) 寄存器寻址MOV R1, A寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。19寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址设R0=3AH,内部RAM 3AH中的值是65H,则指令MOV A,R0

16、的执行结果是累加器A的值为65H。R0R1DPTR4) 寄存器间接寻址2021222324寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址ADPTRPC5) 变址寻址25寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址6) 相对寻址26设指令SJMP 54H的机器码80H 54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。54H程序存储区54HA2001H20HPC02H2056HXX80H2056

17、H2000H27寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址10 0 0 0 0 0 0 07) 位寻址287F7F77776F6F67675F5F57574F4F474737372F2F27271F1F17170F0F0707 7E7E76766E6E66665E5E56564E4E4646 36362E2E26261E1E16160E0E06067D7D75756D6D65655D5D55554D4D454535352D2D25251D1D15150D0D05057C7C74746C6C64645C5C54544C4C4444 34342C2C24241C1C14140

18、C0C04047B7B73736B6B63635B5B53534B4B4343 33332B2B23231B1B13130B0B03037A7A72726A6A62625A5A52524A4A4242 32322A2A22221A1A12120A0A020279797171696961615959515149494141 313129292121191911110909010178787070686860605858505048484040 3030282820201818101008080000 例: 3D3D 3C3C 3B3B3F3F 3E3E3A3A 3939383827H27H29寄

19、存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址SETB 3DH0 0 0 0 0 0 01 0位地址的表示方式:?30按功能, MCS -51 指令系统可分为下列 5 类:31 数据传送类指令共数据传送类指令共29条条, 它是指令系统中最活跃、它是指令系统中最活跃、 使用最多的一类指令。使用最多的一类指令。 一般的操作是把源操作数传送到一般的操作是把源操作数传送到目的操作数目的操作数, 即指令执行后目的操作数改为源操作数即指令执行后目的操作数改为源操作数, 而而源操作数保持不变。源操作数保持不变。 若要求在进行数据传送时若要求在进行数据传送时, 不丢失不丢失目的操作数目的操作数

20、, 则可以用交换型传送指令。则可以用交换型传送指令。 指令通式:MOV ,32 数据传送类指令不影响进位标志数据传送类指令不影响进位标志CY、 半进位标志半进位标志AC和溢出标志和溢出标志OV, 但当传送或交换数据后影响累加器但当传送或交换数据后影响累加器A的值的值时时, 奇偶标志奇偶标志P的值则按的值则按A的值重新设定。的值重新设定。 按数据传送类指令的操作方式按数据传送类指令的操作方式, 又可把传送类指令分又可把传送类指令分为为3种类型种类型: 数据传送、数据传送、 数据交换和堆栈操作数据交换和堆栈操作, 并使用并使用8种种助记符助记符: MOV、 MOVX、 MOVC、 XCH、 XCH

21、D、 SWAP、 PUSH及及POP。33 1. 数据传送到累加器数据传送到累加器A的指令的指令 MOV A, Rn MOV A, direct MOV A, Ri MOV A, data 这组指令的功能是:把源操作数的内容送入累加器A。例如: MOV A, 10H, 该指令执行时将立即数 10H送入累加器A中。 3.3.1 内部内部RAM传送指令传送指令34例3.3.1 已知(A)=20H,(R0)=50H,内部RAM中(40H)=30H,(50H)=10H,指出下列指令执行后相应单元内容的变化情况。 MOV A , #40H MOV A , 40H MOV A , R0 MOV A , R

22、035 2. 数据传送到工作寄存器数据传送到工作寄存器Rn的指令的指令 MOV Rn, A MOV Rn, direct MOV Rn, data 这组指令的功能是: 把源操作数的内容送入当前工作寄存器区的R0R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确定, 可以是 00H07H、08H0FH、10H17H、18H1FH。 例如: MOV R0, A, 若当前RS1、RS0 设置为 00 (即工作寄存器 0 区), 执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。 363. 数据传送到内部数据传送到内部R

23、AM单元(直接地址)单元(直接地址) MOV direct, A MOV direct, Rn MOV direct, direct MOV direct, Ri MOV direct, data4. 数据传送到内部数据传送到内部RAM单元(间接地址)单元(间接地址) MOV Ri, A MOV Ri, direct MOV Ri, data375. 16位数传送指令位数传送指令 MCS-51指令系统中唯一的一条16位数据传送类指令。 MOV DPTR,#data16 DPTR是单片机内部SFR中的两个寄存器DPH、DPL组合而成。其中DPH为高八位,DPL为低八位。 DPTR是一个专门用于访

24、问外部存储器的间址寄存器。寻址能力为 64K (065535)。38例3.3.2 已知(R0)=50H,(R1)=66H, (R6)=30H内部RAM中(50H)=60H,(66H)=45H, (70H)=40H指出下列指令执行后相应单元内容的变化情况。 MOV A , R6 MOV R7 , 70H MOV 70H , 50H MOV 40H , R0 MOV R1 , #88H39 实现外部实现外部RAM和累加器和累加器A之间的数据传送。只有寄存器间接寻之间的数据传送。只有寄存器间接寻址的指令。址的指令。 MOVX A,Ri 使用使用Ri寄存器间址寻址范围寄存器间址寻址范围0255 MOV

25、X Ri,A 在硬件电路中在硬件电路中P0口输出口输出8位地址数据。位地址数据。MOVX A,DPTR 使用使用DPTR间址,寻址范围间址,寻址范围065535hMOVX DPTR,A 在硬件电路中,使用在硬件电路中,使用P0口输出低口输出低8位,位, P2口输出高口输出高8位外部位外部RAM地址。地址。3.3.2 外部外部RAM传送指令传送指令40外部外部RAMRAM的字节传送指令举例的字节传送指令举例已知外部已知外部RAM的的88H单元有一个数单元有一个数x,试编程将,试编程将x送外部送外部RAM的的1818H单元。单元。【解解】:外部:外部RAMRAM中的数据是不能直接传送的,因此必须使

26、用两次中的数据是不能直接传送的,因此必须使用两次 MOVXMOVX 指令完成此操作。指令完成此操作。ORG 2000HORG 2000HMOV R0MOV R0,#88H #88H ;为;为8 8位指针赋值位指针赋值MOV DPTRMOV DPTR,#1818H #1818H ;为;为1616位指针赋值位指针赋值MOVX AMOVX A,R0 R0 ;取;取 x x 到累加器到累加器A AMOVX DPTRMOVX DPTR,A A ;x x 送送RAMRAM的的1818h1818h单元单元SJMP $ SJMP $ ;停机;停机ENDEND返回413.3.3 3.3.3 数据交换指令数据交换

27、指令 为提供一种方便的为提供一种方便的累加器累加器和和寄存器寄存器或或RAM之间的数据交之间的数据交换。避免了使用一般换。避免了使用一般MOV传送指令完成交换时的不便。传送指令完成交换时的不便。 格式:格式: XCH A,Rn ;A Rn XCH A,direct ;A (direct) XCH A,Ri ;A (Ri) XCHD A,Ri ;A30(Ri)30 SWAP A ;A30 A4742数据交换指令举例数据交换指令举例 已知,片外已知,片外RAM 20h单元、内部单元、内部RAM 20h单元分别有数单元分别有数x和和y,试编程互将两数相交换。,试编程互将两数相交换。MOV R1,#2

28、0h ;指针赋初值;指针赋初值MOVX A,R1 ;xaXCH A,R1 ;交换交换 a(20h),ya MOVX R1,A ;y(20h)片外片外RAM片内片内RAMy (x)片外片外RAMx (y)(y) x20h20h累加器A123433.3.4 ROM3.3.4 ROM的字节传送指令(查表指令)的字节传送指令(查表指令) 这类指令有两条,都属于变址寻址指令。这类指令有两条,都属于变址寻址指令。 MOVC A,A+DPTR MOVC A,A+DPTR ;A (A+DPTR)A (A+DPTR) MOVC A,A+PC MOVC A,A+PC ;PC PC+1, A (A+PC) PC P

29、C+1, A (A+PC) 该指令也称为该指令也称为“查表查表”指令。在指令。在ROMROM中建立一个数据表,可以使用中建立一个数据表,可以使用DPTRDPTR、PCPC作为数据表格的基地址。作为数据表格的基地址。 在第一条指令中:用在第一条指令中:用DPTRDPTR作为基地址。使用前,先将数据表的作为基地址。使用前,先将数据表的首地址送入首地址送入DPTRDPTR中,累加器中,累加器A A作为偏移量。由两者数据相加得到待查作为偏移量。由两者数据相加得到待查的表中数据地址并取出。(远程查表指令)的表中数据地址并取出。(远程查表指令) 第二条指令是以程序计数器第二条指令是以程序计数器PCPC为基

30、地址。由于为基地址。由于PCPC的内容与该指令的内容与该指令在在ROMROM中的位置有关,所以一旦该指令在程序中的位置确定,其中的位置有关,所以一旦该指令在程序中的位置确定,其PCPC的的值也就确定。(近程查表指令)(值也就确定。(近程查表指令)(P62P62)44ROMROM的字节传送指令举例的字节传送指令举例已知累加器已知累加器A中存有中存有09范围内的数,范围内的数,试用查表指令编写查找出该数平方的程试用查表指令编写查找出该数平方的程序。序。采用采用DPTR作基址寄存器作基址寄存器: 设平方表的首地址为设平方表的首地址为2000h,累加器,累加器A中的内容恰好是查表的偏移量。首先将中的内

31、容恰好是查表的偏移量。首先将表的起始地址表的起始地址2000h送入送入DPTR中。中。 MOV DPTR,#2000H ;指针赋值;指针赋值 MOVC A,A+DPTR ;平方值送;平方值送AROM01491625364964812000h2009h2008h2007h2006h2005h2004h2003h2002h2001h453.3.5 3.3.5 堆栈操作指令堆栈操作指令 堆栈操作是一种特殊的数据传送指令。堆栈操作是一种特殊的数据传送指令。 堆栈:一个用来保存程序断点、数据的特殊的存储区域。在堆栈:一个用来保存程序断点、数据的特殊的存储区域。在MCS-MCS-5151单片机中,栈区是占

32、用片内单片机中,栈区是占用片内RAMRAM的存储空间,具体栈位置由指针的存储空间,具体栈位置由指针SPSP来确定(系统上电时,来确定(系统上电时,SP=07H)SP=07H)。 (1 1)进栈操作:)进栈操作: PUSH directPUSH direct ;SP+1SP+1SP,(direct)SP,(direct)(SP)(SP) (2 2)出栈操作:)出栈操作: POP directPOP direct ;(SP)(SP)(direct),SP -1SP(direct),SP -1SP【注意注意】:寻址方式为直接寻址,所以寻址方式为直接寻址,所以 PUSH APUSH A 是错误的,应当

33、是是错误的,应当是PUSH ACCPUSH ACC或或PUSH 0E0HPUSH 0E0H,同理同理:PUSH R0PUSH R0也是错误的。也是错误的。进栈是堆栈向上进栈是堆栈向上“生长生长”的过程,即的过程,即SP+1SP+1;出栈则相反。;出栈则相反。系统上电时,系统上电时,SP=07hSP=07h。SPSP的值可以根据需要进行修改,以适应具体的值可以根据需要进行修改,以适应具体编程的需要。在确定栈区位置时要考虑对数据区的影响,以避免编程的需要。在确定栈区位置时要考虑对数据区的影响,以避免数据区与栈区冲突。数据区与栈区冲突。46堆栈操作指令举例(一)堆栈操作指令举例(一)下面是一个下面是

34、一个BCD码转换为二进制的子程序码转换为二进制的子程序BCDB中有关堆栈操作的中有关堆栈操作的例子。在这里,进栈操作是为了保护主程序中相关寄存器中的数据,例子。在这里,进栈操作是为了保护主程序中相关寄存器中的数据,因为子程序要使用这些寄存器。因为子程序要使用这些寄存器。org 0800hbcdb:push PSWpush ACCpush B : :pop Bpop ACCpop PSWRETRAMBACCPSW栈底栈底SP47堆栈操作指令举例(二)堆栈操作指令举例(二) 堆栈操作指令除了可以在子程序的设计堆栈操作指令除了可以在子程序的设计中,对主程序的数据进行保护。还可以中,对主程序的数据进行

35、保护。还可以根据堆栈操作的特点完成一些特殊的操根据堆栈操作的特点完成一些特殊的操作。作。【举例举例】:设片内:设片内RAMRAM的的30h30h单元存有单元存有x x,40h40h单元存有单元存有y y。试将两个单元内容互换。试将两个单元内容互换。push 30hpush 30hpush 40hpush 40hpop 30hpop 30hpop 40hpop 40hRAMx y y xyx栈底栈底SP=07h40h30h48内部内部RAMRAM前前128128字节,字节,SFRSFR之间可以相互传送,但最多只之间可以相互传送,但最多只允许允许1 1个操作数使用寄存器间接寻址。个操作数使用寄存器

36、间接寻址。 MOV R0 , R1 MOV R0 , R1 是错误的。是错误的。访问访问SFRSFR必须使用直接寻址,不能采用寄存器间接寻址。必须使用直接寻址,不能采用寄存器间接寻址。 MOV A , P0 MOV A , P0 或或 MOV A, 80H MOV A, 80H 正确正确 MOV R0 , #80H MOV R0 , #80H 和和 MOV A , R0 MOV A , R0 错误错误80518051没有提供没有提供B B寄存器的寻址方式(乘法、除法或堆栈寄存器的寻址方式(乘法、除法或堆栈操作除外)。操作除外)。 注意注意 A A 和和 ACC ACC 的区别:的区别: MOV

37、 3FH , A ; MOV 3FH , A ; 寄存器寻址(寄存器寻址(2 2字节指令)字节指令) MOV 3FH , ACC ; MOV 3FH , ACC ; 直接寻址直接寻址 (3 3字节指令)字节指令)493.4 3.4 算术运算指令算术运算指令 不带进位的加法指令不带进位的加法指令 ( ADD )1、加法指令:、加法指令: 带进位的加法指令带进位的加法指令 ( ADC ) 加加1指令指令 ( INC )2、减法指令减法指令: 带借位的减法指令带借位的减法指令 ( SUBB ) 减减1指令指令 ( DEC )3、十进制调整指令十进制调整指令: ( DA A )4、乘法和除法指令乘法和

38、除法指令: ( MUL AB ; DIV AB )503.4.1 3.4.1 加法指令加法指令1、不带进位的加法指令、不带进位的加法指令格式:格式: ADD A,Rn;A+RnAADD A,direct;A+(direct)AADD A,Ri;A+(Ri)AADD A,#data;A+dataA 【注意注意】:1 1,参加运算的数据都应当是,参加运算的数据都应当是8 8位的,结果也是位的,结果也是8 8位并影响位并影响PSWPSW。2 2,根据编程者的需要,根据编程者的需要,8 8位数据可以是无符号数位数据可以是无符号数(0 0255255),也可以是,也可以是有符号数有符号数(-128-12

39、8+127+127)。3 3,不论编程者使用的数据是有符号数还是无符号数,不论编程者使用的数据是有符号数还是无符号数,CPUCPU都将它们视为都将它们视为有符号数(补码)进行运算并影响有符号数(补码)进行运算并影响PSWPSW。51不带进位的加法指令举例不带进位的加法指令举例( (一一) )试分析执行下列指令后累加器试分析执行下列指令后累加器A和和PSW中各标志的变化。中各标志的变化。MOV A,#19H Cy=0;ADD A,#66H AC=0 OV=C7 C6=0 25 A = 0 0 0 1 1 0 0 1 B P=1 + 102 data= 0 1 1 0 0 1 1 0 B 127

40、0 0 1 1 1 1 1 1 1 B 1,若两数都是无符号数,则因,若两数都是无符号数,则因Cy=0无进位,无进位,25+102=127。 2,若两个数是有符号数,则因,若两个数是有符号数,则因OV=0无溢出。无溢出。cy0 0 0 C7 C6 AC 52不带进位的加法指令举例不带进位的加法指令举例( (二二) )试分析执行下列指令后累加器试分析执行下列指令后累加器A和和PSW中各标志的变化。中各标志的变化。MOV A,#5AH Cy=0;ADD A,#6BH AC=1; OV=C7 C6=1 90 A= 0 1 0 1 1 0 1 0 B P=0 + 107 data=0 1 1 0 1

41、0 1 1 B 197 0 1 1 0 0 0 1 0 1 B C7 C6 AC1,若两数是无符号数,因,若两数是无符号数,因Cy=0无进位:无进位:90+107=1972,若两数是有符号数,因,若两数是有符号数,因OV=1,故有溢出,两个正数相加后变为负,故有溢出,两个正数相加后变为负数,很明显结果是不正确的。数,很明显结果是不正确的。532、带进位的加法指令、带进位的加法指令 格式:格式: ADDC A,Rn ;A+Rn+CyA ADDC A,direct ;A+(direct) +CyA ADDC A,Ri ;A+(Ri) +CyA ADDC A,#data ;A+data+CyA【注意

42、注意】:这里的:这里的CyCy是指令执行前的是指令执行前的CyCy; 对对PSWPSW的影响同的影响同ADDADD指令。指令。543、加、加1指令指令格式:格式:INC A ;累加器;累加器A加一加一INC Rn ;Rn+1RnINC direct ;内存单元数据加一;内存单元数据加一INC Ri ;内存单元数据加一;内存单元数据加一INC DPTR ;dptr+1dptr【注意注意】: 1 1,除了第一条对除了第一条对PSWPSW的的P P有影响外有影响外, ,其余对其余对PSWPSW均无影响。均无影响。 2 2,由于上面的原因,由于上面的原因,INCINC指令不能作为一般的数据算术运算使用

43、,指令不能作为一般的数据算术运算使用,INCINC主要用于修改数据指针等控制、循环语句中使用。主要用于修改数据指针等控制、循环语句中使用。55编程举例编程举例已知已知M1M1、M2M2单元中存有两个单元中存有两个1616位无符号数位无符号数x1x1、x2x2(低位在前)。(低位在前)。试写出试写出x1+x2,x1+x2,并将结果放入并将结果放入M1M1、M1+1M1+1单元(低单元(低8 8位在位在M1M1单元)。设单元)。设两数之和不会超过两数之和不会超过1616位(位(6553565535)。)。【 解解】:MOV R0MOV R0,#M1 #M1 ;x1x1指针赋初值指针赋初值MOV R

44、1MOV R1,#M2 #M2 ;x2x2指针赋初值指针赋初值MOV AMOV A,R0 R0 ;取取x1x1低低8 8位送位送A AADD AADD A,R1 R1 ;x1x1与与x2x2低低8 8位相加位相加MOV R0MOV R0,A A ;低低8 8位和送位和送m1m1单元单元INC R0INC R0INC R1INC R1 ;修改指针修改指针MOV AMOV A,R0 R0 ;取取x1x1的高的高8 8位送位送A AADDC AADDC A,R1R1 ;x1x1与与x2x2的高的高8 8位和位和CyCy相加相加MOV R0MOV R0,A A ;结果送结果送M1+1M1+1单元单元R

45、AMX2 data815X2 data07X1 data815X1 data07M1M1+1M2M2+1563.4.2 3.4.2 减法指令减法指令(带进位的减法指令)带进位的减法指令)在在MCS-51单片机的指令系统中,只有:单片机的指令系统中,只有: 带借位的减法带借位的减法 SUBB 减一减一 DEC 两种指令。两种指令。1、减法指令:、减法指令:格式格式: SUBB A,Rn ;A Rn Cy A SUBB A,direct ;A (direct) Cy A SUBB A,Ri ;A (Ri) Cy A SUBB A,#data ;A data Cy A57 使用减法指令要注意的问题

46、在在MCS-51MCS-51的指令系统中没有不带的指令系统中没有不带CYCY的减法,所以在使用的减法,所以在使用SUBBSUBB指令前必须使用一条清除指令前必须使用一条清除CYCY的指令:的指令:CLR CCLR C。58减法指令应用举例试分析执行下列指令后累加器试分析执行下列指令后累加器A和和PSW中各标志的变化。中各标志的变化。CLR CMOV A,#C9HSUBB A,#054H 201 a= 1 1 0 0 1 0 0 1 84 data= 0 1 0 1 0 1 0 0 117 0 0 1 1 1 0 1 0 1 =117 CY=0 (D7无借位无借位) AC=0 (D3无借位无借位

47、) OV=1 (D7无借位,无借位,D6有借位有借位)592、减一指令 格式格式:DEC A ;累加器;累加器A减一减一DEC Rn ;Rn-1RnDEC direct ;内存单元数据减一;内存单元数据减一DEC Ri ;内存单元数据减一;内存单元数据减一【注意注意】: 1 1,除了第一条对除了第一条对PSWPSW的的P P有影响外,其余对有影响外,其余对PSWPSW均无影响。均无影响。 2 2,由于上面的原因,由于上面的原因,DECDEC指令一般不作为数据算术运算使用(因为指令一般不作为数据算术运算使用(因为不能对不能对PSWPSW的的OVOV等位产生影响,它主要用于修改数据指针在控制、等位

48、产生影响,它主要用于修改数据指针在控制、循环语句中使用)。循环语句中使用)。603.4.3 3.4.3 十进制调整指令十进制调整指令在在CPU进行进行BCD码码加法加法运算时,必须在运算后进行十进制调整,运算时,必须在运算后进行十进制调整,这是因为,这是因为,CPU在运算时,并不知道数据是二进制还是在运算时,并不知道数据是二进制还是BCD码。码。格式:格式:DA A ;若若AC=1或或A30 9,则则A+06hA ;若若Cy =1或或A74 9,则则A+60hA 【注意注意】:1 1,DA ADA A指令必须紧跟在加法指令之后;指令必须紧跟在加法指令之后;2 2,DA ADA A指令只适用于加

49、法指令的调整。指令只适用于加法指令的调整。61十进制调整指令应用举例十进制调整指令应用举例1 1、BCDBCD加法运算:加法运算:试写出完成试写出完成85+59的的BCD码的加法程序。码的加法程序。MOV A,#85HADD A,#59HDA ASJMP $ 85 a= 1 0 0 0 0 1 0 1B+ 59 dtat= 0 1 0 1 1 0 0 1B 144 1 1 0 1 1 1 1 0B 低低4位位9,所以加,所以加06h + 0 0 0 0 0 1 1 0B 1 1 1 0 0 1 0 0B 高高4位位9,所以加,所以加60h 0 1 1 0 0 0 0 0B 1 0 1 0 0

50、0 1 0 0B 结果为结果为144h(1包含在包含在Cy)【注意注意】: 144H是用是用16进制数来表示十进制,既进制数来表示十进制,既BCD码。码。623.4.4 3.4.4 乘法和除法指令乘法和除法指令这是这是MCS-51单片机唯一的一类单字节单片机唯一的一类单字节4周期指令,它相当于周期指令,它相当于4条条加法指令的运行时间。加法指令的运行时间。 格式:格式:MUL AB ;a a b=bb=b,a (ba (b存高存高8 8位,位,a a存低存低8 8位)位) DIV AB ;a a b=ab (ab=ab (a存商,存商,b b存余数)存余数) 【注意注意】:指令对标志的影响:指

51、令对标志的影响: 1 1,在乘法指令中,在乘法指令中对对PSWPSW的影响有的影响有CyCy、OVOV、和、和P P。 具体如下具体如下:Cy:Cy0 0;P P取决于取决于A A中中“ “1”1”的个数;的个数;OVOV表明积的大小。表明积的大小。当积超过当积超过255255(B0)B0)时,时,OV=1OV=1。 2 2,在除法指令中,在除法指令中,CyCy、P P与乘法相同。在执行除法指令时,若与乘法相同。在执行除法指令时,若B=0B=0时时OV=1OV=1,表示除数,表示除数=0=0除法无意义,其余情况下除法无意义,其余情况下OVOV被复位。被复位。633.5 3.5 逻辑运算指令逻辑

52、运算指令 功能功能: :对对2个个8位二进制数进行位二进制数进行逻辑与、或、非和异或逻辑与、或、非和异或操作;操作; 特点特点:除了以累加器除了以累加器A为目标寄存器的指令影响为目标寄存器的指令影响PSW的的P位位外,其余指令对外,其余指令对PSW均无影响。均无影响。1,逻辑,逻辑与运算与运算指令指令 ( ANL )2,逻辑,逻辑或运算或运算指令指令 ( ORL )3,逻辑,逻辑异或异或指令指令 ( XRL )4,累加器,累加器清零和取反清零和取反指令指令 ( CLR & CPL )641、逻辑与运算指令、逻辑与运算指令格式:格式: ANL A,Rn ;A R n A ANL A,direct

53、 ; A (directdirect) A ANL A,Ri ; A ( Ri) A ANL A,#data ; A datadata A ANL direct,A ; (direct) A directdirect ANL direct,# data ; (direct) data direct上面的指令也可以分为两类:上面的指令也可以分为两类: 1,以,以累加器累加器A为目标寄存器的逻辑运算指令;为目标寄存器的逻辑运算指令; 2,以,以内存单元内存单元为目标的逻辑运算指令。为目标的逻辑运算指令。65应用举例应用举例( (一一) )已知(已知(R0)=30H和(和(30H)=0AAH,试问执

54、行下列指令后累加试问执行下列指令后累加器器A和和30H单元中的内容是什么?单元中的内容是什么?1, MOV A,#0FFH 2,MOV A,#0FHANL A,R0 ANL A,30H(A=30H,(30H)=0AAH) (A=0AH,(30H)=0AAH)3,MOV A,#0F0H 4,MOV A,#80HANL A,R0 ANL 30H,A(A=0A0H,(30H)=0AAH)()(A=80H,(30H)=80H)很明显:很明显:ANL操作可以从某个存储单元中取出某几位,而把其它的位操作可以从某个存储单元中取出某几位,而把其它的位清零清零。662 2、逻辑或运算指令、逻辑或运算指令格式:格

55、式: ORL A,Rn ;A R n A ORL A,direct ; A (directdirect) A ORL A,Ri ; A ( R I ) A ORL A,#data ; A datadata A ORL direct,A ; (direct) A directdirect ORL direct,# data ; (direct) data direct同与运算一样,上面的指令也可以分为两类:同与运算一样,上面的指令也可以分为两类: 1,以,以累加器累加器A为目标寄存器的逻辑运算指令;为目标寄存器的逻辑运算指令; 2,以,以内存单元内存单元为目标的逻辑运算指令。为目标的逻辑运算指令

56、。67应用举例应用举例设累加器设累加器A=0AAH,P1口口=0FFH。试编程将累加器。试编程将累加器A中的低四位中的低四位送送P1口的低四位,而口的低四位,而P1口的高四位不变。口的高四位不变。 解:解: MOV R0,A;累加器;累加器A中的数据暂存中的数据暂存ANL A,#0FH ;屏蔽;屏蔽A的高的高4位位ANL P1,#0F0H;屏蔽;屏蔽P1口的低口的低4位位ORL P1,A;在;在P1口组装口组装MOV A,R0;恢复累加器;恢复累加器A的数据的数据【小结小结】: 与运算与运算可以可以 “ “清零清零” ” 某些位某些位; ;或运算或运算可以可以 “ “置位置位” ” 某些位。某

57、些位。683 3、逻辑异或运算指令、逻辑异或运算指令格式:格式: XRL A,Rn; A R n A XRL A,direct ; A (directdirect) A XR A,Ri; A ( ( R I ) AR I ) A XRL A,#data; A datadata A XRL direct,A; (direct) A directdirect XRL direct,# data; (direct) data direct特点:按位运算,相同时为特点:按位运算,相同时为0,不同时为,不同时为1。使用异或可以实现将。使用异或可以实现将某个字节的数据或将数据的某几位某个字节的数据或将数据

58、的某几位取反取反。69举例举例已知:外部已知:外部RAM的的30H单元中有一个数单元中有一个数AAH,现要将其高,现要将其高4位不位不变,低变,低4位取反,试编程。位取反,试编程。解解1,利用,利用MOVX A,Ri指令:指令:MOV R0,#30H 1 0 1 0 1 0 1 0MOVX A,R0 0 0 0 0 1 1 1 10 0 0 0 1 1 1 1XRL A,#0FH 1 0 1 01 0 1 0 0 1 0 10 1 0 1MOVX R0,A解解2,利用,利用MOVX A,DPTRMOV DPTR,#0030HMOVX A,DPTRXRL A,#0FHMOVX DPTR,A704

59、 4、累加器清零和取反指令、累加器清零和取反指令用传送指令可以实现对累加器用传送指令可以实现对累加器A的清零和取反操作,但是它们都是双字的清零和取反操作,但是它们都是双字节指令。在节指令。在MCS-51的指令系统中专门设计了单字节、单周期对累加器的指令系统中专门设计了单字节、单周期对累加器清零和取反的指令。清零和取反的指令。格式:格式:CLR A ;累加器清零;累加器清零CPL A ;累加器取反;累加器取反 取反指令可以方便的实现求补操作。取反指令可以方便的实现求补操作。举例:举例:已知已知30H单元中有一个数单元中有一个数x,写出对它求补的程序。,写出对它求补的程序。MOV A,30HCPL

60、 AINC AMOV 30H,A71A.0A.7A.0A.7A.0A.7A.0A.7CYCYRL ARR ARLC ARRC A72 循环指令可以实现数据各位的循环移位、循环检测,循环指令可以实现数据各位的循环移位、循环检测,也可以对数据乘也可以对数据乘2、除、除2操作。操作。 MOV A , 02H CLR C RLC A ; A*2 MOV A , 06H CLR C RRC A ; A/2733.6 3.6 控制转移指令控制转移指令 1 1、无条件转移指令、无条件转移指令 2 2、条件转移指令、条件转移指令 3 3、子程序调用和返回、子程序调用和返回 4 4、空操作指令、空操作指令743

温馨提示

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

评论

0/150

提交评论