第三章80C51单片机的指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注释:对指令的解释说明,ຫໍສະໝຸດ Baidu以提高程序的可读性, 注释前必须加分号,注释换行时行前也要加分号。
3.1.2 指令字节
在二进制的80C51指令中,单字节指令的操作码和操作数加 起来只有1B;双字节指令的操作码和操作数各占1B;三字 节指令的第1字节为操作码,第2、第3字节为操作数、操作 数地址或符号。 1.单字节指令(49条) 在80C51指令指令系统中,单字节指令可分为两大类:无操 作数的单字节指令和含有操作数寄存器编号的单字节指令。 1)无操作数单字节指令 这类指令只有操作码字段,操作数隐含在操作码中。 例如:INC DPTR 指令码为 :
2)8位地址和8位数据 例如:MOV 74H,#0FFH 指令码为:
3)16位地址 例如:LCALL 2020H 指令码为:
在程序设计中,应尽可能选用字节少的指令。这样,指令所占存储单元 少,执行速度也快。
3.1.3 指令类型
80C51汇编语言有42种操作码助记符,用来描述33种操作 功能。一种操作码可以使用一种以上的数据类型,又由于 助记符规定了其访问的存储器空间,所以一种功能可能有 几个助记符(如MOV、MOVX、MOVC)。功能助记符与 寻址方式组合,得到111条指令。
3.2.3 寄存器寻址
寄存器寻址方式是指由指令指出某一个寄存器的内容作为 操作数的寻址方式。寄存器寻址一般用于访问选定的通用 寄存器R0~R7。这种寻址方式如果使用了另一个操作数, 那么另一操作数必须是累加器A,这些指令都是单字节指 令(一条指令在程序存储器中占一个字节地址)。
例:执行指令: MOV A,R0 ;(A)←(R0) INC R0 ;(R0)+1→R0 DEC R0 ;(R0)-1→R0 第一条指令把寄存器R0中的内容传送给累加器A,源操作数采用寄 存器寻址方式,第二条指令使R0中的内容加一,源操作数和目的 操作数均为寄存器寻址方式。第三条指令使R0中的内容减一,源 操作数和目的操作数均为寄存器寻址方式。 寄存器寻址的寻址范围包括: 1)当前通用寄存器组。 2)部分特殊功能寄存器。例如:累加器A、寄存器B以及数据指针 DPTR。
例:若(A)=20H,(20H)=F0H,分析程序执行后,寄 存器的内容如下: MOV R0,A ;(R0)=20H MOV R0,20H ;(R0)=F0H MOV R0,#20H ;(R0)=20H 3)以直接地址为目的操作数的指令 MOV direct,A ;寄存器寻址,(A)→direct MOV direct,Rn ;寄存器寻址,Rn→direct MOV direct1,direct2;直接寻址,direct2→direct1 MOV direct,@Ri ;寄存器间接寻址, ((Ri))→direct MOV direct,#data;立即寻址,data →direct
数据传送类指令汇编语句的格式为: MOV ﹤目的操作数﹥,﹤源操作数﹥; 1.内部数据的传送指令 1)以累加器A为目的操作数的指令:
MOV A,
Rn;寄存器寻址,(Rn)→A direct ;直接寻址,(direct)→A @Ri ;寄存器间接寻址,((Ri))→A #data ;立即寻址,data→A
按机器指令所占字节数分类,共有49条单字节指令、45条双字节指 令和17条三字节指令。 按指令执行时间分类,共有64条单周期指令、45条双周期指令、2条 (乘/除)四周期指令。 按功能分类,80C51指令系统可分为: 数据传送指令(29条) 算术运算指令(24条) 逻辑运算指令(24条) 位操作指令 (17条) 控制转移指令(17条)
3.2.5 变址寻址
这种寻址方式用于访问程序存储器中的数据表格, 以程序计数器(PC)或数据指针(DPTR)作为 基址寄存器,以累加器作为变址寄存器。基址寄 存器和变址寄存器的内容相加形成16位地址,该 地址即作为操作数的地址。
例:执行指令: MOVC A,@A+PC ;((A)+(PC))→A MOVC A,@A+DPTR ;((A)+(DPTR))→A 这两条指令中源操作数采用了基址加变址的间接寄存器寻址 方式。
第三章
80C51单片机的 指令系统
3.1 指令系统概述 3.2 寻址方式 3.3 80C51指令集
3.3.1数据传送与交换类指令 3.3.2算术运算指令 3.3.3逻辑运算及移位类指令 3.3.4控制转移类指令 3.3.5位操作类指令 3.4 51单片机汇编语言程序设计
3.1 指令系统概述
这条8位数传送指令的含义是把指令码第2字节立即数23H 取出来存放到累加器(A)中。该指令的操作码占1B; 23H为源操作数,也是1B;累加器(A)是目的操作数寄 存器,隐含在操作码字段中。
3.三字节指令(17条)
这条指令的指令码的第1字节为操作码;第2和第3字节为 操作数或操作数地址,有如下3类。 1)16位数据 例如:MOV DPTR,#26ABH 指令码为:
指令是规定计算机进行某种操作的命令,而指 令系统就是指所有命令的集合。指令系统是单 片机软件技术的基础。以51为内核的单片机指 令系统的汇编语言,用42种操作码助记符来描 述33种操作功能,构成了111条指令。其中, 64条指令可在1个机器周期内执行完,45条指 令要用2个机器周期,而乘法与除法指令周期 最长,也只用4个机器周期。由此可见51指令 系统具有存储效率高、执行速度快的特点。 本章将重点介绍51单片机汇编语言指令的功能 和用法。
操作码助记符:是指令的核心部分,由2~5个英文字 母组成,如JB、MOV、CJNE、LCALL等。用于指示 执行何种操作,如加、减、乘、除、传送等。 操作数:表示指令操作的对象,可以是一个具体的数 据,也可以是参加运算的数据所在的地址。操作数一 般有以下几种形式:
没有操作数:操作数隐含在操作码中,如RET指令。 只有一个操作数,如INC A指令。 有两个操作数:如MOV A,30H指令,操作数之间以逗号相 隔。 有三个操作数:如CJNE A,#00H,LOOP指令。
相对寻址用于访问程序存储器,只出现在转移指令中。 以PC的当前值加上指令中给出的相对偏移量 (rel) 形成转移地址。其中,rel是一个带符号的8位二进制 数,以补码形式置于操作码之后存放。程序的转移范 围以PC当前值为中心,介于-128~+127之间。 例:执行指令: JC rel 设rel=85H,CY=1,这是一条以CY状态为条件的转 移指令,因为该指令为两字节指令,CPU取出第二个 字节时,PC当前值为原PC值加2。由于CY=1,所以 程序转向(PC)+2+rel单元去执行。 注意此时rel=85H为负值。
3.1.4 常用符号说明
用汇编语言编写指令时必须遵守一定的规则,表3-1给出了编写指令时的 一些符号的约定含义。
3.2
寻址方式
在指令系统中,操作数是指令的重要组成部分, 它指定了参加运算的数据或数据所在的地址单 元。寻找源操作数地址的方式称为寻址方式。 一条指令采用什么样的寻址方式是由指令的功 能决定的。寻址方式越多,指令功能就越强, 灵活性就越大。只有透彻地理解寻址方式,才 能正确应用指令。51单片机指令操作数的寻址 方式主要有7种方式:直接寻址、立即寻址、 寄存器寻址、寄存器间接寻址、变址寻址、位 寻址和相对寻址等7种寻址方式。
3.3
80C51指令集
根据指令功能的不同, 51单片机指令通常分 为数据传送类、算术运算类、逻辑运算类、控 制转移类及位操作类这5大类指令。
3.3.1数据传送与交换类指令
51指令系统中,数据传送类指令共有29条。这 类指令将源操作数传送到指定的目的地址,传 送后源操作数保持不变。数据传送类指令可以 在累加器A,R0~R7工作寄存器与片内数据 存储器、片外数据存储器和程序存储器之间进 行数据传送。传送类指令一般不影响标志位, 只有堆栈操作可以直接修改程序状态字PSW。
数据指针隐含其中
2)含有操作数寄存器号的单字节指令 单字节的指令码由操作码字段和指示操作数所 在寄存器号的字段组成。 例如;MOV A,Rn 指令码为:
其中,rrr为寄存器Rn的编号
2.双字节指令(45条)
双字节指令的操作码字节在前;在后面的操作数字节可以 是立即数,也可以是操作数所在的片内RAM地址。 例如:MOV A,#23H 指令码为:
3.2.4 寄存器间接寻址方式
寄存器间接寻址是指由指令指出某一个寄存器 的内容作为操作数地址的寻址方式,寄存器的 内容不是操作数,而是操作数所在的存储器地 址,操作数是通过寄存器间接得到的。 寄存器间接寻址需要以寄存器符号的形式表示, 为了区别寄存器寻址和寄存器间接寻址,在寄 存器间接寻址方式中,应在寄存器的名称前面 加前缀标志“@”。访问内部RAM或外部数据 存储器的低256个字节时,只能采用R0或R1作 为间接寻址寄存器。
3.2.6 位寻址
80C51单片机有位处理功能,可以对数据位进 行操作,因此就有相应的位寻址方式。位寻址 指令中可以直接使用位地址。 例:执行指令: MOV C,40H 该指令的功能是把40H位的值送进位C。 位寻址的寻址范围: 1)片内RAM中的位寻址区。 2)可位寻址的特殊功能寄存器。
3.2.7 相对寻址
例:将立即数F3H送入累加器A中,可执行以 下指令: MOV A,Rn
例:将立即数35H送入片内30H单元,可执行以下指令: MOV A,#35H MOV R0,#30H MOV @R0,A 也可执行以下指令: MOV 30H,#35H 2)以寄存器Rn为目的操作数的指令: MOV Rn,A ;寄存器寻址,(A)→Rn MOV Rn,direct ;直接寻址,(direct)→Rn MOV Rn,#data ;立即寻址,data→Rn
3.2.2 立即寻址
立即寻址方式是指操作数在指令字节给出,即 操作数以指令字节的形式存放于程序存储器中, 为了与直接寻址指令中的直接地址相区别,需 要在操作数前面加前缀标志“#”。 例:执行指令: MOV A,#30H; MOV DPTR,#8000H; 第1条指令表示将立即数30H送入累加器(A) 中。第2条指令表示把16位立即数送入数据指 针寄存器(DPTR)中,其中高8位送DPH, 低8位送DPL。
3.1.1 指令格式
指令的表示方法就是指令格式。51单片机指令主要由 操作码助记符字段和操作数字段组成。指令格式如下: [标号:] 操作码助记符 [操作数,1] [操作数2,] [操 作数3] [:注释] 指令格式中各项的含义说明如下: [ ]:括号中的内容是可选的,其包含的内容因指令的 不同可有可无 标号:根据编程需要给指令设定的符号地址,可有可 无;通常在子程序入口或转移指令的目标地址处才赋 予标号。标号由1~8个字符组成,第一个字符必须是 英文字母,不能是数字或其他符号,标号后必须有冒 号。
小结:
指令对哪个存储器空间进行操作是由指令的操 作码和寻址方式确定的。程序存储器只能采用 立即寻址和变址寻址方式,特殊功能寄存器只 能采用直接寻址方式,不能采用寄存器间接寻 址,位操作指令只能对位寻址区进行操作。 外部扩展的数据存储器只能用MOVX指令访问, 而内部RAM的低128字节(00H~7FH)既能 用直接寻址,也能用寄存器间接寻址。
例:已知R0中存放片内RAM地址65H,数据指针DPTR 内存放片外RAM地址8000H,地址65H和8000H里面 都存放着立即数30H,执行以下指令后: MOV A,@R0; MOVX A,@DPTR; 其中,累加器A的内容为30H。 寄存器间接寻址的寻址范围: 1)片内RAM低128单元:这里只能用R0和R1作为间 接寻址寄存器。 2)片外RAM 64KB:使用DPTR作为间接寻址寄存器。 3)片外RAM低256单元:可以使用DPTR、R0和R1。 4)堆栈区:以堆栈指针SP作为间接寻址寄存器。
3.2.1 直接寻址
指令中含有操作数的地址,该地址指出了参与运算或传送 的数据所在的字节单元或位地址。 例:已知(30H)=0FFH,执行指令: MOV A,30H ;(A)←(30H) 结果:(A)=0FFH 该指令表示把内部RAM 30H单元的内容传送给累加器A。 源操作数采用的是直接寻址方式。直接寻址的操作数在指 令中以存储单元的形式出现,直接寻址方式只能给出8位 地址,因此,这种寻址方式的寻址范围只限于片内RAM, 具体说: 1)低128单元,在指令中直接以单元地址形式给出。 2)特殊功能寄存器,这时除可以用单元地址形式给出外, 还可以寄存器符号形式给出。 注意:直接寻址方式是访问特殊功能寄存器的唯一方法。