第3章指令系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(4)数据交换指令
交换指令数据作双向传送,涉及传送的双方互为源地址、
目的地址,指令执行后两操作数均被冲掉、丢失。数据交换
指令共有如下5条指令:

设(R0) = 30H,(30H) = 4AH,(A) = 28H,则
执行XCH A, @R0后, 结果为(A) = 4AH,(30H) = 28H。 执行XCHD A,@R0后,结果为(A) = 48H,(30H) = 2AH。 执行SWAP A后, 结果为(A) = 84H。
在使用相对寻址时要注意以下两点: 1) 当前PC值是指相对转移指令的存储地址 加上该指令的字节数。例如:JZ rel 是一条 累加器A为零就转移的双字节指令。若该指令 的存储地址为2050H,则执行该指令时的当前 PC值即为2052H。
2) 偏移量rel是有符号的单字节数。以补码表示,
其值的范围是-128
MOV DPTR , #data16
执行MOV
A,#35H
74H 35H
立即寻址示意图
(2) 直接寻址
指令中直接给出操作数所在的存储器地址,以供取 数或存数的寻址方式称为直接寻址。 例如:MOV A,3CH 该指令的功能是把片内RAM地址为3CH单元的内
容送到A中。
执行MOV A,3CH
E5H 3CH
寄存器间接寻址
寄存器间接寻址方式的寻址范围
内部RAM低128单元
间址寄存器:R0 或 R1
外部RAM64KB
间址寄存器:DPTR
外部RAM的低256单元
间址寄存器:R0 或 R1
堆栈操作指令(PUSH和POP)也应算作 是寄存器寻址。 即以堆栈指针(SP)作间址寄存器的间接 寻址方式。
(5) 变址寻址(针对程序存储器的寻址方式)
MOV DPTR ,#data16
; DPTR ← #data16
(3) 外部数据传送指令
80C51单片机CPU对片外扩展的数据存储器RAM或I/O口进
行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来
完成。 指令助记符 MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR ,A 操作功能注释 ; A←((Ri)) ; (Ri)←(A) ; A←((DPTR)) ; (DPTR)←(A) 机器码(H) E2、E3 F2、F3 E6 F0
MOV 10H,#20H
;(10H)←20H
执Leabharlann Baidu上述指令后的结果为:
(R0)=30H,(R1)=(A)=40H,(B)=10H,
(40H)=(P1)=(P2)=CAH, (10H)=20H。
(2) 16位数据传送指令
仅此1条16位数据传送指令, MOV DPTR ,#data16 指令助记符 操作功能注释
这8条指令对应的机器码分别为E8H~EFH。
(4) 寄存器间接寻址
由指令指定的寄存器中存放的是操作数地址,即操
作数是通过寄存器间接得到的。这里需要强调的是:寄
存器中的内容不是操作数本身,而是操作数的地址,到
该地址单元中才能得到操作数,寄存器起地址指针的作 用。 例如:MOV A,@R1
执行MOV A,@R1
访问片内RAM的一般传送指令表
例1 设内部RAM(30H)=40H,(40H)=10H,(10H)=00H, (P1)=CAH,分析程序执行后各单元及寄存器、P2口的内容。 MOV R0,#30H MOV A,@R0 MOV R1,A MOV B,@R1 MOV @R1,P1 MOV P2,P1 ;(R0)←30H ;(A)←((R0)) ;(R1)←(A) ;(B)←((R1)) ;((R1))←(P1) ;(P2)←(P1)
变址寻址是指以DPTR或PC作基址寄存器,累加器A作变
址寄存器,以两者内容相加形 成的16位程序存储器地址 作为操作数地址。 MOVC A,@A+DPTR
图3.5 变址寻址
变址寻址
(6) 相对寻址(为实现程序转移设置) 相对寻址是指程序计数器PC的当前内容与指令中的 操作数值加,其结果作为跳转指令的转移地址(目的地 址)。 它用于访问程序存储器,主要用于跳转指令 PC当前值=源地址+转移指令字节数


单元地址加位
特殊功能寄存器符号加位
例:专用寄存器的PSW.5位
SETB SETB SETB SETB D5H F0 D0H.5 PSW.5
3.3 80C51单片机的指令系统
指令系统共111条指令 • 数据传送指令类29条 • 算术运算类24条 • 逻辑运算类24条 • 控制转移类17条 • 布尔变量操作类17条

+127(00H
~ FFH),负数表示从
当前地址向前转移,正数表示从当前地址向后转移。
目的地址 = 当前PC值+rel
= 指令存储地址+指令字节数+rel
JC rel
00H
rel=75H
PC值
字节数
1000H+02H=1002H RAM PSW 10000000 SFR 1002H+75H=1077H
第3章 80C51单片机的指令系统 3.1 3.2 3.3
概述 寻址方式
指令系统
3.1 概述
3.1.1 指令、指令系统的概念
指令是使计算机内部执行的一种操作,提供给用户
编程使用的一种命令。
以二进制代码来描述指令功能的语言,称之为机器语
言。因此给每条机器语言指令赋予助记符号来表示,这
就形成了汇编语言,汇编语言和机器语言指令一一对应。
这两条指令都是双字节指令

已知片内RAM50H单元中存放数值为AAH,设堆栈指
针为30H,把此数值压入堆栈,然后再弹出到40H中。 完成上述功能的程序如下: MOV SP,#30H PUSH 50H ;SP←30H ;SP+1 →SP,(50H) →(31H)
POP 40H
;(31H) → (40H) , SP-1→SP
3.2 寻址方式和寻址空间
寻址: 在单片机的存储空间中寻找指令规定的操 作数的地址,并将操作数取出来。
寻址方式: 寻找操作数地址的方式称寻址方式 在一条指令中通常是根据指令的源操作数来 决定寻址方式的。
寻址方式
(1) 立即寻址
操作数直接出现在指令中,紧跟在操作码的后面,作为指令
的一部分与操作码一起存放在程序存储器中,可以立即得到并执 行,不需要经过别的途径去寻找,故称为立即寻址。 立即寻址所对应的存储空间为ROM空间 • 例如:MOV A,#35H 指令中35H就是立即数。
执行结果为: (A)=02H, (R0)=02H,(PC)=1004H。
例5
从片外程序存储器2000H单元开始存放0~9的平方值,
以DPTR作为基址寄存器进行查表得9的平方值。
其程序如下: MOV DPTR,#2000H ;置表首地址
MOV A, #09H MOVC A,@A+DPTR
(6)堆栈操作指令
3.3 80C51单片机的指令系统
3.3.1 数据传送类指令
(1)片内数据存储器的一般数据传送指令
该类指令的功能是实现数在片内RAM单元之间、寄存器之
间、寄存器与RAM单元之间的传送。所有指令具有统一的格式,
其格式如下: MOV <目的操作数>,<源操作数>;目的操作数单元←源操 作数(或单元) 操作码助记符都是"MOV",目的操作数和源操作数不同寻 址方式的组合就派生出该类的全部指令共有15条。
表示R0或R1。n取0~7,表示R0~R7。
(2) #data:表示指令中的8位立即数。
(3) #data16:表示指令中的16位立即数。
(4) rel:以补码形式表示的8位相对偏移量,范围为–128~127。 (5) addr11:表示11位直接地址。
(6) addr16:表示16位直接地址。 (7) direct:表示直接寻址的地址。
堆栈操作有进栈和出栈,即压入和弹出数据,常用于临时保
护数据及子程序调用时保存或恢复现场。
该类指令共有如下两条指令:
(SP)←(SP)+ 1 PUSH direct ; ((SP))←direct
修改指针,使其指向栈顶上的一个存数单元
把直接地址单元的内容压入SP所指单元内
(direct)←(SP) 把栈顶的数据弹出到直接寻址单元中去 POP direct ; (SP)←(SP)-1 修改指针,指向新栈顶
直接寻址示意图
(3) 寄存器寻址 在指令选定的寄存器中存放或读取操作数,以完成 指令规定的操作,称为寄存器寻址。 例如:MOV 都是寄存器寻址。 A,R1指令中源操作数和目的操作数
执行MOV
A,R1
E9
寄存器寻址示意 图
指令机器码的低3位分别指明所用的工作寄存器R0,R1,…,R6,R7。
如:MOV A,Rn(n=0~7),
偏移量 = 表首地址 – (MOVC指令所在地址+1)
例4 程序存储器中表格数据为: 1010H:02H 1011H:04H 1012H:06H 1013H:08H 执行程序: 1000H 1002H 1003H MOV A,#0DH MOVC A,@A+PC MOV R0,A ;A←0DH(偏移量) ;(0DH+1003H) → A ;(A) →R0
MOV DPTR,#0203H
MOVX A,@DPTR MOV 30H,A MOV A,#0FH MOVX @DPTR,A
;DPTR←0203H
;A←((DPTR)) ;30H←(A) ;A←0FH ;(DPTR)←(A)
执行结果为:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。
若以PC作为基址寄存器,CPU取完该指令操作码时PC会自 动加1,指向下一条指令的第一个字节地址,即此时是用(PC)+1作
为基址的。另外,由于累加器A中的内容为8位无符号数,这就使
得本指令查表范围只能在256个字节范围内 即 (PC)+1H~(PC)+100H
使表格地址空间分配受到限制。 在编程时需要进行偏移量的计算,偏移量计算公式为:
• 外部RAM只能通过累加器A进行数据传送 • 累加器A与外部RAM之间传送数据只能用间接 寻找方式。 • 使用时应当先将要写入或读出的地址送DPTR, Ri中,再用读写指令。 • 片外扩展的I/O端口与片外RAM是统一编址的, 对片外I/O端口的访问也使用以上四条指令。
例2 设外部RAM(0203H)= FFH,分析以下指令执行后的结果。
(8) bit:表示可位寻址的直接位地址。
(9) (X):表示X单元中的内容。
(10) ((X)):表示以X单元的内容为地址的存储器单元内容,
即(X)作地址,该地址单元的内容用((X))表示。
(11) / 和→符号:“/”表示对该位操作数取反,但不影响该
位的原值。“→”表示操作流程,将箭尾一方的内容送入箭头 所指的单元中去。
80C51单片机指令系统共有111条指令。从功能上可划分成 数据传送、算术操作、逻辑操作、程序转移和位操作等五大类;
80C51单片机的指令有无操作数、单操作数、双操作数三 种情况。汇编语言指令有如下的格式:
标号:操作码助记符 <目的操作数> , <源操作数> ;注释
指令符号的约定意义:
(1) Ri和Rn:表示当前工作寄存器区中的工作寄存器,i取0或1,
执行结果: (40H) = AAH,(SP)=30H。
例7 若在片外ROM中2000H单元开始依次存放0~9的平方值,
(5) 访问程序存储器的数据传送指令
访问程序存储器的数据传送指令又称作查表指令,采用基址 加变址的变址寻址方式,把程序存储器中存放的表格数据读出, 传送到累加器A。 指令助记符 MOVC A, @A+DPTR MOVC A, @A+PC 操作功能注释 ;(A)←((A)+(DPTR)) ;(PC)←(PC)+1,(A)←((A)+(PC))
指令系统
一台计算机的CPU能够执行的全部操作所对应的指令集合。
采用机器语言编写的程序称之为目标程序。 采用汇编语言编写的程序称之为源程序。 汇编语言程序不能被计算机直接识别并执行,必须经过一 个中间环节把它翻译成机器语言程序,这个中间过程叫做汇编。
3.1.2 80C51单片机指令系统及其指令格式
当前PC值 偏移量 新PC值 注意 此例中CY PSW.7)为1
1000H 1001H 1002H
40H 75H
JC rel
1077H ROM
7. 位寻址
位寻址是在位操作指令中直接给出位操作数的地址,可以
对片内RAM中的(20H ~ 2FH)128位和特殊功能寄存器SFR
中的84位进行寻址。位寻址在指令中有四种表示方法 • • 直接使用位地址 位名称
相关文档
最新文档