单片机的指令系统.ppt

上传人:wuy****n92 文档编号:80429420 上传时间:2023-03-23 格式:PPT 页数:105 大小:1.57MB
返回 下载 相关 举报
单片机的指令系统.ppt_第1页
第1页 / 共105页
单片机的指令系统.ppt_第2页
第2页 / 共105页
点击查看更多>>
资源描述

《单片机的指令系统.ppt》由会员分享,可在线阅读,更多相关《单片机的指令系统.ppt(105页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 指令概述指令概述指令概述指令概述 寻址方式寻址方式寻址方式寻址方式 数据传送类指令数据传送类指令数据传送类指令数据传送类指令 算术运算类指令算术运算类指令算术运算类指令算术运算类指令 逻辑操作类指令逻辑操作类指令逻辑操作类指令逻辑操作类指令 控制转移类指令控制转移类指令控制转移类指令控制转移类指令 位操作指令位操作指令位操作指令位操作指令第第3 3章章 80C5180C51的指令系统的指令系统 本章内容本章内容23.1指令系指令系统简介介1)指令概述指令概述 一台微机所具有的所有指令的集合,就构成了指令系统。一台微机所具有的所有指令的集合,就构成了指令系统。指令系统越丰富,说明指令系统越丰

2、富,说明CPU的功能越强。的功能越强。2)机器指令机器指令 一一台台微微机机能能执执行行什什么么样样的的操操作作,是是在在微微机机设设计计时时确确定定的的。一一条条指指令令对对应应着着一一种种基基本本操操作作。由由于于计计算算机机只只能能识识别别二二进进制制数数,所所以以指指令令也也必必须须用用二二进进制制形形式式来来表表示示,称称为为指指令令的的机机器器码或机器指令。码或机器指令。MCS-51单片机指令系统共有单片机指令系统共有33种功能,种功能,42种助记符,种助记符,111条指令。条指令。31 1、二进制的表示形式:、二进制的表示形式:(以(以“累加器的内容累加器的内容+08H”为例)为

3、例)00100100B 操作码操作码 OP(加法)(加法)00001000B 操作数操作数DATA(08H)特点:特点:能被能被CPU直接识别、运行的形式。也称机器码、汇编直接识别、运行的形式。也称机器码、汇编语言的目标代码。语言的目标代码。缺点:缺点:不便于阅读、记忆和调试修改。不便于阅读、记忆和调试修改。3)指令表示指令表示42 2、十六进制表示方式:、十六进制表示方式:它是对二进制形式的一种简化。它是对二进制形式的一种简化。00100100B 24H 00001000B 08H 二进制表示的形式二进制表示的形式 十六进制表示的形式十六进制表示的形式在实验室等少数环境下,可以将这种形式作为

4、输入程序的在实验室等少数环境下,可以将这种形式作为输入程序的一种辅助手段。但是,这种形式的指令格式必须由对应的监控一种辅助手段。但是,这种形式的指令格式必须由对应的监控程序把它们翻译成二进制的程序把它们翻译成二进制的“机器码机器码”后存入程序存储器并运后存入程序存储器并运行。行。53 3、指令的、指令的“助记符助记符”方式(也称方式(也称“汇编格式汇编格式”):):00100100B 24H 00001000B 08H ADD A,#08H 二进制表示形式二进制表示形式 十六进制表示十六进制表示 汇编格式汇编格式返回1)这是一种由)这是一种由英文单词英文单词或或字母、数字字母、数字来表征指令功

5、能的形式。是来表征指令功能的形式。是一种便于阅读、书写和交流的表示形式。一种便于阅读、书写和交流的表示形式。2)“汇编汇编”格式的指令必须格式的指令必须“翻译翻译”为二进制形式为二进制形式“机器码机器码”后才能为后才能为CPU所识别和执行。所识别和执行。3)三种不同的表示方法适用于不同的场合。)三种不同的表示方法适用于不同的场合。6指令格式:既指令的结构形式。指令格式:既指令的结构形式。OPDATA 或或 ADDRESS操作码操作码操作码操作码操作数或操作数地址操作数或操作数地址操作数或操作数地址操作数或操作数地址由操作码和操作数(或操作数地址)构成指令的结构。由操作码和操作数(或操作数地址)

6、构成指令的结构。举例:举例:MOV A,#0FFH ADD A,R0返回4)指令格式指令格式7采用助记符表示的汇编语言指令格式如下:采用助记符表示的汇编语言指令格式如下:标号标号是程序员根据编程需要给指令设定的是程序员根据编程需要给指令设定的符号地址符号地址,可,可有可无;标号由有可无;标号由18个字符组成,第一个字符必须是英文字,个字符组成,第一个字符必须是英文字,不能是数字或其它符号;标号后必须用冒号。不能是数字或其它符号;标号后必须用冒号。4)指令格式指令格式标号:标号:标号:标号:操作码操作码操作码操作码操作数或操作数地址操作数或操作数地址操作数或操作数地址操作数或操作数地址;注释;注

7、释;注释;注释8 操操作作码码表表示示指指令令的的操操作作种种类类,如如MOV表表示示数数据据传传送送操操作,作,ADD表示加法操作等。表示加法操作等。操操作作数数或或操操作作数数地地址址表表示示参参加加运运算算的的数数据据或或数数据据的的有有效效地地址址。操操作作数数一一般般有有以以下下几几种种形形式式:没没有有操操作作数数项项,操操作作数数隐隐含含在在操操作作码码中中,如如RET指指令令;只只有有一一个个操操作作数数,如如CPL A指指令令;有有两两个个操操作作数数,如如MOV A,#00H指指令令,操操作作数数 之之 间间 以以 逗逗 号号 相相 隔隔;有有 三三 个个 操操 作作 数数

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

9、作数:无操作数:如如 INC DPTR 10100011B INC A 00000100B 【特点特点】:操作数隐含在操作码中。:操作数隐含在操作码中。含有操作数寄存器名称的单字节指令:含有操作数寄存器名称的单字节指令:如:如:MOV A,R0 11101000B MOV A,R1 11101001B 【特点特点】:寄存器名以三位数代码的形式在指令的后三位。:寄存器名以三位数代码的形式在指令的后三位。5)指令长度与执行时间5)指令长度与执行时间10双字节指令(双字节指令(4646条):条):指令的操作码和操作数各占一个字节。指令的操作码和操作数各占一个字节。如:如:MOV A,#data 01

10、110100B data 很明显:很明显:8位的操作数本身占据一个字节。位的操作数本身占据一个字节。程序存储器程序存储器01110100datann+1MOV A,#dataMOV A,#data双字节指令在程序存储器的存放示意图双字节指令在程序存储器的存放示意图5)指令长度与执行时间指令长度与执行时间11三字节指令(三字节指令(1616条):条):指令中的操作数为双字节。如:指令中的操作数为双字节。如:MOV DPTR,#data16MOV DPTR,#data16 1001000B,data15-8,data7-01001000B,data15-8,data7-0 或者:指令中分别包含或者

11、:指令中分别包含1 1个字节的操作数和个字节的操作数和1 1个字节的操作数地址。个字节的操作数地址。如:如:MOV direct,#dataMOV direct,#data 举例:举例:MOV 20H,#0FFHMOV 20H,#0FFH 10010000data15-8data8-0MOV DPTR,#data16OP (75H)direct(20H)data (FFH)MOV direct,#data三字节指令在存储器中存放的方式示意图5)指令长度与执行时间指令长度与执行时间12指令的字节多是否意味着指令周期就长?指令的字节多是否意味着指令周期就长?指指 令令字节数字节数周期数周期数指令说

12、明指令说明 MOV A,R011R0内容送累加器内容送累加器AMOV A,#0FFH21立即数立即数FFH送送AMOV 20H,#30H32立即数立即数30H送内存送内存20h单元单元MUL AB14乘法指令乘法指令INC DPTR1116位寄存器位寄存器DPTR加一加一从表中可见,指令的字节数与指令周期不是对等的关系从表中可见,指令的字节数与指令周期不是对等的关系返回5)指令长度与执行时间5)指令长度与执行时间指令长度与执行时间136)符号说明符号说明符符 号号含含 义义RnRn表示当前选定寄存器组的工作寄存器表示当前选定寄存器组的工作寄存器R0R0R7R7RiRi表示作为间接寻址的地址指针

13、表示作为间接寻址的地址指针R0R0R1R1#data#data表示表示8 8位立即数,即位立即数,即00H00HFFHFFH#data16#data16表示表示1616位立即数,即位立即数,即0000H0000HFFFFHFFFFHaddr16addr16表示表示1616位地址,用于位地址,用于64K64K范围内寻址范围内寻址addr11addr11表示表示1111位地址,用于位地址,用于2K2K范围内寻址范围内寻址directdirect8 8位直接地址,可以是内部位直接地址,可以是内部RAMRAM区的某一单元或某一专用功能寄存器的地址区的某一单元或某一专用功能寄存器的地址relrel带符号

14、的带符号的8 8位偏移量(位偏移量(-128-128+127+127)bitbit位寻址区的直接寻址位位寻址区的直接寻址位间接寻址寄存器的前缀间接寻址寄存器的前缀/位操作前置,表示位取反,如位操作前置,表示位取反,如 /bit/bit参见参见P51说明说明(X X)X X地址单元中的内容,或地址单元中的内容,或X X作为间接寻址寄存器时所指单元的内容作为间接寻址寄存器时所指单元的内容((X X))以寄存器或以寄存器或X X地址单元中的内容作为地址所指单元的内容地址单元中的内容作为地址所指单元的内容将将 后面的内容传送到前面去后面的内容传送到前面去143.2寻址方式 找到参与运算的数据或数据所在

15、的地址找到参与运算的数据或数据所在的地址的方式,称为寻址方式。的方式,称为寻址方式。寻址方式主要是指源操作数的寻址。寻址方式主要是指源操作数的寻址。15目的地目的地#XXHXXH操作数MOV P1,#55HMOV P1,#55HMOV A,#01HMOV A,#01H#55H55H目的地目的地信信寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址1)立即数寻址16MOV P1,#55H;将立即数55H送P1口 MOV 20H,#55;将立即数55H送20H 单元 MOV A,#0F0H;将立即数0F0H送累加器A MOV R4,#0FH;将立即数0FH送寄存器R4中 MOV R0

16、,#20H;将立即数20H送寄存器R0口AND A,#0FH ;A的内容与立即数0FH与操作OR A,#0F0H;A的内容与立即数0F0H或操作MOV A,#01H;将立即数01H送累加器A中MOV A,#55H;将立即数55H送累加器A中注意:注意:1)#;2)不能作为目的;)不能作为目的;3)注意)注意#0F0H的意义的意义17 MOV A,3AH 直接寻址是指把存放操作数的内存单元的地址直接写直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在在指令中。在MCS-51单片机中,可以直接寻址的存储器单片机中,可以直接寻址的存储器主要有内部主要有内部RAM区和特殊功能寄存器区和特殊功能

17、寄存器SFR区。区。(参见参见P37)2)直接寻址183)寄存器寻址MOVR1,A寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOVR1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。19寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址设R0=3AH,内部RAM3AH中的值是65H,则指令MOVA,R0的执行结果是累加器A的值为65H。目的地目的地目的地目的地寄存器寄存器寄存器寄存器操作数操作数3AH3AH内部内部内部内部RAMRAM3AH3AH

18、65H65H3AH3AHR0R1DPTR寄存寄存器间器间接寻接寻址寄址寄存器存器目的地目的地2 2号号号号信在信在2 2号箱子里号箱子里1 1号号号号注意:注意:1 1 1 1)间接寻址的标志)间接寻址的标志)间接寻址的标志)间接寻址的标志2 2 2 2)R0,R1,DPTRR0,R1,DPTRR0,R1,DPTRR0,R1,DPTR4)寄存器间接寻址20寻址比较MOV P1MOV P1,R0R0MOV P1MOV P1,R0R0MOV P1MOV P1,20H20HMOV P1MOV P1,#20H#20HMOV P1MOV P1,R0R021MOV P1MOV P1,R0R0MOV P1M

19、OV P1,R0R0MOV P1MOV P1,20H20HMOV P1MOV P1,#20H#20HMOV P1MOV P1,R0R022MOV P1MOV P1,R0R0MOV P1MOV P1,R0R0MOV P1MOV P1,20H20HMOV P1MOV P1,#20H#20HMOV P1MOV P1,20H20H23MOV P1MOV P1,R0R0MOV P1MOV P1,R0R0MOV P1MOV P1,20H20HMOV P1MOV P1,#20H#20HMOV P1MOV P1,#20H#20H24寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址MOVC A,

20、A+DPTRMOVC A,A+DPTRMOVC A,A+PCMOVC A,A+PCJMP A+DPTRJMP A+DPTR目的地目的地目的地目的地寄存器寄存器寄存器寄存器操作数操作数内部内部内部内部RAMRAM3AH3AH65H65H3AH3AH基址基址基址基址寄存器寄存器寄存器寄存器12H12H变址变址变址变址寄存器寄存器寄存器寄存器34H34H内部内部内部内部RAMRAM46H46H65H65HADPTRPC46H46H5)变址寻址2526目的地目的地目的地目的地寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址XXHXXH位寻址操作数操作数ORG 2000HORG 2000HSJ

21、MP 54HSJMP 54HSJMP 2056HSJMP 2056H出现的格式!出现的格式!出现的格式!出现的格式!PCPC+54H54HPCPC2002H2002H2002H =2056H2002H =2056HPCPC2056H2056H6)相对寻址27设指令SJMP 54H的机器码80H 54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。28寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址20H20H27H2

22、7H21H21H28H28H21H21H20H20H10 0 0 0 0 0 0 0想一想想一想想一想想一想:如果想使如果想使如果想使如果想使27H27H单元单元单元单元的的的的第第第第3 3位位位位置置置置1 1,该,该,该,该怎么办呢怎么办呢怎么办呢怎么办呢?7)位寻址29单元地址单元地址单元地址单元地址2FH2FH2FH2FH2EH2EH2EH2EH2DH2DH2DH2DH2CH2CH2CH2CH2BH2BH2BH2BH2AH2AH2AH2AH29H29H29H29H28H28H28H28H 26H26H26H26H25H25H25H25H24H24H24H24H23H23H23H23H

23、22H22H22H22H21H21H21H21H20H20H20H20H7F7F77776F6F67675F5F57574F4F474737372F2F27271F1F17170F0F0707 MSBMSBMSBMSB 位地址位地址位地址位地址 LSBLSBLSBLSB7E7E76766E6E66665E5E56564E4E4646 36362E2E26261E1E16160E0E06067D7D75756D6D65655D5D55554D4D454535352D2D25251D1D15150D0D05057C7C74746C6C64645C5C54544C4C4444 34342C2C242

24、41C1C14140C0C04047B7B73736B6B63635B5B53534B4B4343 33332B2B23231B1B13130B0B03037A7A72726A6A62625A5A52524A4A4242 32322A2A22221A1A12120A0A020279797171696961615959515149494141 313129292121191911110909010178787070686860605858505048484040 3030282820201818101008080000位寻址地址表位寻址地址表 例:SETB 3DHSETB 3DHSETB 3DH

25、SETB 3DH 3D3D 3C3C 3B3B3F3F 3E3E3A3A 3939383827H27H30寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址SETB 3DH20H20H27H27H21H21H28H28H21H21H20H20H0 0 0 0 0 0 01 0位地址的表示方式:?313.3数据传送指令按功能,MCS-51指令系统可分为下列5类:数据传送指令(29条)算术运算指令(24条)逻辑运算指令(24条)控制转移指令(17条)位操作指令 (17条)32 数数据据传传送送类类指指令令共共29条条,它它是是指指令令系系统统中中最最活活跃跃、使使用用最最多多的的一一

26、类类指指令令。一一般般的的操操作作是是把把源源操操作作数数传传送送到到目目的的操操作作数数,即即指指令令执执行行后后目目的的操操作作数数改改为为源源操操作作数数,而而源源操操作作数数保保持持不不变变。若若要要求求在在进进行行数数据据传传送送时时,不不丢丢失失目的操作数目的操作数,则可以用交换型传送指令。则可以用交换型传送指令。指令通式:MOV ,目的地址目的地址目的地址目的地址 源地址源地址源地址源地址数数数数 据据据据20H20HA A33 数数据据传传送送类类指指令令不不影影响响进进位位标标志志CY、半半进进位位标标志志AC和和溢溢出出标标志志OV,但但当当传传送送或或交交换换数数据据后后

27、影影响响累累加加器器A的的值值时时,奇偶标志奇偶标志P的值则按的值则按A的值重新设定。的值重新设定。按按数数据据传传送送类类指指令令的的操操作作方方式式,又又可可把把传传送送类类指指令令分分为为3种种类类型型:数数据据传传送送、数数据据交交换换和和堆堆栈栈操操作作,并并使使用用8种种助助记记符符:MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH及及POP。34 1.数据传送到累加器数据传送到累加器A的指令的指令 MOV A,Rn MOV A,direct MOV A,Ri MOV A,data 这组指令的功能是:把源操作数的内容送入累加器A。例如:MOV A,10H,该指令执行

28、时将立即数 10H送入累加器A中。3.3.1 内部内部RAM传送指令传送指令35例3.3.1 已知(A)=20H,(R0)=50H,内部RAM中(40H)=30H,(50H)=10H,指出下列指令执行后相应单元内容的变化情况。MOV A,#40H MOV A,40H MOV A,R0 MOV A,R036 2.数据传送到工作寄存器数据传送到工作寄存器Rn的指令的指令 MOV Rn,A MOV Rn,direct MOV Rn,data 这组指令的功能是:把源操作数的内容送入当前工作寄存器区的R0R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确

29、定,可以是 00H07H、08H0FH、10H17H、18H1FH。例如:MOV R0,A,若当前RS1、RS0 设置为 00(即工作寄存器 0 区),执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。373.数据传送到内部数据传送到内部RAM单元(直接地址)单元(直接地址)MOV direct,A MOV direct,Rn MOV direct,direct MOV direct,Ri MOV direct,data4.数据传送到内部数据传送到内部RAM单元(间接地址)单元(间接地址)MOV Ri,A MOV Ri,direct MOV Ri,data385

30、.16位数传送指令位数传送指令MCS-51指令系统中唯一的一条16位数据传送类指令。MOV DPTR,#data16DPTR是单片机内部SFR中的两个寄存器DPH、DPL组合而成。其中DPH为高八位,DPL为低八位。DPTR是一个专门用于访问外部存储器的间址寄存器。寻址能力为64K(065535)。39例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,#88H40实

31、现外部实现外部RAM和累加器和累加器A之间的数据传送。只有寄存器间接寻之间的数据传送。只有寄存器间接寻址的指令。址的指令。MOVX A,Ri 使用使用Ri寄存器间址寻址范围寄存器间址寻址范围0255h MOVX Ri,A 在硬件电路中在硬件电路中P0口输出口输出8位地址数据。位地址数据。MOVX A,DPTR 使用使用DPTR间址,寻址范围间址,寻址范围065535hMOVX DPTR,A 在硬件电路中,使用在硬件电路中,使用P0口输出低口输出低8位,位,P2口输出高口输出高8位外部位外部RAM地址。地址。3.3.2 外部外部RAM传送指令传送指令41外部外部RAMRAM的字节传送指令举例的字

32、节传送指令举例已知外部已知外部RAM的的88H单元有一个数单元有一个数x,试编程将,试编程将x送外部送外部RAM的的1818H单元。单元。【解解】:外部:外部RAMRAM中的数据是不能直接传送的,因此必须使用两次中的数据是不能直接传送的,因此必须使用两次 MOVXMOVX 指令完成此操作。指令完成此操作。ORG 2000HORG 2000HMOV R0MOV R0,#88H#88H ;为;为8 8位指针赋值位指针赋值MOV DPTRMOV DPTR,#1818H#1818H ;为;为1616位指针赋值位指针赋值MOVX AMOVX A,R0 R0 ;取;取 x x 到累加器到累加器A AMOV

33、X DPTRMOVX DPTR,A A ;x x 送送RAMRAM的的1818h1818h单元单元SJMP$SJMP$;停机;停机ENDEND返回423.3.3 3.3.3 数据交换指令数据交换指令为提供一种方便的为提供一种方便的累加器累加器和和寄存器寄存器或或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 A4743数据交换指令举例

34、数据交换指令举例已知,片外已知,片外RAM 20h单元、内部元、内部RAM 20h单元分元分别有数有数x和和y,试编程互将两数相交程互将两数相交换。MOV R1,#20h ;指;指针赋初初值MOVX A,R1 ;xaXCH A,R1 ;交换交换 a(20h),ya MOVX R1,A ;y(20h)片外片外RAM片内片内RAMy (x)片外片外RAMx (y)(y)x20h20h累加器A123443.3.4 ROM3.3.4 ROM的字节传送指令(查表指令)的字节传送指令(查表指令)这类指令有两条,都属于变址寻址指令。这类指令有两条,都属于变址寻址指令。MOVC A,A+DPTR MOVC A

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

36、待查的表中数据地址并取出。(远程查表指令)的表中数据地址并取出。(远程查表指令)第二条指令是以程序计数器第二条指令是以程序计数器PCPC为基地址。由于为基地址。由于PCPC的内容与该指令的内容与该指令在在ROMROM中的位置有关,所以一旦该指令在程序中的位置确定,其中的位置有关,所以一旦该指令在程序中的位置确定,其PCPC的的值也就确定。(近程查表指令)(值也就确定。(近程查表指令)(P62P62)45ROMROM的字节传送指令举例的字节传送指令举例已知累加器已知累加器A中存有中存有09范围内的数,范围内的数,试用查表指令编写出查找出该数平方的试用查表指令编写出查找出该数平方的程序。程序。采用

37、采用DPTR作基址寄存器作基址寄存器:设平方表的首地址为设平方表的首地址为2000h,累加器,累加器A中的内容恰好是查表的偏移量。首先将中的内容恰好是查表的偏移量。首先将表的起始地址表的起始地址2000h送入送入DPTR中。中。MOV DPTR,#2000H ;指针赋值;指针赋值 MOVC A,A+DPTR ;平方值送;平方值送AROM01491625364964812000h2009h2008h2007h2006h2005h2004h2003h2002h2001h463.3.5 3.3.5 堆栈操作指令堆栈操作指令堆栈操作是一种特殊的数据传送指令。堆栈操作是一种特殊的数据传送指令。堆栈:一个

38、用来保存程序断点、数据的特殊的存储区域。在堆栈:一个用来保存程序断点、数据的特殊的存储区域。在MCS-MCS-5151单片机中,栈区是占用片内单片机中,栈区是占用片内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(dire

39、ct),SP-1SP【注意注意】:寻址方式址方式为直接直接寻址,所以址,所以 PUSH APUSH A 是是错误的,的,应当是当是PUSH ACCPUSH ACC或或PUSH 0E0HPUSH 0E0H,同理同理:PUSH R0PUSH R0也是也是错误的。的。进栈是堆是堆栈向上向上“生生长”的的过程,即程,即SP+1SP+1;出;出栈则相反。相反。系系统上上电时,SP=07hSP=07h。SPSP的的值可以根据需要可以根据需要进行修改,以适行修改,以适应具体具体编程的需要。在确定程的需要。在确定栈区位置区位置时要考要考虑对数据区的影响,以避免数据区的影响,以避免数据区与数据区与栈区冲突。区冲

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

41、的设计中,对主程序的数据进行保护。还可以中,对主程序的数据进行保护。还可以根据堆栈操作的特点完成一些特殊的操根据堆栈操作的特点完成一些特殊的操作。作。【举例举例】:设片内:设片内RAMRAM的的30h30h单元存有单元存有x x,40h40h单元存有单元存有y y。试将两个单元内容互换。试将两个单元内容互换。push 30hpush 30hpush 40hpush 40hpop 30hpop 30hpop 40hpop 40hRAMx y y xyx栈底栈底SP=07h40h30h49内部内部RAMRAM前前128128字节,字节,SFRSFR之间可以相互传送,但最多只之间可以相互传送,但最多

42、只允许允许1 1个操作数使用寄存器间接寻址。个操作数使用寄存器间接寻址。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寄存器的寻址方式(乘法除法除外)。寄存器的寻址方式(乘法除法除外)。MOV A,B MOV A,B 直接寻址直接寻址注意注意 A A 和

43、和 ACC ACC 的区别:的区别:MOV 3FH,A ;MOV 3FH,A ;寄存器寻址(寄存器寻址(2 2字节指令)字节指令)MOV 3FH,ACC ;MOV 3FH,ACC ;直接寻址直接寻址 (3 3字节指令)字节指令)80518051数据传送指令的几点说明:数据传送指令的几点说明:503.4 3.4 算术运算指令算术运算指令 不带进位的加法指令不带进位的加法指令(ADD)1、加法指令:、加法指令:带进位的加法指令带进位的加法指令 (ADC)加加1指令指令 (INC)2、减法指令减法指令:带进位的减法指令带进位的减法指令 (SUBB)减减1指令指令 (DEC)3、十进制调整指令十进制调

44、整指令:(DA A)4、乘法和除法指令乘法和除法指令:(MUL AB ;DIV AB)513.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),也可以是,也可以是

45、有符号数有符号数(-128-128+127+127)。3 3,不,不论编程者使用的数据是有符号数程者使用的数据是有符号数还是无符号数,是无符号数,CPUCPU都将它都将它们视为有符号数(有符号数(补码)进行运算并影响行运算并影响PSWPSW。52不带进位的加法指令举例不带进位的加法指令举例(一一)试分析执行下列指令后累加器试分析执行下列指令后累加器A和和PSW中各标志的变化。中各标志的变化。MOV A,#19H Cy=0;ADD A,#66H AC=0 OV=C7C6=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 0

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

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

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

49、NC主要用于修改数据指针等控制、循环语句中使用。主要用于修改数据指针等控制、循环语句中使用。56编程举例编程举例已知已知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 R1MOV R1,#M2#M2 ;x2x2指针赋初值

50、指针赋初值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单元单元RAMX2 data815X2 data07X1 da

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁