单片机程序设计语言分类_第1页
单片机程序设计语言分类_第2页
单片机程序设计语言分类_第3页
单片机程序设计语言分类_第4页
单片机程序设计语言分类_第5页
已阅读5页,还剩176页未读 继续免费阅读

下载本文档

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

文档简介

1、l3.1 单片机程序设计语言分类l3.2 MCS-51汇编指令系统l3.3 MCS-51汇编语言程序设计l3.4 MCS-51的C语言程序设计l3.5 Keil C51与汇编语言的混合编程第三章第三章 MCS-51MCS-51的软件系统设计的软件系统设计 3.1 单片机程序设计语言分类指令和程序设计语言指令和程序设计语言 指令:指令:用来操纵计算机完成特定功能的命令用来操纵计算机完成特定功能的命令 指令系统:指令系统:全部指令的集合全部指令的集合 程序:程序:按人的要求编排的指令序列按人的要求编排的指令序列 程序设计:程序设计:编写程序的过程编写程序的过程 程序设计语言:程序设计语言:实现人机

2、交互的基本工具,实现人机交互的基本工具,分为机器语言、汇编语言、高级语言分为机器语言、汇编语言、高级语言机器语言:机器语言:用二进制编码表示每条指令,是计用二进制编码表示每条指令,是计算机能直接识别的语言。其特点是占用的内存算机能直接识别的语言。其特点是占用的内存小、执行速度快小、执行速度快汇编语言:汇编语言:用助记符来表示机器指令的一种程用助记符来表示机器指令的一种程序设计语言。汇编语言与机器的指令系统密切序设计语言。汇编语言与机器的指令系统密切相关,不同的机型其指令系统不同。相关,不同的机型其指令系统不同。高级语言:高级语言:通用性强,可以在不同的机器上运通用性强,可以在不同的机器上运行。

3、用高级语言编写的程序要用编译程序或解行。用高级语言编写的程序要用编译程序或解释程序翻译成机器语言程序方能执行。释程序翻译成机器语言程序方能执行。 3.1 3.1 单片机程序设计语言分类单片机程序设计语言分类3.2 MCS-513.2 MCS-51汇编指令系统汇编指令系统3.2.1 MCS-513.2.1 MCS-51的指令格式的指令格式 标号:标号: 操作码操作码 目的操作数目的操作数 ,源操作数源操作数;注释注释 例例: :LOOP:LOOP: MOVMOV A A, #0FFH#0FFH ; LP LP : : MOV MOV A,A, R0 R0 ;将将R0R0的内容送的内容送A A操作

4、码操作码: : 表示该指令所实现的操作功能,一般由表示该指令所实现的操作功能,一般由2-52-5个英个英文字母表示。例如文字母表示。例如ORLORL,ADDADD,LCALLLCALL等。等。3.2.1 MCS-513.2.1 MCS-51的指令格式的指令格式MOV_move传送传送XCH_exchange交换交换ANL_and logic与逻辑运算与逻辑运算XRL_exclusive or异或运算异或运算MUL_Multiply乘法乘法RR_rotate right右循环右循环SJMP_short jump短跳转短跳转RET_return 子程序返回子程序返回操作数操作数: : 表示参与操作

5、的数据来源和目的单元。操作数可表示参与操作的数据来源和目的单元。操作数可以是一个立即数,也可以是一个内存单元或者是一个以是一个立即数,也可以是一个内存单元或者是一个寄存器单元。寄存器单元。 操作码和第一个操作数之间一般用一个或几个空操作码和第一个操作数之间一般用一个或几个空格隔开,而操作数与操作数之间用逗号隔开。格隔开,而操作数与操作数之间用逗号隔开。 操作数可以有操作数可以有1 1个,个,2 2个,个或没有。大部分指个,个或没有。大部分指令具有令具有2 2个操作数,其中第一操作数为个操作数,其中第一操作数为“目的操作数目的操作数”,第二操作数为第二操作数为“源操作数源操作数”。3.2.1 M

6、CS-513.2.1 MCS-51的指令格式的指令格式注释行:注释行: 说明指令在程序中的作用。起标记作用,对汇编程说明指令在程序中的作用。起标记作用,对汇编程序不存在任何意义,方便用户阅读序不存在任何意义,方便用户阅读. 如果需要对指令进行注释说明的话,在最后一个操如果需要对指令进行注释说明的话,在最后一个操作数后加一个分号,分号后面是注释。作数后加一个分号,分号后面是注释。 如:如: MOV A , 60H ; (60H)A标号标号: 由由18个字母或数字构成,个字母或数字构成,以字母开头以字母开头,以,以“:”结尾,标号可有可无,它仅仅代表了该指令所在的地结尾,标号可有可无,它仅仅代表了

7、该指令所在的地址,便于源程序编写过程中使用该地址。址,便于源程序编写过程中使用该地址。3.2.1 MCS-513.2.1 MCS-51的指令格式的指令格式MCS-51MCS-51指令系统指令系统 5151单片机指令系统共有单片机指令系统共有111111条指令条指令v 按其功能按其功能可分为数据传送、算术运算、逻可分为数据传送、算术运算、逻辑运算、控制转移、位操作等辑运算、控制转移、位操作等5 5大类。大类。 v 按按指令长度:指令长度:单字节指令单字节指令4949条、双字节指条、双字节指令令4646条、三字节指令只有条、三字节指令只有1616条条。 v 按指令执行时间:按指令执行时间:单机器周

8、期指令单机器周期指令6464条,条,双机器周期指令双机器周期指令4545条,乘除条,乘除2 2条指令的执行时条指令的执行时间为间为4 4个机器周期。个机器周期。 3.2 MCS-513.2 MCS-51汇编指令系统汇编指令系统寻址:寻址:确定操作数的具体地址。寻址方式:寻址方式:确定参与指令操作的数据的方式。它是汇编语言程序设计的基础。 MCS-51单片机共有种寻址方式: 直接寻址、立即寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。3.2.2 MCS-513.2.2 MCS-51的指令系统的寻址方式的指令系统的寻址方式、直接寻址、直接寻址: 指令中直接给出操作数的单元地址(一般

9、是片内指令中直接给出操作数的单元地址(一般是片内RAM单元)单元) 。 如:MOV,65;片内RAM65H单元的内容送入累加器。其工作原理如下图所示:程序存储器内部RAM0110111011100011000011111110010101100101操作码操作数66H65H64H指令执行完后AE3H图3.1 MCS-51单片机直接寻址方式工作原理直接寻址方式的寻址空间:直接寻址方式的寻址空间:()内部()内部RAMRAM的低的低128128字节字节()特殊功能寄存器()特殊功能寄存器SFRSFR。 对于特殊功能寄存器,既可以使用他们的地址,对于特殊功能寄存器,既可以使用他们的地址,也可以使用他

10、们的名字。也可以使用他们的名字。 例如:指令例如:指令 MOV P3MOV P3, 和指令和指令 MOV B0HMOV B0H,的功能是一样的。,的功能是一样的。 (P3P3口寄存器的地址就是口寄存器的地址就是B0HB0H)。)。注意:直接寻址是访问特殊功能寄存器的唯一方式。注意:直接寻址是访问特殊功能寄存器的唯一方式。、立即寻址、立即寻址 指令中所需要的操作数直接以指令字节的形式存指令中所需要的操作数直接以指令字节的形式存放在程序存储器中。放在程序存储器中。 CPUCPU取指令的同时取到所需要的操作数,使得指令取指令的同时取到所需要的操作数,使得指令可以立即得到执行,而不需要额外的取数据的时

11、间,可以立即得到执行,而不需要额外的取数据的时间,因此,这种操作数称为因此,这种操作数称为立即数立即数,这种寻址方式称为,这种寻址方式称为立立即寻址。即寻址。 立即数的表示方法为立即数的表示方法为“#data#data”(8”(8位立即数位立即数) )或或“#data16#data16”(1616位立即数),以区别与直接地址。位立即数),以区别与直接地址。指令举例:指令举例:MOV AMOV A,#30H#30H;执行后;执行后A A中内容为中内容为30H30H其工作原理如图其工作原理如图3.2所示:所示:注意与直接寻址的区别。注意与直接寻址的区别。 立即数一般都是立即数一般都是8 8位,只有

12、一条指令需要位,只有一条指令需要1616位立即数,位立即数, 即:即:MOV DPTRMOV DPTR,#data16#data16, 例如:例如:MOV DPTRMOV DPTR,#2510H#2510H30H程序存储器0111010000110000A指令执行完后操作码操作数图3.2 MCS-51单片机立即寻址方式工作原理3 3、寄存器寻址、寄存器寻址 指令所需操作数存放于某一寄存器中,指令中给出的指令所需操作数存放于某一寄存器中,指令中给出的是寄存器名称。是寄存器名称。 寻址空间:寄存器寻址空间:寄存器R0R7,寄存器,寄存器A,B,CY,DPTR。举例:举例:MOV A,R4 ;指令执

13、行完成后指令执行完成后A的内容为的内容为R4的内容。的内容。其工作原理如图其工作原理如图3.3所示所示:6EH程序存储器内部RAM操作码后三位100决定了使用存储器R4R401101110111000110000111A指令执行完后11101100图3.3 MCS-51单片机寄存器寻址方式工作原理4 4、寄存器间接寻址、寄存器间接寻址 指令中所需的操作数的地址存放于某个寄存器中,指指令中所需的操作数的地址存放于某个寄存器中,指令中给出该寄存器的名称。令中给出该寄存器的名称。 可用于间接寻址的寄存器只有可用于间接寻址的寄存器只有R0R0,R1R1和和DPTRDPTR,其中,其中R0R0,R1R1

14、用于寻址内部用于寻址内部RAMRAM的低的低128128字节,或外部数据存储器的低字节,或外部数据存储器的低256256字节,字节,不能用于寻址特殊功能寄存器不能用于寻址特殊功能寄存器。DPTRDPTR用于寻址用于寻址片外数据存储器的整个片外数据存储器的整个64KB64KB空间。空间。指令举例:指令举例:MOV A,R0 ;(;(R0)A工作原理:工作原理: 内部RAM内部RAMR2R1R051H 50H4FH50H89H48H89H指令执行完后A图3.4 MCS-51单片机寄存器间接寻址方式工作原理48H5、变址寻址、变址寻址 由基址寄存器由基址寄存器+ +变址寄存器共同构成的一种间接变址寄

15、存器共同构成的一种间接寻址方式。寻址方式。 在在MCS-51MCS-51系列单片机中,系列单片机中,基址基址寄存器为寄存器为DPTRDPTR或或PCPC,变址变址寄存器为寄存器为累加器累加器,两者相加形成,两者相加形成1616位程位程序存储器地址作为操作数地址。序存储器地址作为操作数地址。 该寻址方式该寻址方式只能寻址程序存储器只能寻址程序存储器,因此只能读,因此只能读出数据而不能写入数据。常用这种寻址方式读出程出数据而不能写入数据。常用这种寻址方式读出程序存储器中的表格数据,因此,这种寻址方式的指序存储器中的表格数据,因此,这种寻址方式的指令往往又被称为令往往又被称为查表指令查表指令。变址寻

16、址方式的寻址空间:变址寻址方式的寻址空间:64KB64KB程序空间程序空间 内部RAM程序存储器ROM30H02H50H89H48H89H0281H0280H027FHDPH DPLA指令执行完后A48H图3.5 MCS-51单片机变址寻址方式工作原理指令举例:指令举例: MOVC A,A+DPTR工作原理如图工作原理如图3.5所示:所示: 6 6、相对寻址、相对寻址 相对寻址是以当前程序计数器相对寻址是以当前程序计数器PCPC的值加上指令规定的的值加上指令规定的偏移量偏移量relrel,从而构成实际操作数地址的寻址方法。,从而构成实际操作数地址的寻址方法。 相对寻址只适用于相对转移指令。相对

17、寻址只适用于相对转移指令。在执行相对转移指在执行相对转移指令时令时PCPC的内容为加上偏移量的内容为加上偏移量relrel,所得结果即为目标程序,所得结果即为目标程序地址。偏移量地址。偏移量relrel用用8 8位带符号补码表示,范围为:位带符号补码表示,范围为:- -128128127127。 在编写程序时,常用标号代替在编写程序时,常用标号代替relrel值,由编译器在编值,由编译器在编译时自动计算得出译时自动计算得出relrel值。值。指令举例:指令举例:JZ table ;CJZ table ;C为为0 0时转移到标号时转移到标号tabletable所代表的所代表的指令处执行指令处执行

18、这种寻址方式的寻址空间:这种寻址方式的寻址空间:64KB64KB程序存储器程序存储器7 7、位寻址、位寻址 指令的操作对象是位,而指令中给出的是该位的指令的操作对象是位,而指令中给出的是该位的位地址。位地址。单片机内部位寻址区单片机内部位寻址区: 一个是片内一个是片内RAMRAM中字节地址是中字节地址是20H20H2FH2FH的位寻址区,的位寻址区,共共128128个位,对应的位地址为个位,对应的位地址为00H00H7FH7FH;另一个区域为;另一个区域为特殊功能寄存器中能被特殊功能寄存器中能被8 8整除的字节地址,共整除的字节地址,共9393个位,个位,对应的位地址为对应的位地址为80H-F

19、7H80H-F7H(不是全部)。(不是全部)。举例:举例:SETB 20H ;将位地址为将位地址为20H20H的位(内部的位(内部RAM 24HRAM 24H 单元的单元的D0D0位)置成位)置成1 1 CLR P1.0 ;将将P1P1口的口的D0D0位(位地址为位(位地址为80H80H)清零)清零位寻址方式的寻址空间:单片机的所有可位寻址区位寻址方式的寻址空间:单片机的所有可位寻址区3.2 MCS-513.2 MCS-51汇编指令系统汇编指令系统3.2.3 MCS-51汇编指令简介汇编指令简介 按按功能功能不同可以分为不同可以分为5 5类:类:数据传送类指令(数据传送类指令(2929条)条)

20、算术运算类指令(算术运算类指令(2424条)条)逻辑操作类指令(逻辑操作类指令(2424条)条)控制转移类指令(控制转移类指令(1717条)条)位操作类指令位操作类指令 (1717条)条) 3.2.3.1 数据传送类指令数据传送类指令数据传送是一种数据传送是一种最基本、最重要最基本、最重要的操作,在实的操作,在实际应用中,数据传送指令应用最频繁。际应用中,数据传送指令应用最频繁。 数据传送类指令数据传送类指令一般不影响程序状态字寄存器一般不影响程序状态字寄存器PSWPSW。只有在往累加器只有在往累加器A A中送数时有可能影响中送数时有可能影响PSWPSW的奇偶位的奇偶位P P,而其它位不会受影

21、响。,而其它位不会受影响。 传送类指令共有传送类指令共有2929条,可以分成两大类。条,可以分成两大类。 一是采用一是采用MOVMOV操作符的,称为操作符的,称为一般传送指令一般传送指令; 二是采用非二是采用非MOVMOV操作符,称为操作符,称为特殊传送指令特殊传送指令,如:如:MOVCMOVC、MOVXMOVX、PUSHPUSH、POPPOP、XCHXCH、XCHDXCHD及及SWAPSWAP。1 1、一般数据传送指令:、一般数据传送指令:内部数据传送指令,共内部数据传送指令,共16条条一般数据传送指令的数据传递关系:一般数据传送指令的数据传递关系: 图图3.6 MCS-513.6 MCS-

22、51单片机一般数据传送指令数据传递关系图单片机一般数据传送指令数据传递关系图 由上图我们可以总结出几条规律:由上图我们可以总结出几条规律:立即数立即数可以为累加器可以为累加器A A、寄存器、寄存器RnRn和和DPTRDPTR、直接寻址或间接、直接寻址或间接寻址的寻址的RAMRAM赋值,赋值,只能作为源操作数只能作为源操作数,不能作为目的操作数。,不能作为目的操作数。累加器累加器A A可以和寄存器可以和寄存器RnRn、直接寻址或间接寻址的、直接寻址或间接寻址的RAMRAM之间相之间相互赋值,既可以作为源操作数,也可以作为目的操作数。互赋值,既可以作为源操作数,也可以作为目的操作数。直接寻址的直接

23、寻址的RAMRAM可以和累加器可以和累加器A A、寄存器、寄存器RnRn、直接寻址或间接、直接寻址或间接寻址的寻址的RAMRAM之间相互赋值,既可以作为源操作数,也可以作之间相互赋值,既可以作为源操作数,也可以作为目的操作数。为目的操作数。间接寻址的间接寻址的RAMRAM可以和累加器可以和累加器A A、直接寻址的、直接寻址的RAMRAM之间相互赋之间相互赋值,既可以作为源操作数,也可以作为目的操作数。但不能值,既可以作为源操作数,也可以作为目的操作数。但不能和寄存器和寄存器RnRn与间接寻址的与间接寻址的RAMRAM之间相互赋值。之间相互赋值。寄存器寄存器RnRn可以和累加器可以和累加器A A

24、、直接寻址的、直接寻址的RAMRAM之间相互赋值,既之间相互赋值,既可以作为源操作数,也可以作为目的操作数。但不能和寄存可以作为源操作数,也可以作为目的操作数。但不能和寄存器器RnRn与间接寻址的与间接寻址的RAMRAM之间相互赋值。之间相互赋值。【例例3.1】 设内部RAM 50H单元的内容为44H,分析下面指令执行完毕后各单元的内容。MOV R1 ,#50H ;R1内容为50H MOV A ,R1 ;A的内容为50H单元的内 容即A的内容为44HMOV 30H,A ;30H单元的内容为44HMOV 20H,#20H ;20H单元的内容为20HMOV 44H,30H ;44H单元的内容为44

25、H特别说明:特别说明:1.1.一条指令中不能同时出现两个工作寄存器:一条指令中不能同时出现两个工作寄存器:非法非法指令:指令:MOV R1MOV R1,R2R2MOV R2MOV R2,R0 R0 2. 间址寄存器只能使用间址寄存器只能使用 R0R0、R1R1。 非法非法指令:指令: MOV AMOV A,R2 R2 3. SFRSFR区只能直接寻址,不能用寄存器间接寻址。区只能直接寻址,不能用寄存器间接寻址。非法非法指令:指令: MOV R0MOV R0,# #8080H HMOV AMOV A,R0 R0 4. 指令表:指令表:只有教材中指令表中的指令才有对应指令只有教材中指令表中的指令才

26、有对应指令代码,计算机才能执行。编程时,不能随意创造发明代码,计算机才能执行。编程时,不能随意创造发明指令。指令。2、特殊数据传送指令、特殊数据传送指令 根据功能又可以分成: 外部RAM读写指令 MOVX ROM查表指令 MOVC 堆栈操作指令 PUSH POP 交换指令 XCH XCHD SWAP (1)外部)外部RAM读写指令读写指令MOVXMCS-51MCS-51单片机对片外扩展的数据存储器单片机对片外扩展的数据存储器RAMRAM或或I/OI/O接口进行接口进行数据传送时使用的指令。数据传送时使用的指令。采用采用寄存器间接寻址寄存器间接寻址,通过,通过累加累加器器A A来完成。来完成。片

27、外数据的传送是通过片外数据的传送是通过P0P0口和口和P2P2口配合来完成的,其中口配合来完成的,其中P2P2口输出高口输出高8 8位地址,位地址,P0P0口分时输出低口分时输出低8 8位地址和数据。这类位地址和数据。这类数据传送指令共有数据传送指令共有4 4条指令,如下表所示:条指令,如下表所示:特别说明:特别说明:读片外读片外RAMRAM的的MOVXMOVX操作将使操作将使P3.7P3.7引脚引脚/RD/RD输出有效信号,以输出有效信号,以便选通片外便选通片外RAMRAM单元使相应单元的数据从单元使相应单元的数据从P0P0口读入累加器中。口读入累加器中。写片外写片外RAMRAM的的MOVX

28、MOVX操作将使操作将使P3.6P3.6引脚引脚/WR/WR输出有效信号,以输出有效信号,以便选通片外便选通片外RAMRAM单元使累加器单元使累加器A A的内容从的内容从P0P0口输出并写入到口输出并写入到相应的片外相应的片外RAMRAM单元。单元。 以以1616位位DPTRDPTR为间址寄存器的外部为间址寄存器的外部RAMRAM访问,可以寻址整个访问,可以寻址整个64K64K字节的片外字节的片外RAMRAM空间。指令执行时,在空间。指令执行时,在DPHDPH中的高中的高8 8位地位地址由址由P2P2口输出,在口输出,在DPLDPL中的低中的低8 8位地址,由位地址,由P0P0口分时输出,口分

29、时输出,并由并由ALEALE信号将低信号将低8 8位地址锁存。位地址锁存。 以以R0R0或或R1R1为间址寄存器的外部为间址寄存器的外部RAMRAM访问,可以访问访问,可以访问256256个字节的片外个字节的片外RAMRAM空间。指令执行时,低空间。指令执行时,低8 8位地址在位地址在R0R0或或R1R1中由中由P0P0口分时输出,并由口分时输出,并由ALEALE信号将低信号将低8 8位地址锁存。当需位地址锁存。当需要访问超过要访问超过256256字节的外字节的外RAMRAM空间时,需要人工利用空间时,需要人工利用P2P2口更口更换高换高8 8位地址(也称页地址)。位地址(也称页地址)。【例例

30、3.2】将片外RAM 2010H单元中的内容送到片外RAM 2020单元中。 分析:读分析:读2010H中内容中内容A写数据到写数据到2020H中中程序程序( (方法一)如下:方法一)如下: MOV DPTR,#2010H ;给DPTR赋起始地址 MOVX A,DPTR ;读2010H中数据 MOV DPTR,#2020H ;给DPTR赋目的地址 MOVX DPTR,A ;将A中数据写入2020H中程序程序( (方法二)如下:方法二)如下: MOV P2,#20H ;输出高8位地址 MOV R0,#10H ;置读低8位间接地址 MOVX A,R0 ;读2010H中数据 MOV R1,#20H

31、;置写低8位间接地址 MOVX R1,A ;将A中数据写入2020H中(2)ROM查表指令查表指令MOVC程序存储器中除了存放程序代码外,还可存放一些常数,程序存储器中除了存放程序代码外,还可存放一些常数,这些常数的数据结构一般称为这些常数的数据结构一般称为表格表格。查表指令就是把存放在程序存储器(查表指令就是把存放在程序存储器(ROMROM)中的表格数据)中的表格数据读出,传送到累加器读出,传送到累加器A A 的指令。的指令。查表指令采用查表指令采用变址寻址方式变址寻址方式,共有,共有2 2条指令,如下表所示:条指令,如下表所示:特别说明:特别说明:DPTRDPTR内容为基址的查表指令内容为

32、基址的查表指令 首先执行首先执行1616位无符号数加法,将获得的位无符号数加法,将获得的基址与变址之和基址与变址之和作为作为1616位的程序存储器地址位的程序存储器地址,然后将该地址单元的内容传送,然后将该地址单元的内容传送到累加器到累加器A A。指令执行后。指令执行后DPTRDPTR的内容不变。的内容不变。 特点:可访问整个特点:可访问整个64KB64KB的程序存储器空间。的程序存储器空间。PCPC内容为基址的查表指令内容为基址的查表指令 取出该指令后取出该指令后PCPC的内容增的内容增1 1,以增,以增1 1后的当前值去执行后的当前值去执行1616位无符号数加法,将获得的基址与变址之和作为

33、位无符号数加法,将获得的基址与变址之和作为1616位的程序位的程序存储器地址。然后将该地址单元的内容传送到累加器存储器地址。然后将该地址单元的内容传送到累加器A A。指。指令执行后令执行后PCPC的内容除了刚才的自动加的内容除了刚才的自动加1 1外没有其它变化。外没有其它变化。 优点:优点:不改变不改变PCPC的状态,根据的状态,根据A A的内容取得表格常数。的内容取得表格常数。 缺点:缺点:一、表格只能存放在查表指令以下的一、表格只能存放在查表指令以下的256256个单元内。个单元内。 二、当表格首地址与本指令间有其他指令时,须要二、当表格首地址与本指令间有其他指令时,须要调整偏移量,调整量

34、为下一条指令的起始地址到表格首址之调整偏移量,调整量为下一条指令的起始地址到表格首址之间的字节数。间的字节数。【例例3.3】 设外部ROM的3000H单元开始的连续10个字节中已存放有09的平方数,要求根据A中的内容(09)来查找对应的平方值。 SQURE:MOV A,#3 MOV DPTR,#TABLE MOVC A,A+DPTR ;查表 ORG 3000H TABLE: DB 0,1,4,9,16,25,36,49,64,81结果: A (3003H),(A)=09H【例例3.4】阅读下列程序,给出运行结果 ,设(A)=3。 ADD A,#02H ;加调整量 MOVC A,A+PC;查表

35、NOP NOP TAB:DB 66,77,88H,99H,W, 10 结果:(A)=99H,显然,2条NOP指令没有时,不需调整。【例例3.5】累加器A中存有压缩的BCD码,将其转化为八段显示码,并将结果送至P1口(送高位)和P2口(送低位)。如A中数据为48H,则P1口连接的数码管显示4,P2口连接的数码管显示8(假设所使用的数码管都是共阳极数码管)。 分析:这是一个典型的查表程序。所显示数字与所输出的二进制数(显示码)之间的关系为:参考程序为:参考程序为: ORG 0000h SJMP START ORG 0030H START: MOV R0,A ;备份;备份BCD数数 ANL A,#0

36、FH ;取低位;取低位 MOV DPTR,#TABLE MOVC A,A+DPTR ;取低位显示码;取低位显示码 MOV P2,A ;从;从P2口输出显示码口输出显示码 MOV A,R0 ;恢复;恢复BCD数数 ANL A,#0F0H ;取高位;取高位 SWAP A MOVC A,A+DPTR ;取高位显示码;取高位显示码 MOV P1,A ;从;从P1口输出显示码口输出显示码 SJMP $ TABLE: DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH END (3)堆栈操作指令)堆栈操作指令PUSH和和POP 堆栈操作有进栈进栈和出栈出栈两种操作,

37、即压入和弹出数据。常用于现场保护和恢复。这类指令共有2条,如下表所示:说明:说明:对累加器的保护与恢复要使用ACC,而不是A,因为前者代表了直接寻址,后者代表了寄存器寻址。如: PUSH ACC POP ACC(4)交换指令)交换指令XCH、XCHD和和 SWAP 数据交换类指令完成的传送是数据交换类指令完成的传送是双向的双向的,涉及传送的双,涉及传送的双方互为源地址和目的地址,指令执行后,双方数据互方互为源地址和目的地址,指令执行后,双方数据互换。数据交换指令共换。数据交换指令共5 5条,完成累加器条,完成累加器A A和内部和内部RAMRAM单元单元之间的字节或半字节交换。如下表所示:之间的

38、字节或半字节交换。如下表所示:【例例3.6 】 设(A)=57H,(20H)=68H,(R0)=30H,(30H)=39H,求下列指令的执行结果。(1)XCH A,20H ; 结果:(A)=68H,(20H)=57H(2)XCH A,R0 ; 结果: (A)=39H,(30H)=57H(3)XCH A,R0 ; 结果: (A)=30H,(R0)=57H(4)XCHD A,R0 ; 结果: (A)=59H,(30H)=37H(5)SWAP A ; 结果: (A)=75H【例例3.7 】设内部RAM 40H、41H单元中连续存放有4个压缩的BCD码数据(12 34) ,试编写程序将这4个BCD码倒

39、序排列(43 21),如图3.7所示。图图3.7 例例3.7任务图任务图程序如下:程序如下:MOV A,41HSWAP AXCH A,40HSWAP AMOV 41H,A分析:流程如下:分析:流程如下: A(41H)A的高低4位倒序(A)(40H)A的高低4位倒序(41H)A图3.8 例3.7流程图【例例3.8 】试用不同方法将片内RAM 30H单元与40H单元中的内容进行互换。 方法方法1(直接地址传送(直接地址传送法):法): MOV 31H,30H MOV 30H,40H MOV 40H,31H方法方法2(间接地址传送法):(间接地址传送法): MOV R0,#40H MOV R1,#3

40、0H MOV A,R0 MOV B,R1 MOV R1,A MOV R0,B方法方法3(字节交换传送法):(字节交换传送法): MOV A,30H XCHA,40H MOV 30H,A方法方法4(堆栈传送法):(堆栈传送法): PUSH 30H PUSH 40H POP30H POP40H1 1MOV AMOV A,#1000H#1000H;A1000HA1000H2 2MOVX AMOVX A,1000H1000H;A(1000H)A(1000H)片外片外RAM3 3MOVC AMOVC A,1000H1000H;A(1000H)A(1000H)片外片外ROM4 4MOVX 60HMOVX

41、60H,A A;片外;片外RAM(60H)ARAM(60H)A5 5MOV R0MOV R0,60H60H;片内;片内RAMRAM:(61H)(60H)(61H)(60H) MOV 61H MOV 61H,R0R06.6. XCH R1 XCH R1,R2R2;R1R2R1R27.7. MOVX DPTR MOVX DPTR,#2000H#2000H;DPTR2000HDPTR2000H8.8. MOVX 60H MOVX 60H,DPTRDPTR;片内;片内RAMRAM片外片外RAMRAM习题:习题:找出指令错误并改正:找出指令错误并改正:3.2.3.2 算术运算指令算术运算指令算术运算包括

42、加、减、乘、除四则运算,共算术运算包括加、减、乘、除四则运算,共2424条,助记符条,助记符8 8种。种。 算术运算指令一般影响算术运算指令一般影响PSWPSW中的中的CYCY、ACAC、OVOV、P P 标志位。标志位。进位(借位)标志进位(借位)标志CYCY为无符号整数的多字节加法、减法、为无符号整数的多字节加法、减法、移位等操作提供了方便;溢出标志移位等操作提供了方便;溢出标志OVOV可方便的控制补码运可方便的控制补码运算;辅助进位标志算;辅助进位标志ACAC则可用于则可用于BCDBCD码运算。算术运算指令对码运算。算术运算指令对标志位的影响情况如下表所示:标志位的影响情况如下表所示:注

43、:符号符号表示相应的指令影响该标志位,表示相应的指令影响该标志位,0 0表示相应的指令对该标志位表示相应的指令对该标志位清清0 0,x x表示相应的指令对该标志位没有影响。表示相应的指令对该标志位没有影响。 加加1 1指令(指令(INCINC)和减)和减1 1指令(指令(DECDEC)中只有对累加器的操作()中只有对累加器的操作(INC AINC A和和DEC ADEC A)对奇偶位)对奇偶位P P有影响,对其它标志没有影响,而其它的加有影响,对其它标志没有影响,而其它的加1 1指令和减指令和减1 1指令对标志位也没有影响。指令对标志位也没有影响。 关于关于DA指令需要说明的是:指令需要说明的

44、是:DA指令的功能是对累加器指令的功能是对累加器A中刚进行的两个中刚进行的两个BCD码加码加法的结果进行十进制调整法的结果进行十进制调整(加加6修正修正)。 该指只能紧跟该指只能紧跟在加法指令(在加法指令(ADD/ADDC)后进行并且两个加数必须)后进行并且两个加数必须已经是已经是BCD码,而且也只能对累加器码,而且也只能对累加器A中结果进行调中结果进行调整。整。当累加器当累加器A中的低中的低4位数出现了非位数出现了非BCD码码(10101111)或低)或低4位产生进位(位产生进位(AC=1),则应),则应在低在低4位加位加6调整,以产生低调整,以产生低4位正确的位正确的BCD结果。结果。 当

45、累加器当累加器A中的高中的高4位数出现了非位数出现了非BCD码码(10101111)或高)或高4位产生进位(位产生进位(CY=1),则应),则应在高在高4位加位加6调整,以产生高调整,以产生高4位正确的位正确的BCD结果。结果。 注意,注意,DA指令不能对减法进行十进制调整。指令不能对减法进行十进制调整。【例例3.9】若(A)0101 0110B,表示的BCD码为(56)BCD ,(R2)0110 0111B,表示的BCD码为(67)BCD ,(CY)0。 执行以下指令: ADD A,R2 DA A 请分析指令执行后的结果。 根据题意分析程序指令执行的过程如下图所示: 【例例3.10 】试编制

46、2个十六进制数加法程序,假定和数超过双字节 (21H 20H)+(31H 30H) 42H 41H 40H 分析:先低字节作不带进位求和,再作带进位高字节求和。 程序如下: MOV A,20H ADD A,30H MOV 40H,A ;(20H)+(30H) 40H MOV A,21H ADDC A,31H MOV 41H,A ;(21H)+(31H) +(C)41H MOV A,#00H ;准备处理最高位 ADDC A,#00H ;记入最高位 MOV 42H,A【例例3.11 】双字节无符号数相减( 31H 30H)(41H 40H) (31H 30H). 程序如下:程序如下:MAIN:CL

47、R C ;CY清零 MOV R0, #30H ;设被减数地址 MOV R1,#40H ;减数地址 MOV A,R0 ;取被减数低字节 SUBB A,R1 ;被减数低字节减去减数低字节 MOV R0,A ;存低字节差 INC R0 ;指向被减数高字节31H INC R1 ;指向减数高字节41H MOV A,R0 ;取被减数高字节 SUBB A,R1 ;被减数高字节减去减数高字节并减 ;去低字节相减时产生的借位 MOV R0,A ;存高字节差HERE:SJMP HERE【例例3.123.12 】双字节乘法程序,要求:(R0R1)(R2)R3R4R5 分析:设(R0)=J, (R1)=K, (R2)

48、=L,则:程序如下:程序如下:MOV A,R1 MOV B,R2 MUL AB ;K*L MOV R5,A ;KL低R5 MOV R4,B ;KL高暂存R4 MOV A,R0 MOV B,R2MUL AB ;J*LADD A,R4 MOV R4,A ;KL高+JL低R4MOV A,BADDC A,#00H MOV R3,A ;JL高+(C) R3思考题:思考题:如何实现两个多字节数据的乘除运算。如何实现两个多字节数据的乘除运算。例:被乘数存于例:被乘数存于30H3130H31中,乘数存于中,乘数存于H40H41HH40H41H中,积存于中,积存于50H51H52H53H50H51H52H53H

49、中中 原理:原理:(X1(X1* *2 28 8+X2)+X2)* *(Y1(Y1* *2 28 8+Y2)+Y2) =X1Y1 =X1Y1* *2 21616+X2Y1+X2Y1* *2 28 8+X1Y2+X1Y2* *2 28 8+X2Y2+X2Y2 设地址值大的为高字节地址,程序如下:设地址值大的为高字节地址,程序如下:MOVMOVR0,#04HR0,#04HMOVMOVR1,#50HR1,#50HPPP:PPP:MOVMOVR1,#00HR1,#00HINCINCR1R1DJNZDJNZR0,PPPR0,PPPMOVMOVA,30HA,30HMOVMOVB,40HB,40HMULMU

50、LABABMOVMOV50H,A50H,AMOVMOV51H,B51H,BMOVMOVA,30HA,30HMOVMOVB,41HB,41HMULMULABABADDADD A,51H A,51HMOVMOV51H,A51H,AMOVMOVA,BA,BADDC A,52HADDC A,52HMOVMOV52H,A52H,AMOVMOVA,#00HA,#00HADDCADDCA,53HA,53HMOVMOV53H,A53H,AMOVMOVA,31HA,31HMOVMOVB,40HB,40HMULMULABABADDADDA,51HA,51HMOVMOV51H,A51H,AMOVMOVA,BA,BA

51、DDC A,52HADDC A,52HMOVMOV52H,A52H,AMOVMOVA,#00HA,#00HADDCADDCA,53HA,53HMOVMOV53H,A53H,AMOVMOVA,31HA,31HMOVMOVB,41HB,41HMULMULABABADDADDA,52HA,52HMOVMOV52H,A52H,AMOVMOVA,BA,BADDC A,53HADDC A,53HMOVMOV53H,A53H,AJCJCOVEROVEROVER:OVER: 【例例3.13 】利用除法指令进行代码转换。设一个8位无符号二进制数存放在内部RAM的30H单元中,将其转化为10进制数据。百位,十位,

52、个位分别存放在40H,41H,42H中。分析: (30H)/100商(百位)(40H) 余数/10 商(十位)(41H) 余数 (个位)(42H)程序如下:MOV R0,#40H ;要存放的首地址MOV A,30HMOV B,#64H ;(除数为100)DIV ABMOV R0,A ;除以100后的商即为百位数MOV A,B ;余数送至AMOV B,#0AHDIV ABINC R0 ;指向41H MOV R0,AINC R0 ;指向42HMOV R0,B 3.2.3.3 逻辑操作类指令逻辑操作类指令 逻辑操作类指令主要用于完成计算机的逻辑操作逻辑操作(包括逻辑与,逻辑或,异或,求反,移位等)功

53、能,共24条,如下表所示:注:注:符号符号“”表示两个数按位进行逻辑与,符号表示两个数按位进行逻辑与,符号“”表示表示两个数按位进行逻辑或,符号两个数按位进行逻辑或,符号“ ”“ ”表示两个数按位进行表示两个数按位进行逻辑异或,逻辑异或,“ ”“ ”表示累加器表示累加器A A的内容按位取反。的内容按位取反。逻辑逻辑“与与”指令常常用于屏蔽字节中的某些位指令常常用于屏蔽字节中的某些位( (给某些位给某些位清零清零) )。若清除某位,则用若清除某位,则用“0”0”与该位进行逻辑与该位进行逻辑“与与”,若保留某位,则用若保留某位,则用“1”1”与该位进行逻辑与该位进行逻辑“与与”。 例如例如: :

54、若(若(P1P1)=C5H =11000101B=C5H =11000101B,为屏蔽,为屏蔽P1P1口的高口的高4 4位,需执行指令位,需执行指令: : ANL P1, #0FH ANL P1, #0FH 指令执行结果为:指令执行结果为: (P1)=05H=00000101B(P1)=05H=00000101BA逻辑逻辑“或或”指令常常用于使字节中的某些位置指令常常用于使字节中的某些位置“1”1”。若置若置“1”1”某位,则用某位,则用“1”1”与该位进行逻辑与该位进行逻辑“或或”,若保留某,若保留某位,则用位,则用“0”0”与该位进行逻辑与该位进行逻辑“或或”。 例如例如: : 将将P1P

55、1口的低口的低5 5位设置成累加器位设置成累加器A A的低的低5 5位,而位,而P1P1口高口高3 3位保位保持不变,需执行下列程序指令持不变,需执行下列程序指令: : ANL A, #00011111B ;A ANL A, #00011111B ;A高高3 3位清零位清零, ,低低5 5位不变位不变 ANL P1, #11100000B ;P1ANL P1, #11100000B ;P1高高3 3位不变位不变, ,低低5 5位清零位清零 ORL P1, AORL P1, A逻辑逻辑“异或异或”指令常用于使字节中的某些位取反。指令常用于使字节中的某些位取反。若用若用“1”1”与某位进行逻辑与某

56、位进行逻辑“异或异或”则该位取反,若保留某位,则用则该位取反,若保留某位,则用“0”0”与该位进行逻辑与该位进行逻辑“异或异或”。例如例如: : 若若(A)=B5H=10110101B (A)=B5H=10110101B ,执行下列程序指令,执行下列程序指令: : XRL A, #0F0H XRL A, #0F0H ; A A的高的高4 4位取反,低位取反,低4 4位保持不位保持不 ; ; 变变(A)=45H(A)=45H 注:注:“RL A” RL A” 使累加器使累加器A A的各位循环左移的各位循环左移1 1位相当于原内容乘位相当于原内容乘2 2为左移,为左移,“RR A”RR A”使累加

57、器使累加器A A的各位循环右移的各位循环右移1 1位相当于原内容除位相当于原内容除2 2。预先清零预先清零CYCY,采用带进位位的左移和右移,能够保留乘除产生的进,采用带进位位的左移和右移,能够保留乘除产生的进位和余数。位和余数。 例例: : 设设(A)=00000111B=07H (A)=00000111B=07H ,(,(CYCY)= 0= 0,则执行指令,则执行指令: : RL A RL A ; (A A)= 00001110B=0EH= 00001110B=0EH,(,(CYCY)=0=0 RRC A RRC A ; (A A)= 00000111B=07H= 00000111B=07

58、H,(,(CYCY)=0=0 RRC A RRC A ; (A A)= 00000011B =03H= 00000011B =03H,(,(CYCY)=1=1A7 A0A7 A0A7 A0CYCYA7 A0RL ARR ARRC ARLC A图3.10 4种移位指令原理图【例例3.14】设40H单元中存放的是一个16位二进制数的低8位, 41H单元中存放的是这个16位二进制数的高8位(假设这个数小于128),请将这个16位二进制数进行左移1位。分析:实现所要求的功能应该按如下图所示的设计思路进行设计分析:实现所要求的功能应该按如下图所示的设计思路进行设计程序指令如下程序指令如下:CLR C ;

59、 CY清零清零MOV R1, #40H ; 设低字节地址设低字节地址MOV A, R1 ; 取低取低8位位RLC A ;低;低8位左移位左移MOV R1, A ; 保存移位后的低保存移位后的低8位字节位字节INC R1 ; 指向高指向高8位地址位地址MOV A, R1 ; 取高取高8位位RLC A ;高;高8位左移,并带进低位左移,并带进低8位左移产生的进位位位左移产生的进位位MOV R1, A ; 保存移位后的高保存移位后的高8位字节位字节 41HCy40H0高8位低8位3.2.3.4 控制转移类指令控制转移类指令 通常情况下,程序的执行是顺序进行的,但也可以根据需要改变程序的执行顺序,这种

60、情况称作程序程序转移。转移。 控制程序的转移要利用转移指令。控制转移指令包括无条件转移指令无条件转移指令,条件转移指令条件转移指令,调用和返回指调用和返回指令令等。这类指令的助记符有AJMP,LJMP,SJMP,JMP,JZ,JNZ,CJNE,DJNZ,RET,RETI,ACALL,LCALL等。利用这些指令可以方便地实现程序的向前、向后跳转,并根据条件分支运行、循环运行、调用子程序等功能。 这类指令共17条, 如下表所列: 注:注:(1 1)LJMPLJMP提供的是提供的是1616位地址位地址,因此程序可以转向,因此程序可以转向64KB64KB的的程序存储器地址空间的任何单元。程序存储器地址

温馨提示

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

评论

0/150

提交评论