版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3 3章章 MCS-51MCS-51的指令系统与的指令系统与汇编语言汇编语言程序设计程序设计 【学习目标】【学习目标】l掌握单片机的掌握单片机的指令系统指令系统,熟悉指令功能、指令格,熟悉指令功能、指令格式以及指令的寻址方式;式以及指令的寻址方式;l理解汇编语言的特点以及与机器语言之间的区别理解汇编语言的特点以及与机器语言之间的区别和联系;和联系;l掌握汇编语言掌握汇编语言程序设计程序设计的步骤、汇编语言程序的的步骤、汇编语言程序的结构;结构;l熟练掌握汇编语言应用程序的开发熟练掌握汇编语言应用程序的开发 【例【例3.113.11】 有一数据块存放起始地址为有一数据块存放起始地址为DATA
2、1DATA1的的片外片外RAMRAM区,数据块以区,数据块以“0”0”为结束标志,要求将其传送到为结束标志,要求将其传送到DATA2DATA2为为起始地址的起始地址的片内片内RAMRAM区。编写程序如下:区。编写程序如下: MOV DPTR, #DATA1 MOV DPTR, #DATA1; ;设置片外设置片外RAMRAM数据块地址指针数据块地址指针 MOV R0MOV R0,#DATA2 #DATA2 ; ;设置片内设置片内RAMRAM数据块地址指针数据块地址指针LOOP:MOVX A, DPTRLOOP:MOVX A, DPTR; ;取数取数 JZ ENDOJZ ENDO; ;检测是否为检
3、测是否为0 0?为?为0 0,转,转ENDOENDO MOV R0 MOV R0,A A; ;不为不为0 0,传送,传送 INC DPTRINC DPTR; ;修改地址指针修改地址指针 INC R0INC R0 AJMP LOOP AJMP LOOPENDO: SJMPENDO: SJMP $ $3.1 MCS-513.1 MCS-51单片机指令系统概述单片机指令系统概述1 1指令的概念指令的概念 指令指令是由是由CPUCPU解释执行,用于控制功能部件完成某种指定操解释执行,用于控制功能部件完成某种指定操作的命令。作的命令。 由于由于CPUCPU只能识别二进制数,所以计算机的指令均由二进制只能
4、识别二进制数,所以计算机的指令均由二进制代码组成,通常把这样的指令称为代码组成,通常把这样的指令称为机器指令机器指令。 一般的计算机都有几十甚至上百条机器指令,这些指令就一般的计算机都有几十甚至上百条机器指令,这些指令就构成了计算机的构成了计算机的指令系统指令系统。不同类型的。不同类型的CPUCPU具有不同的指令系统。具有不同的指令系统。 2 2指令系统说明指令系统说明MCS-51MCS-51的基本指令共的基本指令共111111条条: : 每条指令在程序存储器每条指令在程序存储器ROMROM中占据一定的中占据一定的空间空间,以字节为单位。,以字节为单位。按指令所占的字节来分:按指令所占的字节来
5、分: (1) (1) 单字节单字节指令指令4949条;条; (2) (2) 双字节双字节指令指令4545条;条; (3) (3) 三字节三字节指令指令1717条。条。每条指令在执行时要花去一定的每条指令在执行时要花去一定的时间时间,以机器周期为单,以机器周期为单位。位。按指令的执行时间来分按指令的执行时间来分: (1) (1) 1 1个机器周期个机器周期(1212个时钟振荡周期)指令个时钟振荡周期)指令6464条条 (2) (2) 2 2个机器周期个机器周期(2424个时钟振荡周期)指令个时钟振荡周期)指令4545条条 (3) (3) 4 4个机器周期个机器周期(4848个时钟振荡周期)个时钟
6、振荡周期)只有乘、只有乘、 除两条指令的执行时间。除两条指令的执行时间。 12MHz12MHz晶振晶振: :机器周期为机器周期为1 1 s s。按指令的按指令的功能功能分类,可分为分类,可分为5 5大类:大类: 数据传送类数据传送类(2929条);条);算术运算类算术运算类(2424条)条) 逻辑运算及移位类逻辑运算及移位类(2424););控制转移类控制转移类(1717条)条) 位操作类位操作类(1717条)条)【例【例3.33.3】 设片内设片内RAM 30HRAM 30H、31H31H和和32H32H、33H33H分别存放两个分别存放两个1616位无符号数,要求将两个数的和存入位无符号数
7、,要求将两个数的和存入30H30H、31H31H(低位在前,(低位在前,高位在后)。程序如下:高位在后)。程序如下:【例【例3.33.3】 设片内设片内RAM 30HRAM 30H、31H31H和和32H32H、33H33H分别存放两个分别存放两个1616位无符号数,要求将两个数的和存入位无符号数,要求将两个数的和存入30H30H、31H31H(低位在前,(低位在前,高位在后)。程序如下:高位在后)。程序如下:MOV R0MOV R0,#30H #30H ; ; 设置第一个数地址指针设置第一个数地址指针MOVMOVR1R1,#32H #32H ; ; 设置第二个数地址指针设置第二个数地址指针M
8、OV A, R0MOV A, R0; ; 取低位取低位ADD A, R1ADD A, R1; ; 两数低位相加两数低位相加MOVMOVR0R0,A A ; ; 存存“和和”的低位的低位INCINCR0R0INCINCR1R1MOVMOVA, R0A, R0; ; 取高位取高位ADDC A, R1ADDC A, R1; ; 两数高位相加两数高位相加MOVMOVR0R0,A A ; ; 存存“和和”的高位的高位SJMPSJMP $ $【例【例3.113.11】 有一数据块存放起始地址为有一数据块存放起始地址为DATA1DATA1的的片外片外RAMRAM区,数据块以区,数据块以“0”0”为结束标志,
9、要求将其传送到为结束标志,要求将其传送到DATA2DATA2为为起始地址的起始地址的片内片内RAMRAM区。编写程序如下:区。编写程序如下: MOV DPTR, #DATA1 MOV DPTR, #DATA1; ;设置片外设置片外RAMRAM数据块地址指针数据块地址指针 MOV R0MOV R0,#DATA2 #DATA2 ; ;设置片内设置片内RAMRAM数据块地址指针数据块地址指针LOOP:MOVX A, DPTRLOOP:MOVX A, DPTR; ;取数取数 JZ ENDOJZ ENDO; ;检测是否为检测是否为0 0?为?为0 0,转,转ENDOENDO MOV R0 MOV R0,
10、A A; ;不为不为0 0,传送,传送 INC DPTRINC DPTR; ;修改地址指针修改地址指针 INC R0INC R0 AJMP LOOP AJMP LOOPENDO: SJMPENDO: SJMP $ $例例1 1、LEDLED的控制的控制 使用使用89C5l89C5l的的Port 1Port 1连接连接8 8个个LEDLED,以产生跑马灯的效果。,以产生跑马灯的效果。连接好电路并且完成程序之后,您将可以看到连接好电路并且完成程序之后,您将可以看到8 8个个LEDLED依次依次轮流闪烁。轮流闪烁。 在这次练习中,您将学会如何使用在这次练习中,您将学会如何使用I/O PortI/O
11、Port输出数据,输出数据,以及如何使用循环实现时间延迟。以及如何使用循环实现时间延迟。 电电路路图图#include void delay (void) /* delay 函数函数 */ unsigned char i,j; /* 这个函数执行时间的延迟这个函数执行时间的延迟 */ for (i=0;i255;i+) for(j=0;j255;j+) ;void main (void) unsigned char j=0XFE; /*声明变量声明变量 j ,11111110*/ while (1) /* 无穷循环无穷循环 */ /*依次让依次让LED 0,1,2,3,4,5,6,7闪烁闪烁
12、*/ j=(j1) | 0 x01; if(j=0XFF) j=0XFE; P1 = j; /* 将数值输出到将数值输出到Port1,控制,控制LED亮或灭亮或灭 */ delay(); /* 调用调用 delay 函数函数*/ 标号:操作码标号:操作码 操作数;注释操作数;注释 指令格式指令格式 两部分组成,即两部分组成,即操作码操作码和和操作数操作数。 操作码操作码: :规定指令进行什么操作规定指令进行什么操作 操作数操作数: :指令操作的对象指令操作的对象方括符方括符 表示可选项表示可选项标号代表指令所在地址,标号代表指令所在地址,1-81-8个字母个字母/ /数字,数字,“:”:”结尾
13、结尾 标号标号:操作码操作码 目的操作数目的操作数,源操作数源操作数;注释注释 START:MOV A,#30H START:MOV A,#30H ; ;将立即数将立即数30H30H传送至传送至A A中中 MOV DPTR,#5678H MOV DPTR,#5678H ; ;将立即数将立即数5678H5678H传送至传送至DPTRDPTR 标号:指令的符号地址。标号:指令的符号地址。 用于一段功能程序的识别标记或控制转移地址。用于一段功能程序的识别标记或控制转移地址。指令前的标号代表该指令的地址,是指令前的标号代表该指令的地址,是用符号表示的用符号表示的地址地址。一般用英文字母和数字组成。标号
14、必须用冒号一般用英文字母和数字组成。标号必须用冒号“ :”与操作码分隔。与操作码分隔。 操作码:表示指令的操作功能。操作码:表示指令的操作功能。 操作码用助记符表示,它操作码用助记符表示,它代表了指令的操作代表了指令的操作功能功能。 操作码是指令的必需部分,是指令的核心,不操作码是指令的必需部分,是指令的核心,不可缺少。可缺少。START:MOV A,#30H START:MOV A,#30H ; ;将立即数将立即数30H30H传送至传送至A A中中 MOV DPTR,#5678H MOV DPTR,#5678H ; ;将立即数将立即数5678H5678H传送至传送至DPTRDPTR 操作数:
15、参加操作的数据或数据地址。操作数:参加操作的数据或数据地址。 操作数与操作码之间用空格分隔,操作数与操作数与操作码之间用空格分隔,操作数与 操作数操作数之间用逗号之间用逗号“,”分隔。分隔。 操作数可以是操作数可以是数据数据,也可以是,也可以是数据的地址数据的地址、数据地址数据地址的地址的地址或或操作数的其他信息操作数的其他信息。 操作数可分为目的操作数和源操作数。操作数可分为目的操作数和源操作数。 操作数可用二进制数、十进制数或十六进制操作数可用二进制数、十进制数或十六进制数表示。数表示。 操作数的个数可以是操作数的个数可以是0 03 3个。个。 注释:指令功能说明。注释:指令功能说明。 注
16、释属于非必需项,是为便于阅读,注释属于非必需项,是为便于阅读, 对指令对指令功能作的说明和注解。功能作的说明和注解。 注释必须以注释必须以“;”开始。开始。3 3指令系统中的特殊符号指令系统中的特殊符号1 1)RnRn:选定当前寄存器区的寄存器:选定当前寄存器区的寄存器R0R0R7R7。2 2) :间接寻址方式中,表示间址寄存器的符号。如:间接寻址方式中,表示间址寄存器的符号。如RiRi,表示,表示当前选中的工作寄存器组中可作为地址指针的两个工作寄存器当前选中的工作寄存器组中可作为地址指针的两个工作寄存器R0R0和和R1R1。 3 3)#data#data:8 8位常数,即包含在指令中的位常数
17、,即包含在指令中的8 8位常数。位常数。 4 4)#data16#data16:1616位常数,即包含在指令中的位常数,即包含在指令中的1616位常数。位常数。5 5)directdirect:8 8位片内位片内RAMRAM单元(包括单元(包括SFRSFR)的直接地址。)的直接地址。6 6)addr11addr11:1111位目的地址,用于位目的地址,用于ACALLACALL和和AJMPAJMP指令中。目的地址指令中。目的地址必须放在与下一条指令第一个字节同一个必须放在与下一条指令第一个字节同一个2KB2KB程序存储地址空间程序存储地址空间之内。之内。7 7)addr16addr16:1616
18、位目的地址,用于位目的地址,用于LCALLLCALL和和LJMPLJMP指令中。目的地址指令中。目的地址范围在范围在64KB64KB程序存储器地址空间。程序存储器地址空间。8 8)relrel:补码形式的:补码形式的8 8位地址偏移量,用于相对转移指令中。偏位地址偏移量,用于相对转移指令中。偏移量以下一条指令第一字节地址为基值,偏移范围为移量以下一条指令第一字节地址为基值,偏移范围为-128-128+127+127。9 9)bitbit:片内:片内RAMRAM或特殊功能寄存器的直接寻址位地址。或特殊功能寄存器的直接寻址位地址。MOV DPTR,#5678H MOV R1,#32H MOV A,
19、 R0 3.2 3.2 指令系统的寻址方式指令系统的寻址方式寻址方式寻址方式就是在指令中就是在指令中说明操作数所在地址说明操作数所在地址的方法。的方法。共共7 7种种寻址方式。寻址方式。立即寻址立即寻址直接寻址直接寻址寄存器寻址寄存器寻址寄存器间接寻址寄存器间接寻址变址寻址变址寻址( (基址寄存器基址寄存器+ +变址寄存器间接寻址变址寄存器间接寻址) )相对寻址相对寻址位寻址位寻址1 1立即寻址方式立即寻址方式 指令的指令的操作数是要参与运算的数操作数是要参与运算的数,所以又叫立即数,所以又叫立即数,用用“#”#”号表示。立即数就是存放在程序存储器中的常数。号表示。立即数就是存放在程序存储器中
20、的常数。 例如:例如:ADD AADD A,#34H#34H 把立即数把立即数34H34H与累加器与累加器A A中内容相加,结果送中内容相加,结果送A A中。在中。在MCS-51MCS-51的指令系统中,仅有一条指令的操作数是的指令系统中,仅有一条指令的操作数是1616位的位的立即数,其功能是向地址指针立即数,其功能是向地址指针 DPTRDPTR传送传送1616位的地址,即位的地址,即把立即数的高把立即数的高8 8位送入位送入DPHDPH,低,低8 8位送入位送入DPLDPL。 例如:例如:MOV DPTRMOV DPTR,#3FA6H#3FA6H 表示把表示把1616位二进制表示的地址送给位
21、二进制表示的地址送给DPTRDPTR寄存器。寄存器。2 2直接寻址方式直接寻址方式 直接寻址方式直接寻址方式是指操作数给出的是参与运算的数的地址。是指操作数给出的是参与运算的数的地址。在在MCS-51MCS-51单片机中,直接地址只能用来表示特殊功能寄存器、单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器以及位地址空间。其中,特殊功能寄存器和内部数据存储器以及位地址空间。其中,特殊功能寄存器和位地址空间只能用直接寻址方式来访问。位地址空间只能用直接寻址方式来访问。 例如:例如:MOV AMOV A,3AH3AH 表示把内部表示把内部RAMRAM的的3AH3AH单元的内容传送到单元的
22、内容传送到A A。 寻址范围:寻址范围: (1) (1) 内部内部RAMRAM的的128128个单元个单元(2) (2) 特殊功能寄存器。除了以单元地址的形式外特殊功能寄存器。除了以单元地址的形式外, ,还还可用寄可用寄存器符号存器符号的形式给出。例如:的形式给出。例如: MOV AMOV A,80H80H 与与 MOV AMOV A,P0P0是等价的是等价的。直接寻址是给出操作数的直接地址。直接寻址是给出操作数的直接地址。3 3寄存器寻址方式寄存器寻址方式 操作数在寄存器中操作数在寄存器中 MOV AMOV A,Rn Rn ;(;(RnRn)AA,n=0n=07 7 表示把寄存器表示把寄存器
23、RnRn的内容传送给累加器的内容传送给累加器A A 寻址范围:寻址范围:(1 1)4 4组通用工作寄存区共组通用工作寄存区共3232个工作寄存器。个工作寄存器。(2 2)部分特殊功能寄存器,例如)部分特殊功能寄存器,例如A A、B B 以及数据指针寄以及数据指针寄存器存器DPTRDPTR等。等。MOV A,R0 MOV A,R0 ; ;将将R0R0中的数据传送至中的数据传送至A A中中INC AINC AMUL ABMUL AB【例】【例】这些被寻址寄存器中的内容就是操作数这些被寻址寄存器中的内容就是操作数4. 4. 寄存器间接寻址方式寄存器间接寻址方式 寄存器中存放的是操作数的地址,寄存器中
24、存放的是操作数的地址,在寄存器前加在寄存器前加前缀标志前缀标志“” 。访问访问内部内部RAMRAM或或外部外部RAMRAM的低的低256256个字节个字节时,时,只能采用只能采用R0R0或或R1R1作为作为间址寄存器间址寄存器。例如:。例如: MOV AMOV A,RiRi ;i=0i=0或或1 1 其中其中RiRi中的内容为中的内容为40H40H,把内部,把内部RAM40HRAM40H单元内容送单元内容送A A。寻址范围:寻址范围:(1 1)访问访问内部内部RAMRAM低低128128个个单元,其通用形式为单元,其通用形式为RiRi(2 2)对对外部内部外部内部RAMRAM的的64K64K字
25、节字节的间接寻址,例如:的间接寻址,例如: MOVX AMOVX A,DPTRDPTR(3 3)片外数据存储器的低片外数据存储器的低256256字节字节 例如:例如:MOVX AMOVX A,RiRi(4 4)堆栈区堆栈区 堆栈操作指令堆栈操作指令PUSHPUSH(压栈)和(压栈)和POPPOP(出栈)使用堆栈指针(出栈)使用堆栈指针(SPSP)作间址寄存器)作间址寄存器5 5基址寄存器加变址寄存器间址寻址方式基址寄存器加变址寄存器间址寻址方式 以以1616位寄存器位寄存器DPTRDPTR(或(或PCPC)作为基址寄存器,累加器作)作为基址寄存器,累加器作为变址寄存器。变址时,把两者的内容相加
26、,得到的结果作为变址寄存器。变址时,把两者的内容相加,得到的结果作为操作数的地址。这种方式常用于查表操作。为操作数的地址。这种方式常用于查表操作。 例如:例如: 1 1)以程序计数器当前值为基址)以程序计数器当前值为基址 格式:格式:MOVC AMOVC A,A+PCA+PC 2 2)以数据指针)以数据指针DPTRDPTR为基址为基址 格式:格式:MOVC AMOVC A,A+DPTRA+DPTR 如:其中如:其中A A的原有内容为的原有内容为05H05H,DPTRDPTR的内容为的内容为0400H0400H,该指令,该指令执行的结果是把程序存储器执行的结果是把程序存储器0405H0405H单
27、元的内容传送给单元的内容传送给A A。说明:说明: (1 1)本寻址方式是)本寻址方式是专门针对程序存储器专门针对程序存储器的寻址方式,寻址范的寻址方式,寻址范围可达到围可达到64KB64KB。(2 2)本寻址方式的指令只有本寻址方式的指令只有3 3条条:MOVC AMOVC A,A+DPTRA+DPTRMOVC AMOVC A,A+PCA+PCJMP A+DPTRJMP A+DPTR 6 6相对寻址方式相对寻址方式 在相对寻址的转移指令中,给出了地址偏移量,以在相对寻址的转移指令中,给出了地址偏移量,以“relrel”表表示,即把示,即把PCPC的当前值加上偏移量就构成了程序转移的目的地址:
28、的当前值加上偏移量就构成了程序转移的目的地址: 目的地址目的地址= =转移指令所在的地址转移指令所在的地址 + + 转移指令的字节数转移指令的字节数 + + relrel 偏移量偏移量relrel是一带符号的是一带符号的8 8位二进制数补码数位二进制数补码数。 范围是:范围是:128 +127128 +127 向向地址增加方向地址增加方向最大可转移(最大可转移(127+127+转移指令字节)个单元地址,转移指令字节)个单元地址, 向向地址减少方向地址减少方向最大可转移(最大可转移(128-128-转移指令字节)个单元地址。转移指令字节)个单元地址。 注意:注意:1 1)“当前当前PCPC值值”
29、指程序中下一条指令所在的首地址,是一指程序中下一条指令所在的首地址,是一个个1616位数;位数;2 2)符号)符号“rel”rel”表示表示“偏移量偏移量”, ,是一个带符号的单字节数是一个带符号的单字节数, ,范围是范围是:-128+127(80H7FH):-128+127(80H7FH)在实际编程中,在实际编程中,“rel” rel” 通常用标号代替通常用标号代替例:例:2000H:SJMP 08H ;在实际编程中,在实际编程中,“rel” rel” 通常用标号代替通常用标号代替例:例:SJMP LOOP1SJMP LOOP1例:例:2000H2000H:SJMP 08HSJMP 08H
30、; 原原PCPC值为值为2000H2000H;执行这条指令后的当前;执行这条指令后的当前PCPC值为值为2002H2002H,relrel为为08H08H。2002H+08H=200AH2002H+08H=200AH,转移目的地址为,转移目的地址为200AH200AH,程,程序就跳转至序就跳转至200AH200AH去执行了。去执行了。右图为右图为SJMP 08HSJMP 08H相对寻址相对寻址示意图。示意图。;将位地址;将位地址07H(07H(字节字节地址地址20H20H中最高位中最高位) )中的数据传送至进中的数据传送至进位位位位CyCy。 7. 7. 位寻址方式位寻址方式 位寻址是对内位寻
31、址是对内RAMRAM和特殊功能寄存器中的可寻址位和特殊功能寄存器中的可寻址位进行操作的寻址方式。进行操作的寻址方式。指令中直接给出了操作数所在指令中直接给出了操作数所在的位地址。的位地址。例:例: CLR P1.0 CLR P1.0 ;(P1.0) 0(P1.0) 0 SETB ACC.7 SETB ACC.7 ;(ACC.7) 1(ACC.7) 1 CPL C CPL C ;( C ) NOT( C )( C ) NOT( C )MOV C,07HMOV C,07H 注意:注意: 1 1)位地址里的数据只可能是一个)位地址里的数据只可能是一个 0 0 或或 1 1 2 2)有的位地址十分明确
32、)有的位地址十分明确, ,如如 P1.0, ACC.7P1.0, ACC.7等等, ,有的位地址有的位地址则则“不太明确不太明确”,如:,如: MOV AMOV A,17H ; (A)(17H),17H17H ; (A)(17H),17H是是字节地址字节地址 MOV ACC.0MOV ACC.0,17H ;(ACC.0)(17H),17H ;(ACC.0)(17H),这里这里ACC.0 ACC.0 是是位位地址地址所以该指令中的所以该指令中的17H17H是是22H22H单元的第单元的第7 7位位3.3 MCS-513.3 MCS-51单片机指令系统单片机指令系统 111111条指令条指令,按功
33、能分类,可分为下面,按功能分类,可分为下面5 5大类大类: (1 1)数据传送类)数据传送类(29(29条条) ) (2 2)算术操作类)算术操作类(24(24条条 (3 3)逻辑运算类)逻辑运算类(24(24条条) ) (4 4)控制转移类)控制转移类(17(17条条) ) (5 5)位操作类)位操作类(17(17条条) ) 这这5大类指令,基本大类指令,基本实现单片机无所不能的实现单片机无所不能的功能!功能!指令中符号的意义指令中符号的意义: :Rn Rn 当前寄存器区的当前寄存器区的8 8个工作寄存器个工作寄存器R0R0R7(n=0R7(n=0 7)7)。Ri Ri 当前寄存器区中可作间
34、接寻址寄存器的当前寄存器区中可作间接寻址寄存器的2 2个寄存个寄存 器器R0R0、R1(i=0,1)R1(i=0,1)。DirectDirect 直接地址,即直接地址,即8 8位的内部位的内部RAMRAM或特殊功能寄存或特殊功能寄存 器的器的字节字节地址。地址。#data#data 包含在包含在指令中的指令中的8 8位立即数位立即数。#data16#data16 包含在包含在指令中的指令中的1616位立即数位立即数。relrel 相对转移指令中的偏移量,为相对转移指令中的偏移量,为8 8位的带符号补位的带符号补 码数。码数。DPTRDPTR 数据指针数据指针,可用作,可用作1616位的数据地址
35、寄存器。位的数据地址寄存器。bitbit 内部内部RAMRAM或特殊功能寄存器中的或特殊功能寄存器中的直接寻址位直接寻址位。C C(或(或CyCy) 进位标志位或位处理机中的累加器。进位标志位或位处理机中的累加器。addr11addr11 1111位目的地址位目的地址addr16addr16 1616位目的地址位目的地址 间接寻址寄存器前缀,如间接寻址寄存器前缀,如RiRi,A+DPTRA+DPTR(X)(X) X X中的内容中的内容。(X)(X) 由由X X寻址的单元中的内容寻址的单元中的内容。 箭头右边的内容被箭头左边的内容所取代。箭头右边的内容被箭头左边的内容所取代。3.3.1 3.3.
36、1 数据传送类指令数据传送类指令 使用最频繁使用最频繁的一类指令的一类指令, ,通用格式:通用格式: MOV MOV , 属属“复制复制” ” ,而,而不是不是“搬家搬家”数据传送类指令数据传送类指令不影响标志位不影响标志位:CyCy、AcAc和和OVOV,影响奇偶标志位影响奇偶标志位P P。 1 1以累加器为目的操作数的指令以累加器为目的操作数的指令MOV A , MOV A , data ; #data (A)data ; #data (A)MOV A, Rn ; (Rn) (A), n=0MOV A, Rn ; (Rn) (A), n=07 7MOV A , Ri ; (Ri) (A)M
37、OV A , Ri ; (Ri) (A),i=0,1i=0,1MOV A , direct ; (direct) (A)MOV A , direct ; (direct) (A) 例如:例如: MOV A , MOV A , 0F5H ;0F5H ; 立即数立即数F5H (A) F5H (A) MOV A , R5 ; (R5) (A) MOV A , R5 ; (R5) (A) MOV A , R0 ; (R0) (A)MOV A , R0 ; (R0) (A)MOV A , 30H ; (30H)MOV A , 30H ; (30H) (A)(A)2. 2. 以以RnRn为目的操作数的指令
38、为目的操作数的指令 MOV Rn,A ; (A)Rn,n=0MOV Rn,A ; (A)Rn,n=07 7 MOV Rn,direct ; MOV Rn,direct ;(directdirect)Rn,n=0Rn,n=07 7 MOV Rn,#dat ; #dataRn,n=0 MOV Rn,#dat ; #dataRn,n=07 7 功能:是把源操作数的内容送入当前一组工作寄存器区的功能:是把源操作数的内容送入当前一组工作寄存器区的R0R0R7R7中的某一个寄存器。中的某一个寄存器。3.3.以直接地址为目的操作数的指令以直接地址为目的操作数的指令 MOV direct,A MOV dire
39、ct,A ; (A)direct; (A)direct MOV direct,Rn MOV direct,Rn;(Rn)direct, n=0;(Rn)direct, n=07 7 MOV direct1,direct2 MOV direct1,direct2; ; MOV direct,Ri MOV direct,Ri ; (Ri)direct; (Ri)direct MOV direct,#data MOV direct,#data; #datadirect; #datadirect 功能:功能:把源操作数送入直接地址指出的存储单元。把源操作数送入直接地址指出的存储单元。directdir
40、ect指指的是内部的是内部RAMRAM或或SFRSFR的地址。的地址。4.4.以间接操作地址为目的操作数的指令以间接操作地址为目的操作数的指令MOV Ri,A ;A(Ri),i=0,1MOV Ri,A ;A(Ri),i=0,1 MOV Ri,direct ; MOV Ri,direct ; (directdirect)(Ri)(Ri) MOV Ri,#data ; #data(Ri) MOV Ri,#data ; #data(Ri)5.165.16位数目标地址传送指令位数目标地址传送指令 MOV DPTR,#data16 ; #data16DPTRMOV DPTR,#data16 ; #dat
41、a16DPTR 唯一的唯一的1616位数据的传送指令位数据的传送指令 , ,立即数的立即数的高高8 8位位送入送入DPHDPH,立即数的,立即数的低低8 8位位送入送入DPLDPL。6 6堆栈操作指令堆栈操作指令 MCS-51MCS-51内部内部RAMRAM中可以设定一个中可以设定一个后进先出后进先出(LIFO-Last LIFO-Last In First OutIn First Out)的区域称作)的区域称作堆栈堆栈. . 堆栈指针堆栈指针SPSP指出指出堆栈的堆栈的栈顶位置栈顶位置。(1)(1)进栈指令进栈指令 PUSH directPUSH direct 其功能是首先将堆栈指针其功能是
42、首先将堆栈指针SPSP的内容加的内容加1 1,指向空单元;,指向空单元;然后将直接寻址单元中的数据压入到然后将直接寻址单元中的数据压入到SPSP所指示的单元中,所指示的单元中,此时,此时,SPSP的内容就是新的栈顶。的内容就是新的栈顶。(2)(2)出栈指令出栈指令 POP directPOP direct 其功能与其功能与PUSHPUSH的相反,即首先将栈顶的相反,即首先将栈顶SPSP所指示的单元内所指示的单元内容弹出到直接寻址单元中,然后将容弹出到直接寻址单元中,然后将SPSP的内容减的内容减1 1,此时,此时SPSP指指向新的栈顶。向新的栈顶。 例如,例如,设设SP=30HSP=30H,(
43、,(50H50H)=8FH=8FH,指令如下:,指令如下:PUSH 50H PUSH 50H ; SP+1SP; SP+1SP,(50H)(31H)(50H)(31H)POP 40HPOP 40H; (31H)(40H); (31H)(40H),SP-1SPSP-1SP例如,例如,设片内设片内RAMRAM(30H30H)=X=X,(,(40H40H)=Y=Y,通过堆栈操作实现,通过堆栈操作实现两单元内容互相交换,程序如下:两单元内容互相交换,程序如下:MOV SP, #1FHMOV SP, #1FHPUSH 30HPUSH 30HPUSH 40HPUSH 40HPOP 30HPOP 30HPO
44、P 40HPOP 40H程序执行结果:(程序执行结果:(30H30H)=Y=Y,(,(40H40H)=X=X。7.7.查表指令查表指令 共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。加变址寄存器间接寻址方式。 (1) MOVC A,A+PC(1) MOVC A,A+PC ; ; ;PC+1PC,(A+PC)A;PC+1PC,(A+PC)A以以PCPC作基址寄存器作基址寄存器,A A的内容的内容作为无符号整数和作为无符号整数和PCPC中的内容(下一条中的内容(下一条指令的起始地址)指令的起始地址)
45、相加后得到一个相加后得到一个1616位的地址,位的地址,该地址指出的程序该地址指出的程序存储单元的内容送到累加器存储单元的内容送到累加器A A。注意:注意:PSENPSEN* *信号有效信号有效。例如例如: : (A)=30H, (A)=30H,执行地址执行地址1000H1000H处的指令处的指令 1000H1000H: MOVC A,A+PCMOVC A,A+PC 本指令占用一个字节,执行结果将程序存储器中本指令占用一个字节,执行结果将程序存储器中1031H1031H的内容送入的内容送入A A。优点:优点:不改变特殊功能寄存器及不改变特殊功能寄存器及PCPC的状态,根据的状态,根据A A的内
46、容就可以取出的内容就可以取出表格中的常数。表格中的常数。缺点:缺点:表格只能存放表格只能存放在该条查表指令后面在该条查表指令后面的的256256个个单元之内单元之内,表格的,表格的大小受到限制,且表格只能被一段程序所利用。大小受到限制,且表格只能被一段程序所利用。(2) MOVC A,A+DPTR ; (2) MOVC A,A+DPTR ; ;(A+DPTR)A;(A+DPTR)A以以DPTRDPTR作为基址寄存器,作为基址寄存器,A A的内容作为无符号数和的内容作为无符号数和DPTRDPTR的内容的内容相加得到一个相加得到一个1616位的地址,把由该地址指出的程序存储器单位的地址,把由该地址
47、指出的程序存储器单元的内容送到累加器元的内容送到累加器A. A. 例如例如:(DPTR)=8100H (A)=40H (DPTR)=8100H (A)=40H 执行指令执行指令 MOVC A,A+DPTRMOVC A,A+DPTR 本指令的本指令的执行结果执行结果只和指针只和指针DPTRDPTR及累加器及累加器A A的内容有关,与该的内容有关,与该指令存放的地址及常数表格存放的地址无关,指令存放的地址及常数表格存放的地址无关,因此表格的大因此表格的大小和位置可以在小和位置可以在64K64K程序存储器中任意安排程序存储器中任意安排,一个表格,一个表格可为可为各个程序块公用。各个程序块公用。两条指
48、令是在两条指令是在MOVMOV的后面加的后面加C C,“C”C”是是CODECODE的第一个字母,即的第一个字母,即代码的意思。代码的意思。【例】【例】 已知已知ROMROM中存有中存有0909的平方表,首地址为的平方表,首地址为2000H2000H,试根,试根据累加器据累加器A A中的数值查找对应的平方值,存入内中的数值查找对应的平方值,存入内RAM 30HRAM 30H。( (设设A=3)A=3) 解:解:若用若用DPTRDPTR作为基址寄存器,可编程如下:作为基址寄存器,可编程如下:1000H1000H:MOV DPTRMOV DPTR,#2000H #2000H ;置;置ROMROM平
49、方表首地址平方表首地址 MOVC AMOVC A,A+DPTR A+DPTR ;A+2000H=2003H(A+2000H=2003H(设设A=3)A=3), ;A=(2003H)=09HA=(2003H)=09H MOV 30H MOV 30H,A A ;平方值存入内;平方值存入内RAM 30HRAM 30H中中 2000H2000H:00H 00H ;平方表:;平方表:0 02 2=0=02001H2001H:01H 01H ; 1 12 2=1 =1 2002H2002H:04H 04H ; 2 22 2=4=42003H2003H:09H 09H ; 3 32 2=9=92004H20
50、04H:10H 10H ; 4 42 2=16=16,16=10H16=10H 2009H2009H:51H 51H ; 9 92 2=81=81,81=51H81=51H8.8.累加器累加器A A与外部数据存储器传送指令与外部数据存储器传送指令 MOVX A,DPTR MOVX A,DPTR ;(DPTR)A,;(DPTR)A,读外部读外部RAM/IORAM/IO MOVX A,Ri MOVX A,Ri ;(Ri)A,;(Ri)A,读外部读外部RAM/IORAM/IO MOVX DPTR,A MOVX DPTR,A;(A)(DPTR),;(A)(DPTR),写外部写外部RAM/IORAM/I
51、O MOVX Ri,A MOVX Ri,A ;(A)(Ri),;(A)(Ri),写外部写外部RAM/IORAM/IO功能:读外部功能:读外部RAMRAM存储器或存储器或I/OI/O中的一个字节,或把中的一个字节,或把A A中一个字节中一个字节的数据写到外部的数据写到外部RAMRAM存储器或存储器或I/OI/O中。中。 注意:伴随着注意:伴随着RDRD* *或或WRWR* *信号有效。信号有效。采用采用DPTRDPTR间接寻址,间接寻址,高高8 8位地址(位地址(DPHDPH)由)由P2P2口输出,低口输出,低8 8位地址位地址(DPLDPL)由)由P0P0口输出。口输出。采用采用RiRi(i=
52、0,1i=0,1)间接寻址)间接寻址,可寻址片外,可寻址片外RAMRAM的的256256个单元。个单元。RiRi内内容由容由P0P0口输出。口输出。MOVMOV后后 “X”X”表示单片机访问的是片外表示单片机访问的是片外RAMRAM存储器或存储器或I/OI/O。内内RAMRAM( (包括特殊功能寄存器包括特殊功能寄存器): ): 用用MOVMOV指令传送;指令传送;外外RAM: RAM: 用用MOVXMOVX指令传送;指令传送;ROM: ROM: 用用MOVCMOVC指令传送。指令传送。 三个不同的存储空间用三种不同的指令传送:三个不同的存储空间用三种不同的指令传送:【例】【例】 按下列要求传
53、送数据:设按下列要求传送数据:设ROM(2000H)=ABHROM(2000H)=ABH (1)ROM 2000H (1)ROM 2000H单元数据送内单元数据送内RAM 10HRAM 10H单元;单元; (2)R0M 2000H(2)R0M 2000H单元数据送外单元数据送外RAM 80HRAM 80H单元;单元; (3)ROM 2000H(3)ROM 2000H单元数据送外单元数据送外RAM 1000HRAM 1000H单元;单元;解解(1)(1):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H MOV A,#00H ;置变址0,A=00H MOVC A,A+DP
54、TR ;读ROM 2000H,A=ABH MOV 10H,A ;存内RAM 10H单元,(10H)=ABH解解(2)(2):MOV DPTR,#1FFFH ;置基址1FFFH,DPTR=1FFFH MOV A,#01H ;置变址01H,A=01H MOVC A,A+DPTR ;读ROM 2000H,A=ABH NOV R0,#80H ;置外RAM间址,R0=80H MOVX R0,A ;写外RAM 80H,外RAM(80H)=ABH解解(3)(3):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H MOV A,#00H ;置变址0,A=00H MOVC A,A+DPTR
55、 ;读ROM 2000H,A=ABH MOV DPH,1OH ;修改外RAM地址,DPTR=1000H MOVX DPTR,A ;写外RAM 1000H,外RAM(1000H)=ABH9 9交换指令交换指令(1 1)字节交换指令)字节交换指令 XCH A,RnXCH A,Rn XCH A,directXCH A,direct XCH A,RiXCH A,Ri例如例如,已知,已知R0=15HR0=15H,A=46HA=46H,(,(15H15H)=50H=50H, 执行指令执行指令XCH AXCH A,R0R0程序执行的结果:程序执行的结果:A=50HA=50H,(15H15H)=46H=46H
56、。 执行下列指令:执行下列指令: XCH A,R7 ;(A)XCH A,R7 ;(A)与与(R7)(R7)互换互换 XCH A,40H ;(A)XCH A,40H ;(A)与与(40H)(40H)互换互换 XCH A,R0 ;(A)XCH A,R0 ;(A)与与(R0)(R0)互换互换(2 2)半字节交换指令)半字节交换指令 XCHD A,RiXCHD A,Ri 累加器的低累加器的低4 4位与内部位与内部RAMRAM低低4 4位交换。例如:位交换。例如:例如,已知例如,已知R0=20HR0=20H,A=5AHA=5AH,片内,片内RAMRAM(20H20H)=46H=46H, 执行指令执行指令
57、XCHD AXCHD A,R0R0程序执行结果:程序执行结果:A=56HA=56H,(,(20H20H)=4AH=4AH。(3 3)累加器)累加器A A的高的高4 4位与低位与低4 4位内容互换指令位内容互换指令 SWAP SWAP A A ; A.3; A.3A.0A.0 A.7 A.7A.4A.4该指令的功能是,将该指令的功能是,将A A的高、低两个半字节相互交换的高、低两个半字节相互交换3.3.2 3.3.2 算术操作类指令算术操作类指令 单字节的加、减、乘、除法指令,都是针对单字节的加、减、乘、除法指令,都是针对8 8位二进制无符位二进制无符号数。执行的结果对号数。执行的结果对CyCy
58、、AcAc、OVOV 三种标志位有影响。三种标志位有影响。但增但增1 1和减和减1 1指令不影响上述标志。指令不影响上述标志。1 1加法指令加法指令,(,(不带不带CyCy加法指令加法指令) )(4 4条)条) ADD A,Rn ;A+(Rn)AADD A,Rn ;A+(Rn)A,n=0n=07 7 ADD A,direct ;A+(direct)A ADD A,direct ;A+(direct)A ADD A,Ri ;A+(Ri)A,i=0,1 ADD A,Ri ;A+(Ri)A,i=0,1 ADD A,#data ;A+#dataAADD A,#data ;A+#dataA 一个加数总是
59、来自累加器一个加数总是来自累加器A A,而另一个加数可由不同,而另一个加数可由不同的寻址方式得到。结果总是放在的寻址方式得到。结果总是放在A A中。中。使用加法指令时,使用加法指令时,要注意累加器要注意累加器A A中的运算结果对各个标志中的运算结果对各个标志位的影响:位的影响:(1 1)如果)如果位位7 7有进位有进位,则置,则置“1”1”进位标志进位标志CyCy,否则清,否则清“0”Cy0”Cy(2 2)如果)如果位位3 3有进位有进位,置,置“1”1”辅助进位标志辅助进位标志AcAc,否则清,否则清“0”Ac0”Ac(AcAc为为PSWPSW寄存器中的一位)寄存器中的一位)(3 3)如果位
60、如果位6 6有进位,而位有进位,而位7 7没有进位,或者位没有进位,或者位7 7有进位,而有进位,而位位6 6没有,则溢出标志位没有,则溢出标志位OVOV置置“1”1”,否则,否则OVOV清清“0” 0” 。溢出标志位溢出标志位OVOV的状态,只有在的状态,只有在带符号数加法运算带符号数加法运算时才有意义时才有意义。当两个带符号数相加时,当两个带符号数相加时,OV=1OV=1,表示加法运算表示加法运算超出了超出了累加累加器器A A所能表示的带符号数的有效范围。所能表示的带符号数的有效范围。 例例 (A)=53H(A)=53H,(R0)=FCH(R0)=FCH,执行指令,执行指令 ADD A,R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 零售业门店经理面试技巧详解
- 护理信息系统的应用与管理
- 大学就业指导讲师培训
- 专科英语专业就业指南
- 护理科研设计与实施
- 快消品行业市场分析高级专员面试技巧
- 零售业培训专员招聘面试全解
- 基于智能化的高效焊接技术研究
- 旅游行业的数据分析工程师面试全解析
- 基于人工智能的现代农业种植管理系统
- 14消渴小便不利淋病脉证并治第十三12
- 2024年社区工作者考试必背1000题题库必背(各地真题)
- 医院DRG付费知识培训课件
- 2024年电脑动画13464自考复习题库(含答案)
- 2024年中国铁路上海局集团有限公司招聘笔试参考题库含答案解析
- 大学有机化学实验必做试题
- 幼儿园小班绘本故事《大熊山》
- S型单级双吸离心泵安装说明中英文
- 建设施工分包安全管理培训讲义图文并茂
- JJG 602-2014低频信号发生器
- GA 1800.6-2021电力系统治安反恐防范要求第6部分:核能发电企业
评论
0/150
提交评论