mcs-51单片机指令系统详解_第1页
mcs-51单片机指令系统详解_第2页
mcs-51单片机指令系统详解_第3页
mcs-51单片机指令系统详解_第4页
mcs-51单片机指令系统详解_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

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

文档简介

第 3章 单片机的指令系统 本章学习指令是控制计算机进行各种运算和操作的命令。一台计算机所能执行的全部指令的集合称为指令系统。一般来说,一台计算机的指令越丰富,寻址方式越多,指令的执行速度越快,则它的总体功能也就越强。不同种类的单片机指令系统一般是不同的。本章将以 80C51为例,详细介绍 MCS-51单片机的指令系统的寻址方式、指令的格式及功能。3.1汇编 指令与格式3.1.1 指令格式和常用符号1.指令格式 (1) 汇编语言指令格式标号: 操作码 第一操作数 ,第二操作数 ,第三操作数 ;注释 其中方括号 括起来的部分为可选项。例如: AM1: MOV A, #78H ;向 A传输立即数 78H 标号标号是指令的符号地址。程序汇编时,汇编程序将指令首地址(即指令第一个字节所存单元的地址)赋值给标号,有了标号,程序中的其他语句操作就能寻找到该语句。标号由 1 6个英文字母或数字组成,且第一个必须为英文字母;本汇编语言中已经有确切定义的符号不能作为标号,如指令助记符、伪指令、寄存器名、条件标志等;同一标号在一个程序中只能定义一次;标号后面必须跟以冒号。 操作码用来规定指令进行何种操作,是指令中不能空缺的部分。一般采用具有相关含义的英语单词或缩写表示。 操作数表示参与指令操作的数或数所在的地址。在一条指令中操作数的个数可以是一个、二个或三个,也可以没有操作数。操作码与操作数之间以空格分隔,操作数与操作数之间用逗号 “,”分隔。指令中有两个操作数时,一般将前面的操作数称为目的操作数,后面的操作数称为源操作数,格式为:操作码 目的操作数,源操作数 注释注释是为了便于阅读程序,对语句所作的解释说明,不产生目标代码。注释必须用分号 “; ”开头。当注释内容一行写不完时,可以换行继续写,但是新的一行必须同样以 “; ”号开头。(2) 机器码指令格式机器码指令也包括操作码和操作数两个基本部分。在MCS-51单片机指令系统中,指令根据其机器码的长度分为单字节、双字节和三字节三种指令。 单字节指令单字节指令只有一个字节的操作码,无操作数,在程序存储器中占一个存储单元。例如指令: RET 机器码为: 00100010,十六进制代码为: 22H。 例如指令: MOV A, R0 其机器码为: 11101000,十六进制代码为: E8H。 双字节指令双字节指令含有两个字节,第一个字节为操作码,第二个字节为操作数,在程序存储器中要占两个存储单元。例如指令: MOV A, 55H机器码为: 01110100 01010101B, 十六进制代码为:7455H;其中 74H为操作码, 55H为操作数,累加器 A的信息隐含在了操作码中。 三字节指令这类指令中,第一个字节为操作码,第二和第三字节均为操作数。在程序存储器中要占 3个存储单元。例如指令: MOV 20H, #79H机器码为: 01110101 00100000 01111001B, 十六进制代码为: 752079H,其中 75H为操作码, 20H为操作数 1,79H为操作数 2。 2. 指令系统中有关符号说明在 MCS-51指令系统中,描述指令格式时要用到一些符号,这些符号的约定含义是:Rn 当前工作寄存器区中的工作寄存器 R0 R7( n= 0、 1、 27)。Ri 当前工作寄存器区中的工作寄存器 R0和 R1( i= 0或 1)。Direct8 位直接字节地址。既可以是内部 RAM的低 128个单元的地址,也可以是特殊功能寄存器的单元地址(或寄存器符号)。#data8 位常数,也称立即数。 #为立即数前缀符号。#data1616 位立即数。addr1616 位目的地址,用于 LCALL和 LJMP指令中。Addrll11 位目的地址,用于 ACALL和 AJMP指令中。rel 相对偏移量,用 8位带符号数的补码表示,在相对转移指令中作地址偏移量,其对应的十进制值范围为 -128 + 127。Bit 位地址。/ 位操作指令中操作数的前缀,表示将该操作数的内容取反。( X) 某寄存器或某单元的内容。( X ) 表示以 X中的内容为地址的单元中的内容。 数据传送的方向。$ 当前指令的起始存放地址。3.1.2 伪指令伪指令由程序设计人员在源程序中写出,是对汇编程序进行汇编是下达的指示。例如,指定程序存放的地址,定义符号,指定暂存数据的存储区等。伪指令并不生成目标代码,仅仅在汇编过程中起作用,故又称他为汇编命令或汇编程序控制命令。不同的单片机开发系统,其汇编程序的伪指令并不完全相同,下面介绍一些常用的伪指令。1. ORG(指定程序或数据起点)指令格式: ORG nn其中 nn是 16位二进制数或十进制数表示的地址值。指令功能:指明随后语句从 nn单元开始存放。汇编时,第一条指令或数据首字节存入 nn单元。以后程序顺序往下存放。此语句总是出现在每段源程序的前面。当程序中有多条 ORG指令时,要求各条 ORG指令的操作数( 16位地址)由小到大顺序安排,空间不允许重叠。ORG 0000HLJMP MAIN ;上电转向主程序ORG 0023H ;串行口中断入口地址LJMP SERVE1 ;转中断服务程序ORG 2000H ;主程序MAIN: MOV TMOD, #20H ;设 T1作方式 2MOV TH1, #0F3H ;赋计数初值MOV TL1, 0F3HSETB TR1 ;启动 T12. END(汇编结束)指令格式: END或 END标号指令功能:源程序的结束标志,表明程序结束。汇编程序对该指令后面的内容将不再处理。如果源程序是一段子程序,END后不写标号;如果是主程序,则必须写标号,所写标号是该主程序第一条指令的符号地址。一个程序中要有而且只能有一条 END指令。3. EQU(赋值)指令格式:字符名称 EQU 赋值项指令功能:用于给字符名称赋予一个特定值。赋值以后,其值在整个程序中有效,同一字符名称只能赋值一次。其中,赋值项可以是常数、地址或标号,其值可为 8位或 16位二进制数,赋值以后的字符名称既可以作地址使用也可以作立即数使用。例 如: AA EQU R1A10 EQU 10H ORG 0500HMOV R0, A10 ; R0 ( 10H)MOV A, AA ; A ( R1)4. DB(定义字节)指令格式:标号: DB 项或项表指令功能:用于定义字节的内容。项或项表指所定义的一个字节或用逗号分开的字节串 ,汇编程序将把 DB指令中项或项表所指字节的内容 (数据或 ASCII码 )依次存人从标号开始的存储器单元。例如: ORG 1000HFIRST: DB 73, 01, 01, 90, 38, 00, 01, 00SECOND: DB 02, 34, 00, 89, 67, 45, 15, 26又例如:ORG 0600HSTART: MOV A, #0B4HTAB: DB 45H, 73, 01011010B, 5, A, -4H上述程序中,通过 DB伪指令实现将项表中的 5个字节数依次存放在以 TAB标号为起始地址的各存储单元中,即 TAB单元存入 45H, TAB 1单元存入 49H(即 73的十六进制数), TAB 2单元存入 5AH(即 01011010B), TAB 3单元存入 35H( 5的 ASCll码), TAB 4单元存入 41H( A的 ASCll码)。 TAB 5单元存入 FCH( -4H的补码)。 DW指令(定义字)指令格式:标号: DW 项或项表指令功能:用于定义字的内容。项或项表指所定义的一个字 (两个字节 )或用逗号分开的字节串。每个字低 8位先放,高 8位后放,低字节放在低地址,高字节放在高地址。 DS(定义数据单元)指令格式:标号: DS 数字指令功能:用于保留待存放的一定数量的存贮单元,定义应保留的存贮器单元数。说明自标号所在的地址起共有指令中数字指明的存贮单元数保留可供存入数据。例如: ORG 1800HDATE: DS 05H上面 DS指令表示,从 1800H地址开始,保留 5个连续的地址单元作为备用。注意:对 MCS-51单片机来说, DB、 DW、 DS伪指令只能对程序存储器使用,不能对数据存储器使用。 BIT(定义位)指令格式:标号 BIT 项指令功能:用于定义某特定位的标号。项指的是所定义的位。经定义后,便可用指令中队左面的标号来代替 BIT面项所指出的位。例如:FLG BIT F0经 BIT伪指令定义后,可以在指令中用 FLG来代替位地址 F0。这就是直接寻址位的第四种表示方式,3.2 寻址方式计算机绝大多数指令执行时都需要使用操作数,因此,指令中就需要给出这些操作数或者给出寻找操作数的地址。指令中给出操作数的地址的方式,叫做寻址方式。根据指令操作的需要,计算机总是提供多种寻址方式。寻址方式越多,计算机的寻址能力就越强,单片机的功能也就越强。MCS5l 单片机共有七种寻址方式,下面分别介绍。 1立即寻址指令中直接给出参与操作的常数(称为立即数),这种寻址方式称为立即寻址。【 例 3-1】 MOV A, 60H 机器码为 “74H 60H”【 例 3-2】 MOV DPTR, 1808H 机器码是 “90H 18H 08H”2直接寻址指令中直接给出操作数所在存储单元的地址,这种寻址方式称为直接寻址。(1) 内部数据存储区( 00H 7FH)【 例 3-3】 MOV A, 40H 机器码是 “E5H 40H” (2) 特殊功能寄存器区( 80H FFH)特殊功能寄存器 SFR只能用直接寻址方式访问。当直接寻址某个 SFR时,直接地址可以用它的单元地址,也可以使用它的寄存器符号。以上两种表示方式,对应的机器码是唯一的。使用后者可以增强程序的可读性。【 例 3-4】 MOV A, 0F0H MOV A, B以上两条指令功能完全相同,都是将寄存器 B的内容送到累加器 A中,前一条指令中第二个操作数采用 B寄存器的单元地址表示;后一条指令中是直接用 B寄存器的名称来表示。但汇编后的机器码是完全一样的,两个字节: “E5H F0H”。 3寄存器寻址指令中指定将某个寄存器的内容作为操作数,这种寻址方式称为寄存器寻址。这类寄存器包括工作寄存器 R0 R7、 A、 DPTR等。【 例 3-5】 INC R2 机器码是 “0AH” 4寄存器间接寻址指令中指定将某一寄存器的内容作为操作数的地址,这种寻址方式称为寄存器间接寻址。特别要注意的是,存放在寄存器中的内容不是操作数,而是操作数所在的存储单元的地址。利用寄存器间接寻址可访问片内 RAM和片外 RAM单元中的内容。访问片内 RAM中的数据时,只能使用寄存器 R0、R1间接寻址;而访问片外 RAM中的数据时,可使用 R0、 R1或 DPTR间接寻址。此时,这些寄存器被用作地址指针,前面要加前缀符 “”。规定用 MOV指令访问片内 RAM,用MOVX指令访问片外 RAM单元。【 例 3-6】 MOV A, R0 ; A ( R0)机器码为“E6H” 5变址寻址以 16位寄存器( PC或 DPTR)的内容作为基址,以累加器 A的内容作为偏移量,将两者进行相加得到的和作为操作数地址,这种寻址方式称为变址寻址。变址寻址只能对程序存储器进行寻址,它可以分为两类:(1) 以 PC的当前值为基址例如指令: MOVC A, A+PC ;( PC) ( PC) +1, A ( A) +( PC)单字节指令,源操作数为变址寻址。 PC的当前值是从程序存储器中取出该条指令后的 PC值,它等于该条指令首字节地址加指令的字节数,上述指令的功能是:先使 PC加 1,然后与累加器的内容相加,形成操作数的地址。(2) 以 DPTR的内容为基址例如指令:MOVC A, A+DPTR ; A ( A) +( DPTR)下面这段程序是将程序存储器 ROM中 1065H单元的内容读入累加器 A中:MOV DPTR, #1060H ; DPTR #1060HMOV A, #05H ; A #05HMOVC A, A+DPTR ; A ( 1065H)6. 相对寻址相对寻址方式主要用于转移指令,它是把指令中给出的相对地址偏移量 rel与 PC当前值相加,得到程序转移的目标地址。即:目标地址 = PC当前值 + relrel是一个带符号的 8位二进制补码,其取值范围为 128 +127。指令中含有操作数 rel的转移指令均为相对转移指令,采用的都是相对寻址方式例如:在地址 1068H处有一条相对转移指令:1068H SJMP 30H ; PC ( PC) + 2 + rel指令为双字节指令,操作码为 “80H 30H”。 PC的当前值=1068H+2=106AH,把它与偏移量 30H相加,就形成了程序转移的目标地址 109AH(向后跳转)。相对寻址方式只适合对程序存储器的访问

温馨提示

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

评论

0/150

提交评论