ImageVerifierCode 换一换
格式:PPT , 页数:105 ,大小:2.82MB ,
文档编号:5020937      下载积分:29 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-5020937.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(晟晟文业)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(单片机的指令系统课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

单片机的指令系统课件.ppt

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)指令长度与执行时间10 双字节指令(双字节指令(4646条):条):指令的操作码

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

10、15-8,data7-0 或者:指令中分别包含或者:指令中分别包含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指令的字节多是否意味着指令周期就长?指令的字节多是否意味着指令

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

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

13、某一单元或某一专用功能寄存器的地址relrel带符号的带符号的8 8位偏移量(位偏移量(-128-128+127+127)bitbit位寻址区的直接寻址位位寻址区的直接寻址位间接寻址寄存器的前缀间接寻址寄存器的前缀/位操作前置,表示位取反,如位操作前置,表示位取反,如 /bit/bit参见参见P51说明说明(X X)X X地址单元中的内容,或地址单元中的内容,或X X作为间接寻址寄存器时所指单元的内容作为间接寻址寄存器时所指单元的内容((X X))以寄存器或以寄存器或X X地址单元中的内容作为地址所指单元的内容地址单元中的内容作为地址所指单元的内容将将 后面的内容传送到前面去后面的内容传送到前

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

15、作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区和特殊功能寄存器区和特殊功能寄存器SFR区。区。(参见参见P37)88H3AH内部 RAM88HA2)直接寻址183)

16、寄存器寻址MOV R1,A寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。19寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址设R0=3AH,内部RAM 3AH中的值是65H,则指令MOV A,R0的执行结果是累加器A的值为65H。R0R1DPTR4)寄存器间接寻址2021222324寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址ADPTRPC5)变址寻址2555H程序存储

17、区02HA0302H03HDPTR00H0302H26寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址6)相对寻址27设指令SJMP 54H的机器码80H 54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。54H程序存储区54HA2001H20HPC02H2056HXX80H2056H2000H28寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址10 0 0 0 0 0 0 07)位寻址297F7F

18、77776F6F67675F5F57574F4F474737372F2F27271F1F17170F0F0707 7E7E76766E6E66665E5E56564E4E4646 36362E2E26261E1E16160E0E06067D7D75756D6D65655D5D55554D4D454535352D2D25251D1D15150D0D05057C7C74746C6C64645C5C54544C4C4444 34342C2C24241C1C14140C0C04047B7B73736B6B63635B5B53534B4B4343 33332B2B23231B1B13130B0B0303

19、7A7A72726A6A62625A5A52524A4A4242 32322A2A22221A1A12120A0A020279797171696961615959515149494141 313129292121191911110909010178787070686860605858505048484040 3030282820201818101008080000 例:3D3D 3C3C 3B3B3F3F 3E3E3A3A 3939383827H27H30寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址SETB 3DH0 0 0 0 0 0 01 0位地址的表示方式:?31按功

20、能,MCS-51 指令系统可分为下列 5 类:32 数据传送类指令共数据传送类指令共29条条,它是指令系统中最活跃、它是指令系统中最活跃、使用最多的一类指令。使用最多的一类指令。一般的操作是把源操作数传送到一般的操作是把源操作数传送到目的操作数目的操作数,即指令执行后目的操作数改为源操作数即指令执行后目的操作数改为源操作数,而而源操作数保持不变。源操作数保持不变。若要求在进行数据传送时若要求在进行数据传送时,不丢失不丢失目的操作数目的操作数,则可以用交换型传送指令。则可以用交换型传送指令。指令通式:MOV ,33 数据传送类指令不影响进位标志数据传送类指令不影响进位标志CY、半进位标志半进位标

21、志AC和溢出标志和溢出标志OV,但当传送或交换数据后影响累加器但当传送或交换数据后影响累加器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 这组指令的

22、功能是:把源操作数的内容送入累加器A。例如:MOV A,10H,该指令执行时将立即数 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中的某一个寄存器。指令

23、中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确定,可以是 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单元(间接地址)单元(间接地址)

24、MOV Ri,A MOV Ri,direct MOV Ri,data385.16位数传送指令位数传送指令 MCS-51指令系统中唯一的一条16位数据传送类指令。MOV DPTR,#data16 DPTR是单片机内部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,7

25、0H MOV 70H,50H MOV 40H,R0 MOV R1,#88H40 实现外部实现外部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

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

27、OVX AMOVX A,R0 R0 ;取;取 x x 到累加器到累加器A AMOVX 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

28、 A,Ri ;A30(Ri)30 SWAP A ;A30 A4743数据交换指令举例数据交换指令举例 已知,片外已知,片外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的字节传送指令(查表指令)的字节传送指令(查表指令)这类

29、指令有两条,都属于变址寻址指令。这类指令有两条,都属于变址寻址指令。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 PC+1,A (A+PC)该指令也称为该指令也称为“查表查表”指令。在指令。在ROMROM中建立一个数据表,可以使用中建立一个数据表,可以使用DPTRDPTR、PCPC作为数据表格的基地址。作为数据表格的基地址。在第一条指令中:用在第一条指令中:用DPTRDPTR作为基地址。使用前,先将数据表的作为基地址。使用前,先将数据表的首地址送入首地址送

30、入DPTRDPTR中,累加器中,累加器A A作为偏移量。由两者数据相加得到待查作为偏移量。由两者数据相加得到待查的表中数据地址并取出。(远程查表指令)的表中数据地址并取出。(远程查表指令)第二条指令是以程序计数器第二条指令是以程序计数器PCPC为基地址。由于为基地址。由于PCPC的内容与该指令的内容与该指令在在ROMROM中的位置有关,所以一旦该指令在程序中的位置确定,其中的位置有关,所以一旦该指令在程序中的位置确定,其PCPC的的值也就确定。(近程查表指令)(值也就确定。(近程查表指令)(P62P62)45ROMROM的字节传送指令举例的字节传送指令举例已知累加器已知累加器A中存有中存有09

31、范围内的数,范围内的数,试用查表指令编写出查找出该数平方的试用查表指令编写出查找出该数平方的程序。程序。采用采用DPTR作基址寄存器作基址寄存器:设平方表的首地址为设平方表的首地址为2000h,累加器,累加器A中的内容恰好是查表的偏移量。首先将中的内容恰好是查表的偏移量。首先将表的起始地址表的起始地址2000h送入送入DPTR中。中。MOV DPTR,#2000H ;指针赋值;指针赋值 MOVC A,A+DPTR ;平方值送;平方值送AROM01491625364964812000h2009h2008h2007h2006h2005h2004h2003h2002h2001h463.3.5 3.3

32、.5 堆栈操作指令堆栈操作指令 堆栈操作是一种特殊的数据传送指令。堆栈操作是一种特殊的数据传送指令。堆栈:一个用来保存程序断点、数据的特殊的存储区域。在堆栈:一个用来保存程序断点、数据的特殊的存储区域。在MCS-MCS-5151单片机中,栈区是占用片内单片机中,栈区是占用片内RAMRAM的存储空间,具体栈位置由指针的存储空间,具体栈位置由指针SPSP来确定(系统上电时,来确定(系统上电时,SP=07H)SP=07H)。(1 1)进栈操作:)进栈操作:PUSH directPUSH direct ;SP+1SP+1SP,(direct)SP,(direct)(SP)(SP)(2 2)出栈操作:)

33、出栈操作:POP directPOP direct ;(SP)(SP)(direct),SP-1SP(direct),SP-1SP【注意注意】:寻址方式为直接寻址,所以寻址方式为直接寻址,所以 PUSH APUSH A 是错误的,应当是是错误的,应当是PUSH ACCPUSH ACC或或PUSH 0E0HPUSH 0E0H,同理同理:PUSH R0PUSH R0也是错误的。也是错误的。进栈是堆栈向上进栈是堆栈向上“生长生长”的过程,即的过程,即SP+1SP+1;出栈则相反。;出栈则相反。系统上电时,系统上电时,SP=07hSP=07h。SPSP的值可以根据需要进行修改,以适应具体的值可以根据需

34、要进行修改,以适应具体编程的需要。在确定栈区位置时要考虑对数据区的影响,以避免编程的需要。在确定栈区位置时要考虑对数据区的影响,以避免数据区与栈区冲突。数据区与栈区冲突。47堆栈操作指令举例(一)堆栈操作指令举例(一)下面是一个下面是一个BCD码转换为二进制的子程序码转换为二进制的子程序BCDB中有关堆栈操作的中有关堆栈操作的例子。在这里,进栈操作是为了保护主程序中相关寄存器中的数据,例子。在这里,进栈操作是为了保护主程序中相关寄存器中的数据,因为子程序要使用这些寄存器。因为子程序要使用这些寄存器。org 0800hbcdb:push PSWpush ACCpush B :pop Bpop A

35、CCpop PSWRETRAMBACCPSW栈底栈底SP48堆栈操作指令举例(二)堆栈操作指令举例(二)堆栈操作指令除了可以在子程序的设计堆栈操作指令除了可以在子程序的设计中,对主程序的数据进行保护。还可以中,对主程序的数据进行保护。还可以根据堆栈操作的特点完成一些特殊的操根据堆栈操作的特点完成一些特殊的操作。作。【举例举例】:设片内:设片内RAMRAM的的30h30h单元存有单元存有x x,40h40h单元存有单元存有y y。试将两个单元内容互换。试将两个单元内容互换。push 30hpush 30hpush 40hpush 40hpop 30hpop 30hpop 40hpop 40hRA

36、Mx y y xyx栈底栈底SP=07h40h30h49内部内部RAMRAM前前128128字节,字节,SFRSFR之间可以相互传送,但最多只之间可以相互传送,但最多只允许允许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 错误错误8051

37、8051没有提供没有提供B B寄存器的寻址方式(乘法除法除外)。寄存器的寻址方式(乘法除法除外)。MOV A,B MOV A,B 直接寻址直接寻址注意注意 A A 和和 ACC ACC 的区别:的区别:MOV 3FH,A ;MOV 3FH,A ;寄存器寻址(寄存器寻址(2 2字节指令)字节指令)MOV 3FH,ACC ;MOV 3FH,ACC ;直接寻址直接寻址 (3 3字节指令)字节指令)503.4 3.4 算术运算指令算术运算指令 不带进位的加法指令不带进位的加法指令(ADD)1、加法指令:、加法指令:带进位的加法指令带进位的加法指令 (ADC)加加1指令指令 (INC)2、减法指令减法指

38、令:带进位的减法指令带进位的减法指令 (SUBB)减减1指令指令 (DEC)3、十进制调整指令十进制调整指令:(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,根据编程者的需要,根据

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

40、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 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=C7 C

41、6=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 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 A

42、DDC A,Ri ;A+(Ri)+CyA ADDC A,#data ;A+data+CyA【注意注意】:这里的:这里的CyCy是指令执行前的是指令执行前的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均无影响。均无影响。

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

44、:MOV R0MOV R0,#M1#M1 ;x1x1指针赋初值指针赋初值MOV R1MOV 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相

45、加相加MOV R0MOV R0,A A ;结果送结果送M1+1M1+1单元单元RAMX2 data815X2 data07X1 data815X1 data07M1M1+1M2M2+1573.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,

46、#data ;A data Cy A58 使用减法指令要注意的问题 在在MCS-51MCS-51的指令系统中没有不带的指令系统中没有不带CyCy的减法,所以在使用的减法,所以在使用SUBBSUBB指令前必须使用一条清除指令前必须使用一条清除CyCy的指令:的指令:CLR CCLR C。59减法指令应用举例试分析执行下列指令后累加器试分析执行下列指令后累加器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 =11

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

48、、循环语句中使用)。循环语句中使用)。613.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指令只适用于加法指令的调整。指令只适用于加法指令的调整。62十进

49、制调整指令应用举例(一)十进制调整指令应用举例(一)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 0 1 0 0B 结果为结果为144h(1包含在包

50、含在Cy)【注意注意】:144H是用是用16进制数来表示十进制,既进制数来表示十进制,既BCD码。码。63十进制调整指令应用举例(二)十进制调整指令应用举例(二)2 2、BCDBCD减法运算:减法运算:由于由于DA ADA A 指令只能对指令只能对BCDBCD码的加法进行调整,所以码的加法进行调整,所以遇到遇到BCDBCD码的减法时就要将其码的减法时就要将其减法变为加法减法变为加法运算,然后再使用运算,然后再使用DA DA A A指令进行调整。指令进行调整。减法变加法就是使用减法变加法就是使用BCDBCD码的补码运算法则:码的补码运算法则:将将被减数被减数-减数减数变为变为被减数被减数+减数的

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|