第3章指令系统_第1页
第3章指令系统_第2页
第3章指令系统_第3页
第3章指令系统_第4页
第3章指令系统_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 AT89S51单片机的 指令系统12AT89S51AT89S51单片机单片机使用使用MCS-51MCS-51指令系统指令系统。n介绍指令系统介绍指令系统寻址方式寻址方式n对对111111条条基本指令基本指令按功能分类详细讲解按功能分类详细讲解。掌握汇编语言指令是程序设计的掌握汇编语言指令是程序设计的基础基础。内容概要内容概要3.1 3.1 指令系统概述指令系统概述1.1.特性:特性: 1 1)5151单片机的指令集为单片机的指令集为复杂指令集复杂指令集。 2 2)AT89S51AT89S51在硬件结构中有一个在硬件结构中有一个位处理机位处理机,一个处理一个处理位变位变 量量的的指令子集

2、指令子集。2.2.分类分类 1 1)按按所占字节分所占字节分,分,分三种三种: (1 1)单字节指令)单字节指令4949条;条; (2 2)双字节指令)双字节指令4545条;条; (3 3)三字节指令)三字节指令1717条。条。 2) 2)执行时间来分执行时间来分,分三种:,分三种: (1 1)1 1个个机器周期(机器周期(1212个时钟振荡周期)的指令个时钟振荡周期)的指令6464条条; (2 2)2 2个个机器周期指令机器周期指令4545条条; (3 3)4 4个个机器周期机器周期乘、除指令乘、除指令。33.2 3.2 指令格式指令格式 1.1.定义定义 指令格式指令格式:指令的表示方法。

3、指令的表示方法。2.2.指令的组成指令的组成 指令通常由指令通常由两部分两部分组成:组成:操作码操作码和和操作数操作数。 操作码操作码指令进行什么指令进行什么操作操作。 操作数操作数指令操作的指令操作的对象对象。 注意:注意:操作数操作数可能是可能是具体数据具体数据,也可能是指出到哪里,也可能是指出到哪里 取得数据的取得数据的地址或符号地址或符号。43.3.不同长度指令的格式不同长度指令的格式(1 1)单字节指令:操作码和操作数同在一个字节中。)单字节指令:操作码和操作数同在一个字节中。 MOV AMOV A,RnRn RnRn A A E8HE8H(2 2)双字节指令:一个字节为操作码,另一

4、个字节是操作数)双字节指令:一个字节为操作码,另一个字节是操作数。 MOV AMOV A,#data#data MOV A MOV A,direct direct E5H ,directE5H ,direct (3 3)三字节指令:操作码占一个字节,操作数占二个字节)三字节指令:操作码占一个字节,操作数占二个字节。 5data A74H,dataMOV direct1,MOV direct1,direct2*direct2 *direct185H,direct1,85H,direct1,direct2*direct1 A63.3 指令系统的寻址方式指令系统的寻址方式1.1.概念:概念: 寻址方

5、式寻址方式在指令中说明操作数所在位置的方法在指令中说明操作数所在位置的方法。控制器读入指令控制器读入指令解析指令解析指令取操作数取操作数执行执行存运算结果存运算结果操作数在哪操作数在哪里取呢?里取呢?操作数存到操作数存到哪里呢?哪里呢?72. 概述概述 总的来说,在指令中以以下四种方式给出操作数的信息:总的来说,在指令中以以下四种方式给出操作数的信息: 1)把操作数直接放在到指令中:告诉)把操作数直接放在到指令中:告诉CPU,操作数就在指令中,操作数就在指令中, 无需到其他地方寻找;无需到其他地方寻找; 2)把装有操作数的寄存器放在指令中:告诉)把装有操作数的寄存器放在指令中:告诉CPU,操作

6、数在,操作数在 某个寄存器中,去寄存器中取就可以;某个寄存器中,去寄存器中取就可以; 3)把操作数的地址直接放在指令中:告诉)把操作数的地址直接放在指令中:告诉CPU, 操作数的地址就在操作数的地址就在 指令中,按该地址取数就可以;指令中,按该地址取数就可以; 4)把装有操作数地址的寄存器放在指令中:告诉)把装有操作数地址的寄存器放在指令中:告诉CPU, 操作数的地址操作数的地址 在某个寄存器中,按该地址取数就可以;在某个寄存器中,按该地址取数就可以; 对以上四种方式,对以上四种方式,稍加变化,稍加变化,再配合以再配合以不同的指令,不同的指令,最终形成最终形成51单单片机的片机的7种寻址方式。

7、种寻址方式。3.3 指令系统的寻址方式指令系统的寻址方式3.3.寻址方式介绍寻址方式介绍1 1)学习内容)学习内容 每一种寻址方式的书写语法;每一种寻址方式的书写语法; 每一种寻址方式的寻址范围(每一种寻址方式的寻址范围(片内片内/外外ROM 、片内、片内/外外RAM、 SFR、位访问区、片外设备寄存器、位访问区、片外设备寄存器)。)。 注意:注意:每一种寻址方式,都有特定的寻址范围,不可能是每一种每一种寻址方式,都有特定的寻址范围,不可能是每一种 寻址方式都能访问到每一个地址空间;寻址方式都能访问到每一个地址空间; 同一种寻址方式,配合以不同的指令,寻址范围可能不同。同一种寻址方式,配合以不

8、同的指令,寻址范围可能不同。 2 2)寄存器寻址方式寄存器寻址方式 含义:含义:指令中的操作数指令中的操作数放在放在某一寄存器某一寄存器中,中,CPUCPU应在指定的寄存器应在指定的寄存器 中去读取中去读取 写入操作数写入操作数。 例如:例如:MOVMOV A A,R Rn n ;( (R Rn n) )A A,n n =0=07 789 语法:语法:将寄存器名称写在指令中;将寄存器名称写在指令中; 寻址范围寻址范围: A B R0-R7 PC DPTR C(位位) 3)直接寻址方式直接寻址方式 含义:含义:指令直接给出操作数的地址指令直接给出操作数的地址(8位)。位)。 一般性说明中直接寻址

9、方式的一般性说明中直接寻址方式的8位位地址用地址用“direct” 表示。表示。 语法:语法:直接把表示地址的直接把表示地址的8位二进制数位二进制数写在指令中。写在指令中。 例:例: MOVA,direct “direct”就是操作数的单元地址就是操作数的单元地址。 例:例: MOVA,40H 表示把表示把内部内部RAM 40H单元的内容传送到单元的内容传送到A。 源操作数(右边的操作数)采用的是源操作数(右边的操作数)采用的是直接寻址方式直接寻址方式。 目的操作数目的操作数(左左边的操作数)采用的边的操作数)采用的是是寄存器寄存器寻址方式寻址方式。 例例:MOV 42HMOV 42H,62H

10、62H 把把片内片内RAMRAM中中62H62H单元的内容送到单元的内容送到片内片内RAMRAM中的中的42H42H单元中单元中。 寻址范围:寻址范围:所有所有SFR.SFR.访访问片内所有问片内所有SFRSFR的的唯一唯一寻址方式寻址方式。 片内片内RAM.RAM. 4) 4) 寄存器间接寻址方式寄存器间接寻址方式 含义:含义:操作数地址操作数地址在指定的在指定的寄存器中,寄存器中,要要先从寄存器中找先从寄存器中找 到操作数的地址,再按该地址找到操作数。到操作数的地址,再按该地址找到操作数。 语法:语法:在寄存器名称前面加在寄存器名称前面加前缀标志前缀标志“ ”。 以以区区分分寄存器寻址和寄

11、存器间接寻址寄存器寻址和寄存器间接寻址。 能用于该寻址方式的寄存器只有能用于该寻址方式的寄存器只有R0R0、R1R1、DPTR.DPTR. 例:例: MOV AMOV A, R Ri i ;i i=0=0或或1 1 若若R Ri i的内容为的内容为40H40H,即把,即把内部内部RAM 40HRAM 40H地址单元中的地址单元中的 内容传送给内容传送给A A。1011寻址范围:寻址范围: 当寄存器间接寻址用于MOVX指令时,访问的是片外数据 存储器空间; 用于其它指令时,访问的是片内数据存储器单元。 DPTR只能用于对片外数据存储器的寄存器间接寻址。5 5)立即数寻址方式立即数寻址方式 含义:

12、含义:操作数直接包含在指令中,操作数直接包含在指令中,也称也称立即数立即数。 语法:语法: 在操作数前加前缀标志在操作数前加前缀标志“# #”。 可可与直接寻址指令中的直接地址加以区别,与直接寻址指令中的直接地址加以区别, 例如:例如: MOV AMOV A,#40H#40H 将将40H40H放入累加器放入累加器A A中中 寻址范围:寻址范围:程序存储器中的常数。程序存储器中的常数。6 6)基址寄存器加变址寄存器间址寻址方式基址寄存器加变址寄存器间址寻址方式 含义:含义:以以DPTRDPTR或或PCPC作为作为基址寄存器基址寄存器,以累加器,以累加器A A作为作为变址寄存器变址寄存器 ,以两者

13、内容相加形成的,以两者内容相加形成的1616位地址作为目的地址进行寻位地址作为目的地址进行寻 址。址。 语法:语法:使用使用本寻址方式的本寻址方式的指令指令只只有有3 3条条: MOVCMOVC A A,A+DPTRA+DPTR MOVC A MOVC A, A+PC, A+PC JMP JMP A+DPTRA+DPTR 例:例: MOVCMOVCA A,A+DPTRA+DPTR 其中,其中,(A A)=05H=05H,(DPTRDPTR)=0400H=0400H,指令执行结,指令执行结 果是把果是把程序存储器程序存储器0405H0405H单元的内容传送给单元的内容传送给A A。1213 寻址

14、范围:寻址范围:前两条指令适用于读前两条指令适用于读程序存储器程序存储器中中固定固定的数据。的数据。 第第3 3条为条为散转指令散转指令,A A中内容为程序运行后的动态结果中内容为程序运行后的动态结果 ,可根据,可根据A A中不同内容,实现跳向不同程序入口的跳转。中不同内容,实现跳向不同程序入口的跳转。7 7)相对寻址方式相对寻址方式 含义:含义:指令指令(机器码)(机器码)中出现的是程序要跳转到的指令的位置和中出现的是程序要跳转到的指令的位置和 程序当前位置之间的字节数。程序当前位置之间的字节数。 语法:语法:直接在指令中写出程序要跳转到的直接在指令中写出程序要跳转到的指令的地址指令的地址(

15、以标号(以标号 形式给出)。形式给出)。 该寻址方式是专门用于跳转指令的,偏移量该寻址方式是专门用于跳转指令的,偏移量由汇编程序自动计由汇编程序自动计算和填入算和填入。 例:例: S SJMP LOOPJMP LOOP “LOOP”LOOP” 为目的地址标号。为目的地址标号。 注意:注意: 偏移量偏移量relrel是带符号是带符号8 8位二进制补码数位二进制补码数,128128+127+127 。由汇编器计算和填入。按如下公式计算:由汇编器计算和填入。按如下公式计算:14Rel=目的地址目的地址-转移指令所在的地址转移指令所在的地址-转移指令字节数转移指令字节数标号标号1,2,3寻址范围:寻址

16、范围:程序存储器。程序存储器。7 7位寻址方式位寻址方式 含义:含义:对内部对内部RAMRAM和特殊功能寄存器具有位寻址功能的某位和特殊功能寄存器具有位寻址功能的某位 内容进行置内容进行置1 1和清和清0 0操作。操作。 语法:语法:位地址一般以位地址一般以直接位地址直接位地址给出,给出,一般性说明中一般性说明中位地位地 址符号为址符号为“bitbit”。 例:例:MOV CMOV C,bitbit 其具体指令:其具体指令: MOV CMOV C,40H40H 把位地址为把位地址为40H40H单元单元的值送到位的值送到位累加器累加器C C。 寻址范围:寻址范围: 内部内部RAMRAM和和SFR

17、SFR中可为寻址的区域。中可为寻址的区域。15问题:问题:当一条指令给定后,如何来确定该当一条指令给定后,如何来确定该指令的指令的寻址方式?寻址方式? 例如例如: : MOV AMOV A,#40H#40H,属于立即数寻址还是寄存器寻,属于立即数寻址还是寄存器寻 址?址? 要看以哪个操作数要看以哪个操作数作为参照系作为参照系。 操作数分为操作数分为源操作数源操作数和和目的操作数目的操作数。对于。对于 源操作数源操作数“#40H#40H”来说,是来说,是“立即数寻址立即数寻址”方式方式, 但对但对目的操作数目的操作数“A A”来说,是属于来说,是属于“寄存器寻址寄存器寻址” 方式。方式。 一般而

18、言,一般而言,指令的指令的寻址方式指的是寻址方式指的是源操作数源操作数, 以此例为立即数寻址方式。以此例为立即数寻址方式。1617序号序号寻址方式寻址方式寻址空间寻址空间1 1寄存器寻址寄存器寻址R0R0R7R7、A A、B B、C(C(位位) )、DPTRDPTR、PCPC2 2直接寻址直接寻址内部内部128128字节字节RAMRAM、特殊功能寄存器、特殊功能寄存器3 3寄存器间接寻址寄存器间接寻址片内数据存储器、片外数据存储器片内数据存储器、片外数据存储器4 4立即数寻址立即数寻址程序存储器中的立即数程序存储器中的立即数5 5基址寄存器加变址寄存器间基址寄存器加变址寄存器间接寻址接寻址读程

19、序存储器固定数据和程序散转读程序存储器固定数据和程序散转6 6相对寻址相对寻址程序存储器相对转移程序存储器相对转移7 7位寻址位寻址内部内部RAMRAM中的可寻址位、中的可寻址位、SFRSFR中的可中的可寻址位寻址位表表3-1 3-1 7 7种寻址方式及其寻址空间种寻址方式及其寻址空间3.4 AT89S513.4 AT89S51指令系统分类介绍指令系统分类介绍共共111111条条指令,按功能分为指令,按功能分为五类五类:(1 1)数据传送类()数据传送类(2828条)条)(2 2)算术运算类()算术运算类(2424条)条)(3 3)逻辑操作类()逻辑操作类(2525条)条)(4 4)控制转移类

20、()控制转移类(1717条)条)(5 5)位操作类()位操作类(1717条)条)先简单介绍指令先简单介绍指令用到用到的符号。的符号。Rn 当前寄存器区的当前寄存器区的8个工作寄存器个工作寄存器R0R7(n=07)。Ri 当前寄存器区中作为当前寄存器区中作为间接寻址寄存器间接寻址寄存器的的2个寄存器个寄存器R0、R1(i=0,1)。1819directdirect直接地址,即内部RAM单元或SFR的地址。#data#data指令中的立即数。#data1#data16 6指令中的立即数。relrel偏移量,8位的补码数。DPTRDPTR数据指针,可用作16位数据存储器单元地址的寄存器。bitbit

21、内部RAM或特殊功能寄存器中的直接寻址位的地址。C C或或CyCy进位标志位或位处理机中的位累加器。addr11addr1111位目的地址。addr16addr1616位目的地址。 间接寻址寄存器前缀,如Ri,A+DPTR。( () )表示地址单元或寄存器中的内容。()表示以单元或寄存器中的内容作为地址间接寻址单元的内容。箭头右边的内容被箭头左边的内容所取代。20四种基本形式: 助记符助记符 操作数1 ,操作数2 ,操作数3 助记符助记符 操作数1 ,操作数2 助记符助记符 操作数1 助记符助记符 助记符:由英文字母组成,表示指令的基本功能助记符:由英文字母组成,表示指令的基本功能 操作数:指

22、令需要处理的数据。按七种不同的寻址方式操作数:指令需要处理的数据。按七种不同的寻址方式 表达。表达。 注意:注意: 相同的助记符,其后的操作数采用的寻址方式相同的助记符,其后的操作数采用的寻址方式 不同,不同, 所生成的机器代码是不同的。所生成的机器代码是不同的。 211.助记符的基本书写格式;2.指令的基本功能;3.操作数的寻址方式;4.指令的寻址范围;5.指令执行后对相关标志位的影响;6.了解指令生成的机器码的大致情况;7.运算结果是否保存,保存在哪里。22概述概述 数据传送类指令,按照基本功能的不同,包含如下几类:数据传送类指令,按照基本功能的不同,包含如下几类: 一般数据传送类指令一般

23、数据传送类指令 MOV 堆栈操作类指令堆栈操作类指令 PUSH POP 外部数据传送指令外部数据传送指令 MOVX 查表指令查表指令 MOVC 字节交换指令字节交换指令 XCH 半字节交换指令半字节交换指令 XCHD 3.4.1 数据传送类指令数据传送类指令3.4.1 3.4.1 数据传送类指令数据传送类指令 1.1.一般数据传送类指令一般数据传送类指令 通用格式通用格式: MOV MOV , 基本功能:基本功能: 把把源操作数源操作数传送传送到到目的操作数目的操作数。指令执行。指令执行之之后,源后,源 操作数不改变,目的操作数修改为源操作数。所以数操作数不改变,目的操作数修改为源操作数。所以

24、数 据传送类操作属据传送类操作属“复制复制”性质,性质,而不是而不是“搬家搬家”。 指令对标志位的影响:指令对标志位的影响: 不影响标志位不影响标志位: : CyCy、AcAc和和OVOV; 影响的标志位:影响的标志位:奇偶标志位奇偶标志位P P。231)以累加器为目的操作数的指令以累加器为目的操作数的指令 MOVA,Rn; (Rn)A,n =07 E8HEFH MOVA, R Ri i ; (R Ri i)A i =0,1 E6HE7H MOVA,direct ; (direct)A E5H,direct MOVA,#data ; #dataA 74H,data 把源操作数内容送累加器把源操

25、作数内容送累加器A,源操作数源操作数有寄存器寻址、直接有寄存器寻址、直接寻址、间接寻址和立即数寻址等方式寻址、间接寻址和立即数寻址等方式. 例例 (R6)=50H (R0)=30H (30H)=01H (70H) =FFHMOVA,R6;MOVA,R0;MOVA,70H ;MOVA,#78H;24(R6)A,寄存器寻址,寄存器寻址 (A)=50H(R0)A,间接寻址,间接寻址 (A)= 01H(70H)A,直接寻址,直接寻址 (A)=FFH78HA,立即数寻址,立即数寻址 (A)=78H 2 2)以以RnRn为目的操作数的指令为目的操作数的指令MOV MOV Rn ,A A ;(A)(A)Rn

26、 ,n n =0=07 7MOV MOV Rn ,direct direct ;(direct)(direct)Rn ,n n =0=07 7MOV MOV Rn ,#data#data;#data#dataRn ,n n =0=07 7把源操作数送入当前寄存器区的把源操作数送入当前寄存器区的R0R0R7R7中的某一寄存器。中的某一寄存器。3 3)以直接地址以直接地址directdirect为目的操作数的指令为目的操作数的指令MOV directMOV direct,A A ; (A)(A)directdirectMOV directMOV direct,Rn ; ( (Rn) )direct

27、direct,n n =0=07 7MOV direct1MOV direct1,direct2 direct2 ;(direct2)(direct2)direct1direct1MOV directMOV direct, Ri ; (Ri)directdirect,i i =0=0,1 1MOV directMOV direct,#data #data ; #data#datadirectdirect25 把源操作数送入直接地址指定的存储单元。把源操作数送入直接地址指定的存储单元。directdirect指指的是内部的是内部RAMRAM或或SFRSFR地址。地址。4 4)以寄存器间接地址为目

28、的操作数的指令以寄存器间接地址为目的操作数的指令MOVMOV R Ri i,A A;(A)(A)(R Ri i), i i=0=0,1 1MOVMOV R Ri i,direct direct ;(direct)(direct)(R Ri i),i i=0=0,1 1MOVMOV R Ri i,#data #data ;#data#data(R Ri i), i i=0=0,1 1功能是把源操作数内容送入功能是把源操作数内容送入R0R0或或R1R1指定的存储单元中。指定的存储单元中。5 5)1616位数传送指令位数传送指令MOVMOVDPTRDPTR,#data16#data16; #data

29、16#data16DPTR DPTR 功能是把功能是把1616位立即数送入位立即数送入DPTRDPTR,用来设置数据存储器,用来设置数据存储器的地址指针。的地址指针。2627 1 1)AT89S51AT89S51有两个有两个DPTRDPTR,通过设置,通过设置特殊功能寄存器特殊功能寄存器 AUXR1AUXR1中的中的DPSDPS位位来选择。当来选择。当DPS=1DPS=1,则指令中的,则指令中的 DPTRDPTR即为即为DPTR1DPTR1,DPTR0DPTR0被屏蔽,反之亦然。被屏蔽,反之亦然。 2 2)DPTRDPTR为为1616位的数据指针,分为位的数据指针,分为DPHDPH和和DPLD

30、PL。操作十操作十 分灵活方便。分灵活方便。设有两个设有两个DPTRDPTR后,就可避免频繁的后,就可避免频繁的 出入堆栈操作出入堆栈操作。 问题:指令中只能出现问题:指令中只能出现DPTR,但如果要把它作为两个八位的寄存器,但如果要把它作为两个八位的寄存器 使用,该如何做呢?使用,该如何做呢?2. 2. 堆栈操作指令堆栈操作指令 堆栈的概念:堆栈的概念: 内部内部RAMRAM中设定一个中设定一个后进先出后进先出,向上生长,向上生长的区域,称的区域,称为为堆栈堆栈。 在特殊功能寄存器中有一个在特殊功能寄存器中有一个堆栈指针堆栈指针SPSP,指,指示示堆栈的栈顶位置。堆栈的栈顶位置。 堆栈操作有

31、进栈和出栈两种,因此,在指令系统中相应有两条堆堆栈操作有进栈和出栈两种,因此,在指令系统中相应有两条堆栈操作指令。栈操作指令。280SP123进栈进栈0123出出栈栈SPSPSPSPSPSPSP(1)进栈指令)进栈指令PUSH direct 首先首先将将堆堆栈指针栈指针SP加加1,然后把,然后把direct中的内容送到中的内容送到SP指示的内部指示的内部RAM单元中。单元中。 例例:当当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令时,执行下列指令 PUSH Acc 注意:注意:Acc在这里是直接寻址,在这里是直接寻址,机器码:机器码:C0H,E0H 功能:功能:(SP)+1

32、=61HSP,(A)61H 结果:结果:SP=61H, (61H)=30H PUSH B 注意:注意:B在这里是直接寻址,在这里是直接寻址,机器码:机器码:C0H,F0H 功能:功能:(SP)+1=62HSP,(B)62H 结果:结果:SP=62H, (62H)=70H29(2)出栈指令)出栈指令POPdirect 将将SP指示的栈顶单元指示的栈顶单元的的内容送入内容送入direct字节字节中中,SP减减1。 例:例:当当(SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(61H)=30H(61H)=30H时,执行指令时,执行指令 POP DPH POP DPH ;(SP

33、)(SP)DPHDPH,(SP)-1(SP)-1SPSP 结果:结果: (DPH)=(62H)=70H SP=61H(DPH)=(62H)=70H SP=61H POP DPL POP DPL;(SP)(SP)DPLDPL,(SP)-1(SP)-1SPSP 结果结果: : ( (DPlDPl)=(61H)=30H)=(61H)=30H,(SP)=60H(SP)=60H。3 3累加器累加器A A与外部数据存储器与外部数据存储器RAM/IORAM/IO传送指令传送指令 MOVX MOVX A A,DPTR DPTR ;(DPTR)(DPTR)A A,读读外部外部RAM/IORAM/IO MOVX

34、MOVX A A, R Ri i ;(R Ri i)A A,读读外部外部RAM/IORAM/IO MOVX DPTR MOVX DPTR,A A ;(A)(A)(DPTR)(DPTR),写写外部外部RAM/IO RAM/IO MOVX MOVX R Ri i ,A A ;(A)(A)(R Ri i),写写外部外部RAM/IORAM/IO30 说明说明: : MOV MOV的后面加的后面加“X X”,表示访问的是片外,表示访问的是片外RAMRAM或或I/OI/O口,口,在执行前两条指令,在执行前两条指令, (P3.7P3.7)有效;后两条指令,有效;后两条指令, (P3.6P3.6)有效。有效。

35、 寻址范围寻址范围: : 采用采用1616位的位的 DPTRDPTR间接寻址间接寻址,可寻址整个,可寻址整个64KB64KB片外数据片外数据存储器空间,高存储器空间,高8 8位地址位地址(DPHDPH)由由P2P2口输出,低口输出,低8 8位地址位地址(DPLDPL)由由P0P0口输出。口输出。 采用采用R Ri i(i i =0=0,1 1)进行间接寻址,)进行间接寻址,可寻址片外可寻址片外256256个单个单元的数据存储器。元的数据存储器。8 8位地址位地址(RiRi)由由P0P0口输出,锁存在地址口输出,锁存在地址锁存器中,然后锁存器中,然后P0P0口再作为口再作为8 8位数据口。位数据

36、口。31RDWR4 4查表指令查表指令 特性:特性: 共共两条两条,仅有的仅有的两条两条读程序存储器中表格数据的指令读程序存储器中表格数据的指令。 传送传送为为单向,从程序存储器中读出数据单向,从程序存储器中读出数据到到A中中; 两条查表指令两条查表指令的的均采用均采用基址寄存器加变址寄存器基址寄存器加变址寄存器 间接寻址间接寻址方式。方式。3233(1)MOVC A,A+PC 以以PC作为基址寄存器作为基址寄存器,A为变址寄存器为变址寄存器,A的内容的内容(无无符号数符号数)和和PC的当前值(的当前值(下一条指令的起始地址下一条指令的起始地址)相加后)相加后得到一个得到一个新的新的16位地址

37、位地址,把该地址的内容送到,把该地址的内容送到A。 例如:例如:当当 (A)=30H时,执行地址时,执行地址1000H处的处的查表查表指令指令: 1000H: MOVCA,A+PC该指令占用一个字节,下一条指令的地址为该指令占用一个字节,下一条指令的地址为1001H(PC当前值当前值)(PC)=1001H再加上再加上A中的中的30H,得得1031H,结果结果把把程序存储器中程序存储器中1031H的内容送入累加器的内容送入累加器A。34优点优点:不改变特殊功能寄存器及不改变特殊功能寄存器及PC的状态,根据的状态,根据A的内容就的内容就 可以取出表格中的常数。可以取出表格中的常数。缺点缺点:1)表

38、格只能存放在表格只能存放在该条查表指令所在地址的该条查表指令所在地址的+256个个 单元之内单元之内,表格大小受到限制,表格大小受到限制; 2)且表格只能被一段程序所用。且表格只能被一段程序所用。(2)MOVC A,A+DPTR DPTR为基址寄存器,为基址寄存器,A的内容的内容(无符号数无符号数)和和DPTR的内容相的内容相加得到一个加得到一个16位地址,把由该地址指定的程序存储器单元的内容位地址,把由该地址指定的程序存储器单元的内容送到累加器送到累加器A。 例:例:(DPTR)=8100H,(A)=40H,执行指令,执行指令 MOVC A,A+DPTR 将程序存储器中将程序存储器中8140

39、H单元单元内容送入内容送入A中。中。 应用本指令,应用本指令,表格的大小和位置可以在表格的大小和位置可以在64KB程序存储器程序存储器 空间中任意安排空间中任意安排。 一个表格一个表格可以为各个程序块公用可以为各个程序块公用。 执行上述两条指令时,单片机的执行上述两条指令时,单片机的 引脚信号(程序引脚信号(程序 存储器读)有效。存储器读)有效。 35PSEN5字节交换指令字节交换指令 XCH A,Rn ; (A) ( Rn),n =07 XCH A,direct ; (A) ( direct) XCH A,Ri ; (A) ( Ri),i=0,1 功能功能:将累加器将累加器A的内容和源操作数

40、的内容的内容和源操作数的内容相互交换相互交换。 寻址方式:寻址方式:源操作数有寄存器寻址、直接寻址和寄存器源操作数有寄存器寻址、直接寻址和寄存器间间 接寻址等方式。接寻址等方式。3637 XCH A,R7 ;(A) (R7) 80H 08H (A)=08H (R7)=80H XCH A,40H ;(A) (40H) 08H F0H (A)=F0H (40H)=08H XCH A,R0 ;(A) (R0) (R0)=30H (30H)=0FH F0H 0FH (A)=0FH (30H)=F0H 结果为(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H。例:例: (A)=80

41、H,(R7)=08H,(40H)=F0H, (R0)=30H, (30H)=0FH3810半字节交换指令半字节交换指令 XCHD A,Ri 累加器的低4位与内部RAM低4位交换。 例如:例如:(R0)=60H,(60H)=3EH, ( A)=59H, XCHD A,R0” (A)=59H (60H)=3EH (A)=5EH, (60H)=39H3.4.2 算术运算类指令算术运算类指令 指令构成指令构成: 加、减、乘、除加、减、乘、除指令。 使用限制使用限制: 算术运算指令都是针对8位二进制无符号数的,如要进行带符号带符号或多字节多字节二进制数运算,需编写具体的运算程序,通过执行程序实现。 对标

42、志位的影响对标志位的影响: 算术运算的结果将使PSW的进位(的进位(Cy)、辅助进位()、辅助进位(Ac)、溢出()、溢出(OV)3种标志位种标志位置1或清0。 注意注意: 增1和减1指令不影响这些标志。391加法指令加法指令 指令格式指令格式:ADD A,Rn ;(A)+(Rn)A ,n=07ADD A,direct;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A,i=0,1ADD A,#data ;(A)+#dataA 功能说明功能说明: 8位加法指令的一个加数一个加数总是来自累加器A,而另一个另一个加数加数可由寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址等不同的寻

43、址方式得到。加的结果总是放在累加器加的结果总是放在累加器A中。中。4041练习: 当两个加数都在片外RAM,运算结果也需放在片外RAM中时,程序如何编写? 硬件资源分配如下:硬件资源分配如下: 片外RAM的指针用R0,两个加数和结果地址由低到高依次存放,加法的源操作数用R1的寄存器寻址方式。MOVX A,R0 ;取第一个加数放;取第一个加数放R1MOV R1,A INC R0 ;取第二个加数放;取第二个加数放AMOVX A,R0ADD A,R1 ; 做加法做加法INC R0 ;存放运算结果;存放运算结果MOVX R0,A (1)如果)如果位位7有进位有进位,则进位标志,则进位标志Cy置置1,否

44、则,否则Cy清清0。(2)如果)如果位位3有进位有进位,辅助进位标志,辅助进位标志Ac置置1,否则否则Ac(Ac为为PSW寄寄 存器中的一位)清存器中的一位)清0。(3)如果)如果位位6有进位有进位,而,而位位7没有进位,没有进位,或者或者位位6没有进位没有进位,而,而位位7有有 进位进位,则溢出标志位,则溢出标志位OV置置1,否则否则OV清清0。 溢出标志位溢出标志位OV的状态的状态,只有带符号数加法运算时才有意义。,只有带符号数加法运算时才有意义。 当两个带符号数相加时,当两个带符号数相加时,OV=1,表示加法运算超出了累加器,表示加法运算超出了累加器A所能表示的带符号数的有效范围(所能表

45、示的带符号数的有效范围(-128+127),即产生了溢出,),即产生了溢出,表示运算结果是错误的,否则运算是正确的,即无溢出产生。表示运算结果是错误的,否则运算是正确的,即无溢出产生。42【例例3-1】 (A)=53H,(R0)=FCH,执行指令ADDA,R0运算式为 结果结果:(A)=4FH,Cy=1,Ac=0(位(位3向位向位4无进位)无进位), OV=0(位位6和位和位7同时有进位同时有进位) P=1(A中1的位数为奇数)。43【例例3-2】 (A)= 85H,(R0)=20H,(20H)=AFH,执行指令ADD A,R0 运算式为 结果结果:(A)=34H,Cy=1,位7有进位,而位6

46、无进位 P=1 (A中1的位数为奇数) 。 442带进位加法指令带进位加法指令 特点是进位标志位特点是进位标志位Cy参加运算,三个数相加。参加运算,三个数相加。 4条指令:条指令:ADDC A,Rn ;(A)+(Rn)+CA ,n =07ADDC A,direct ;(A)+(direct)+CAADDC A,Ri ;(A)+(Ri)+CA,i =0,1ADDC A,#data ;(A)+#data+CA 如果如果位位7有进位有进位,则进位标志,则进位标志Cy置置“1”,否则,否则Cy清清“0”; 如果如果位位3有进位有进位,则辅助进位标志,则辅助进位标志Ac置置“1”,否则,否则Ac清清“0

47、”; 如果如果位位6有进位有进位而而位位7没有进位没有进位,或者,或者位位7有进位有进位而而位位6没有没有 进位进位,则溢出标志,则溢出标志OV置置“1”,否则标志,否则标志OV清清“0”。45【例例3-3】 (A)=85H,(20H)=FFH,Cy=1,执行指令ADDC A,20H 运算式为 结果为 (A)=85H,Cy=1,Ac=1() OV=0(第第6位和第位和第7位都有进位)位都有进位) P=1 (A中1的位数为奇数)。 )。463增增1指令指令 5条指令:INC AINC Rn ;n=07INC direct INC Ri ;i =0,1 INC DPTR 把指令中所指出的变量增1,

48、且不影响PSW中的任何标志。 若变量原来为若变量原来为FFH,加,加1后溢出为后溢出为00H(前四条指令前四条指令),并且并且 不影响标志位。不影响标志位。 指令“INC DPTR”,16位数增1指令。首先对低8位指针 DPL 执行加1,当溢出时,就对DPH的内容进行加1,不不 影响标志影响标志Cy。 474十进制调整指令十进制调整指令 DA A 是对BCD码的进行十进制调整。两个BCD 码按二进制相加之后,必须经本指令的调整才能得到正确的压缩BCD码的和数。485带借位的减法指令带借位的减法指令 4条指令: SUBB A,Rn ; (A)-(Rn)-CyA,n =07 SUBB A,dire

49、ct ; (A)-(direct)-CyA SUBB A,Ri ; (A)-(Ri)-CyA, i =0,1 SUBB A,#data ; (A)-#data-CyA 从A的内容减去指定变量和进位标志Cy的值,结果存在A中。 如果位7需借位则Cy置1,否则Cy清0; 如果位3需借位则Ac置1,否则Ac清0; 如果位6借位而位7不借位,或者位7借位而位6不借位,则溢出标志位OV置“1”,否则OV清“0”。49【例3-5】 (A)=C9H,(R2)=54H,Cy=1,执行指令SUBB A,R2 运算式为 结果结果: (A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位,而第 7位没有向上产

50、生借位)。506减减1指令指令DEC A;(A)-1ADEC Rn ;(Rn)-1Rn,n=07DEC direct ;(direct)-1directDEC Ri ;(Ri)-1(Ri),i =0,1 功能是指定的变量减1。若原来为00H,减1后下溢为FFH,不影响标志位(P标志除外)。【例例3-6】 (A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H, (40H)=0FFH,执行指令DEC A;(A)-1A (A)=0EHDEC R7;(R7)-1R7 (R7)=18H DEC 30H;(30H)-130H (30H)=0FFH DEC R1;(R1)-1(R1) (4

51、0H)=0FEH517乘法指令乘法指令MUL AB ;ABBA 功能:功能: 乘积的低字节在累加器A中,高字节在B中。 标志影响:标志影响:如果积大于255,则OV置1,否则OV清0。 Cy标志总是清0。8除法指令除法指令DIV AB ;A/BA(商商),余数,余数B 商(为整数)存放在A中,余数存放在B中,且Cy和溢出标志位OV清“0”。 如果B的内容为0(即除数为0),则存放结果的A、B中的内容不定,并溢出标志位OV置1。523.4.3 逻辑操作类指令逻辑操作类指令1累加器累加器A 清清“0”指令指令CLRA 累加器A清0。不影响标志位。2累加器累加器A求反指令求反指令CPL A 将累加器

52、A的内容取反,不影响标志位。533左环移指令左环移指令RLA 功能是A向左循环移位,位7循环移入位0,不影响标志位,如图3-1所示。 4带进位左环移指令带进位左环移指令RLCA 将累加器A的内容和进位标志位Cy一起向左环移一位,如图3-2 所示。54图3-1 左环移左环移操作操作图3-2 带进位左环移带进位左环移操作操作5右环移指令右环移指令RR A 这条指令的功能是A的内容向右环移一位不影响其他标志位,如图3-3所示。6带进位右环移指令带进位右环移指令RRC AA的内容和进位标志Cy一起向右环移一位,如图3-4所示。55图3-3 右环移右环移操作操作图3-4 带进位右环移操作7累加器半字节交

53、换指令累加器半字节交换指令SWAP A 是将累加器A的高半字节(Acc.7Acc.4)和低半字节(Acc.3Acc.0)互换。【例3-8】 (A)= 95H,执行指令SWAP A 结果为结果为 (A)=59H。8逻辑与指令逻辑与指令 ANL A,Rn;(A)(Rn)A,n=07 ANL A,direct;(A)(direct)A ANL A,#data;(A)#dataA ANL A,Ri;(A)(Ri)A,i =01 ANL direct,A;(direct)(A)direct ANL direct,#data;(direct)#datadirect56 是在指定的变量之间进行“逻辑与”操作

54、,结果存放到目的变量所在的寄存器或存储器中。【例例3-9】 (A)=07H,(R0)=0FDH,执行指令ANLA,R0运算式为结果结果: (A)=05H。579逻辑或指令逻辑或指令ORLA,Rn;(A)(Rn)A ,n =07ORLA,direct;(A)(direct)AORLA,#data;(A) #dataAORLA,Ri;(A)(Ri)A,i =0,1ORLdirect,A;(direct)(A)directORLdirect,#data ;(direct)#datadirect 是在所指定的变量之间执行位的“逻辑或”操作,结果存到目的变量寄存器或存储器中。58【例例3-10】 (P1

55、)=05H,(A)=33H,执行指令ORLP1,A运算式为结果结果:(P1)=35H。5910逻辑异或指令逻辑异或指令 XRL A,Rn ;(A) (Rn)A,n=07 XRL A,direct ;(A) (direct)A XRL A,Ri ;(A) (Ri)A ,i =0,1 XRL A,#data ;(A) #dataA XRL direct,A ;(direct) (A)direct XRL direct,#data ;(direct) #data direct 功能是在所指定的变量之间执行以位位的“逻辑异或”操作,结果存到目的变量寄存器或存储器中。60【例例3-11】 (A)=90H

56、,(R3)=73H,执行指令XRLA,R3运算式为结果结果: (A)=E3H。613.4.4 3.4.4 控制转移类指令控制转移类指令1 1长转移指令长转移指令LJMPLJMPaddr16addr16 语法:语法:addr16 程序存储器某单元的; 程序中可以用目的地址标号、符号常量或 16位立即数表示; 指令执行时,将addr16装入PC,转向addr16 指定的目的地址。 目的地址无限制。可以是64KB程序存储器地址空 间的任何位置任何位置。 指令特性:指令特性:3字节 2周期 62632 2相对转移指令相对转移指令SJMPSJMPrelrel 语法:语法: relrel 相对偏移量,带符

57、号8位二进制补码数; 注意:注意:写代码时,程序中直接写目的写代码时,程序中直接写目的 位置的程序标号就可以,相对位置的程序标号就可以,相对 偏移量在汇编时由汇编器自动偏移量在汇编时由汇编器自动 计算和填入。计算和填入。 无条件转移的双向转移; 之间之间(-)。3绝对转移指令绝对转移指令AJMPaddr11 语法:语法:addr11 转移目标地址的低转移目标地址的低11位;位; 程序中可以用符号常量或立即数表示;程序中可以用符号常量或立即数表示; 兼容MCS48而设计的。 644间接跳转指令间接跳转指令JMP A+DPTR 功能功能:无条件转移。无条件转移。以以DPTR内容为内容为基址基址,A

58、的内容作为的内容作为变变 址址。给。给A赋予不同值,即可实现多分支转移。赋予不同值,即可实现多分支转移。 目的地址目的地址:由由A中中8位位无符号数无符号数与与DPTR的的16位位无符号数无符号数 内容之和来确定。内容之和来确定。 注意:注意:本指令不改变本指令不改变A和和DPTR的值,也不影的值,也不影 响标志位。响标志位。5条件转移指令条件转移指令 JZrel;如果;如果累加器累加器内容为内容为0,则执行转移,则执行转移JNZrel;如果;如果累加器累加器内容非内容非0,则执行转移,则执行转移 relrel 相对偏移量,带符号8位二进制补码数; 注意:注意:写代码时,程序中直接写目的写代码

59、时,程序中直接写目的 位置的程序标号就可以,相对位置的程序标号就可以,相对 偏移量在汇编时由汇编器自动偏移量在汇编时由汇编器自动 计算和填入。计算和填入。 条件满足条件满足,则转移;不满足,则顺序执行下一指令。,则转移;不满足,则顺序执行下一指令。 转移范围:转移范围:以下一条指令首地址为中心的以下一条指令首地址为中心的256B范围内(范围内(-128 +127)。)。6比较不相等转移指令比较不相等转移指令CJNEA,direct,relCJNEA,#data,relCJNE Rn,#data,relCJNE Ri,#data,rel 比较前两个操作数大小,如果值不相等则转移不相等则转移, 并

60、转向目的地址。 指令执行不影响任何一个操作数的内容。指令执行不影响任何一个操作数的内容。 注意:rel的含义、表达以及转移的范围,都与 上一条指令相同。 如果第一操作数(无符号整数)小于第二操作数如果第一操作数(无符号整数)小于第二操作数(无符号整数),则进位标志位Cy置1,否则Cy清0。687减减1不为不为0转移指令转移指令DJNZ Rn,rel;n =07DJNZ direct,rel功能:功能:将源操作数减将源操作数减1,结果送回源操作数,结果送回源操作数,如果结果不为如果结果不为0 则转移。则转移。 注意:rel的含义、表达以及转移的范围,都与上一条 指令相同。 用途:用途:用于实现程

温馨提示

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

评论

0/150

提交评论