8051单片机的指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5 变址寻址
变址寻址是以某个寄存器的内容为基本地 址,然后在这个基址上加以地址的偏移量,才是 真正的操作数地址。 例:
MOVC A,@ A+DPTR , MOVC A,@ A+PC , ;A←(A+DPTR) ( ) ;A←(A+PC) ( )
MOVC A, @A+DPTR
操作பைடு நூலகம்意图
程序存储器
DPTR
这组指令功能将源操作数指定内容送到A 这组指令功能将源操作数指定内容送到A中。 源操作数指定内容送到
2 以寄存器Rn为目的操作数的指令 (3条) 以寄存器Rn为目的操作数的指令 Rn Rn, MOV Rn,A Rn, MOV Rn,direct MOV Rn,#data Rn,
这组指令功能是把源操作数指定的内容送入当前工作寄存 这组指令功能是把源操作数指定的内容送入当前工作寄存 源操作数指定 源操作数不变。 器,源操作数不变。
2.要读或写外部RAM,必须要知道RAM的地址,采用DPTR时,地址 被直接放在DPTR中的。采用Ri(R0或R1)时,由于Ri只是8位的寄 存器,所以只提供低8位地址。高8位地址由P2口来提供。 3.使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写 命令。 例:将外部RAM中100H单元中的内容送入外部RAM中200H单元中。 MOV DPTR,#0100H MOVX A,@DPTR MOV DPTR,#0200H MOVX @DPTR,A
MOV MOV PUSH POP
SP,#10H 40H,#50H 40H 30H
执行第一条PUSH 40H指令是这样的:将SP中的值加1,变为11H, 然后将40H中的值送到11H单元中,因此执行完本条指令后,内存 11H单元的值是50H,同样,执行POP 30H时,是将11H中的值送入到 30H单元中,即执行完本条指令后,30H单元中的值变为50H。
8051单片机片内数据传送图 单片机片内数据传送图
直接地址 direct
累加器 A
直接地址 direct
间接地址 @Ri
寄存器 Rn
立即数 #data
寄存器 DPTR
以累加器为目的操作数的指令( 1 以累加器为目的操作数的指令(4条) MOV MOV MOV MOV A, A,Rn A, A,direct A, A,@Ri A, A,#data
程序存储器 执行前PC 执行前
2000H
SJMP 08H 08H
2000H+2
执行后PC 200AH 执行后
7 位寻址
位寻址只能对有位地址的单元作位寻址操 作。位寻址其实是一种直接寻址方式,不过其 地址是位地址。 例:
SETB 10H MOV 32H,C , CLR PSW.4 位置1 ;将10H位置 位置 进位位C ;32H←进位位 进位位 位清0 ;将RS1位清 位清
MOV A , @R0 ;A ← ((R0)) MOVX @DPTR,A ;外部RAM(DPTR)←A , 外部
MOV A ,@R0 操作示意图
片内RAM 片内
R0
30H 30H 34H
A
34H
MOVX @DPTR,A ,
操作示意图
片外RAM 片外
DPTR 2000H 2000H 30H
A
30H
累加器A与片外RAM之间的数据传递类指令(4 RAM之间的数据传递类指令(4条 6 累加器A与片外RAM之间的数据传递类指令(4条) MOVX MOVX A,@Ri MOVX @Ri, MOVX @Ri,A MOVX MOVX A,@DPTR MOVX @DPTR, MOVX @DPTR,A
说明: 1.在8051中,与外部RAM存储器打交道的只可以是累加器A 。所 有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部 RAM中的数据也必需通过A读入。 A 在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进 行数据的传递,而外部则不行。 比如,要将外部RAM中某一单元(设为0100H单元的数据)送入 另一个单元(设为0200H单元),也必须先将0100H单元中的内容读 入A,然后再送到0200H单元中去。
以直接地址为目的操作数的指令( 3 以直接地址为目的操作数的指令(5条) direct, MOV direct,A direct, MOV direct,Rn direct1, MOV direct1,direct2 direct, MOV direct,@Ri direct, MOV direct,#data 这组指令功能是把源操作数指定 源操作数指定的内容送入由直接 这组指令功能是把源操作数指定的内容送入由直接 地址指出的片内存储单元。 地址指出的片内存储单元。 例: MOV 20H,A
02F1H +
A 0302H 1EH
A执行前 执行前
11H
A执行后 执行后
1EH
6 相对寻址
以当前程序计数器PC的内容为基础,加上 指令给出的一字节补码数(偏移量)形成新的 PC值的寻址方式。相对寻址用于修改PC值, 主要用于实现程序的分支转移。 例:
SJMP 08H ;PC←PC+2+08H
SJMP 08H 操作示意图
5 MOV
十六位数的传递指令( 十六位数的传递指令(1条) DPTR, DPTR,#data16
8051是 位机,这是唯一的一条16位立即数传递指令。 8051是8位机,这是唯一的一条16位立即数传递指令。 16位立即数传递指令 功能:将一个16位的立即数送入DPTR中去。其中高8 功能:将一个16位的立即数送入DPTR中去。其中高8位 16位的立即数送入DPTR中去 送入DPH, 送入DPH,低8位送入DPL。 DPH 位送入DPL。 DPL 例:MOV DPTR,#1234H 执行完了之后DPH中的值为12H,DPL中的值为34H。 执行完了之后DPH中的值为12H,DPL中的值为34H。 DPH中的值为12H 中的值为34H 如果我们分别向DPH,DPL送数,则结果也一样。 如果我们分别向DPH,DPL送数,则结果也一样。 DPH 送数 如下面两条指令: 如下面两条指令: 相当于执行了 MOV DPH,#35H MOV DPL,#12H。 MOV DPTR,#3512H。
指令的字节数
一条指令由操作码和操作数组成。操作码 指明执行什么操作,例如数的传送、加法、减 法等。操作数则表示这条指令所完成的操作对 象,即是对谁进行操作。操作数可以是一个数, 或者是一个数所在的内存地址。指令由指令字 节组成,不同的指令,指令的字节数不相同。 有单字节指令、双字节指令和三字节指令。
MOV MOV MOV MOV MOV 20H,R1 20H,30H 20H,@R1 0A0H,#34H P2,#34H
4 以间接地址为目的操作数的指令 以间接地址为目的操作数的指令(3条) @Ri, MOV @Ri,A @Ri, MOV @Ri,direct @Ri, MOV @Ri,#data 功能:把源操作数指定的内容送入以R0 R1中内容为 R0或 功能:把源操作数指定的内容送入以R0或R1中内容为 地址的片内存储单元。 地址的片内存储单元。 例: MOV @R0,A MOV @R1,20H MOV @R0,#34H
2 直接寻址
指令中直接给出操作数地址的寻址方式, 能进行直接寻址的存储空间有SFR寄存器和内 部数据RAM。 例:
MOV MOV PSW,# 20H , A,30H , ;PSW←#20H ;A←(30H)
3 立即寻址
指令中直接给出操作数的寻址方式。立即操 作数用前面加有#号的8位或16位数来表示。 例:
8 PUSH direct POP direct 例:
堆栈操作( 堆栈操作(2条)
第一条为压入指令, direct中的内容送入堆栈中, 第一条为压入指令,将direct中的内容送入堆栈中,第二条为 中的内容送入堆栈中 弹出指令,将堆栈中的内容送回到direct中。 弹出指令,将堆栈中的内容送回到direct中 direct
8051单片机的指令系统 单片机的指令系统
指令和助记符
指令本身是一组二进制数代码,为了便于 记忆,将这些代码用具有一定含义的指令助记 符来表示,助记符一般采用英文单词的缩写 。 例:
指令代码 740A 助记符 MOV A,#0AH , 功能 将十六进制数0AH放 放 将十六进制数 入累加器A中 入累加器 中
寻址方式
1 寄存器寻址 2 直接寻址 3 立即寻址 4 寄存器间接寻址 5 变址寻址 6 相对寻址 7 位寻址
1 寄存器寻址
以通用寄存器的内容为操作数的寻址方式。 通用寄存器为A、B 、DPTR以及R0~R7 。
例:
CLR INC ADD A DPTR R5,# 20H , ;A←0 ;DPTR←DPTR+1 ;R5←#20H+R5
指令分类说明
1 数据传送类指令 2 算术运算类指令 3 逻辑运算与循环类指令 4 程序转移类指令 5 子程序调用及返回指令 6 位操作指令
数据传送类指令
助记符 MOV、MOVX、 MOV、MOVX、MOVC XCH、XCHD、 XCH、XCHD、SWAP PUSH、 PUSH、POP 源操作数寻址方式:
主要用于8位无符号数运算; 主要用于8位无符号数运算;也可用于带符号数运 包括: 运算指令, 算。包括:加、减、乘、除、加1、减1运算指令, 指令操作将影响PSW中有关状态位。 PSW中有关状态位 指令操作将影响PSW中有关状态位。
1 加法指令 (1)不带进位位的加法指令(4条)
A, ADD A,#data A, ADD A,direct A, ADD A,Rn A, ADD A,@Ri 用途: 中的值与源操作数所指内容相加, 用途:将A中的值与源操作数所指内容相加,最终结果 存在A 存在A中。
7
读程序存储器指令( 条 读程序存储器指令(2条)
A, MOVC A,@A+DPTR MOVC A,@A+PC A,
本组指令是将ROM中的数送入A中。本组指令也被称为查表指 令,常用此指令来查一个已做好在ROM中的表格 说明:查找到的结果被放在A中,因此,本条指令执行前后,A 中的值不一定相同。 例:有一个数在R0中,要求用查表的方法确定它的平方值(此 数的取值范围是0-5) MOV DPTR,#100H MOV A,R0 MOVC A,@A+DPTR …… ORG 0100H DB 0,1,4,9,16,25
例1:ADD ADD ADD ADD
A, A,#47H A, A,34H A, A,R7 A, A,@R0
例2:MOV A,#0AEH ;-82 A, ;A, ;ADD A,#81H ;-127 则执行完本条指令后, 中的值为2FH 则执行完本条指令后,A中的值为2FH PSW中状态位 C=1,AC=0,OV=1, PSW中状态位 C=1,AC=0,OV=1,P=1 对无符号数:结果为12FH; 对无符号数:结果为12FH; 对带符号数:OV=1,有错。 对带符号数:OV=1,有错。
MOV A,# 60H , ;A←#60H MOV DPTR,# 3400H ;DPTR←#3400H , MOV 30H,# 40H , 单元←#40H ;30H单元 单元
4 寄存器间接寻址
以寄存器中内容为地址,以该地址中内容为操 作数的寻址方式。间接寻址的存储器空间包括内 部数据RAM和外部数据RAM。能用于寄存器间接 寻址的寄存器有R0,R1和DPTR。在寄存器名称 前面加一个符号@来表示寄存器间接寻址。 例:
9 XCH XCH XCH XCHD SWAP
MOV XCH SWAP XCH XCHD
交换指令( 交换指令(5条)
A, A,Rn A, A, direct A, A, @Ri A, @Ri A, A
R6, #29H A, R6 A A, R6 A, @R0
例: 已知A中的内容为34H
算术运算类指令
立即寻址、直接寻址、寄存器寻址、 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、变址寻址。 寄存器间接寻址、变址寻址。
说明 传送操作 交换操作 堆栈操作
目的操作数寻址方式:
直接寻址、寄存器寻址、 直接寻址、寄存器寻址、寄存器间接寻址 除了目的操作数为ACC的指令影响奇偶标志P ACC的指令影响奇偶标志 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影 响标志位。 响标志位。