第3章-指令系统
合集下载
第三章 指令系统--指令

寻址方式指令系统
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
通用传送指令
累加器专用传送指令
地址传送指令
标志传送指令
对标志位的影响: 除SAHF和POPF指令外,其余的所有数据传送类指令
格式:
功能:
操作数类型:
DS,100H
用
堆栈:执行
PUSH
POP
SS指向堆栈段的起始位置SP指定栈顶
PUSH AX PUSH DS POP DS POP AX
格式:
oprd1,
立即数、段寄存器和
不影响
通用传送指令
累加器专用传送指令地址传送指令
标志传送指令
LEA (Load Effective Address)
LDS (Load pointer into register and DS) LES (Load pointer into register and ES)
LEA LEA
LEA
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
实现二进制
所有算术运算指令均所有算术运算指令均
四则运算是计算机经常进行的一种操作。
请注意算术运算指令对
只有一个操作数:寄存器或存储单元对操作数加
用于计数器和地址指针的调整
不影响进位
对操作数减
用于计数器和地址指针的调整不影响进位。
第3章_CP1HPLC的指令系统

在方法2中,OR LD之前的触点组个数应小于等于8
作业
PLC 编写以下自锁电路的指令助记符 运行程序
0.01 0.02 0.03 0.04 LD 0.05 0.06 100.00
W0.00 H0.01
LD 100.00 OR OR LD OR
0.07
AND LD
END
微分指令与即时刷新指令
普通指令输入输出执行在I/O刷新阶段。 微分指令:上微分@、下微分% 微分指令在执行条件变化(上微分、下微分) 时执行。 即时刷新指令:! 即时刷新指令不等I/O刷新阶段立即执行。
注意! LD LD KEEP 00002 00003 10000
00003
复位条件 置位条件
置位和复位条件都可以是短信号(脉冲信号)
使用KEEP指令举例
画出图示程序的工作时序,写出语句表。
00000 00000
00001
00002 10000 HR0000
KEEP 10000
00001
00002 10000 00000 00001 10000 LD LD KEEP 00002 10000 H00000 KEEP H00000
1 5 2 N 3 4
3 1 1 3
5
5
2
4 ( b)
N
( a)
(5) 程序结束一定要安排END指令,否则程序不被执行 没END指令的程序,检查时显示信息“NO END INST”
2.基本编程方法
(1) 两个或两个以上的线圈或指令可以并联输出。
00000 10000 10001
LD OUT OUT SET
00003
10000
KEEP编程用HR作输出时,具有保持功能。 SET和RESET编程HR作输出时,有保持功能。 SET和RESET编程时,指令间可插别的指令。
第3章指令系统和寻址方式

(6) 基址变址寻址方式 基址变址寻址方式*
(BX) 有效地址 = + (BP) 指令格式: 指令格式: MOV MOV MOV (SI) (DI)
AX, [BX] [DI] AX, [BX+DI] AX, ES:[BX] [SI]
* 适于数组、字符串、表格的处理 适于数组、字符串、 * 必须是一个基址寄存器和一个变址寄存器的组合
• 寄存器操作数
– 寄存器的内容参加运算或存放结果。 寄存器的内容参加运算或存放结果。
• 存储器操作数
– 指内存某地址的字节、字、双字等是指令的处 指内存某地址的字节、 理对象, 理对象,这时必须把处理对象取出或送入相应 地址。 地址。
有效地址和段超越
• 存储单元的物理地址由两部分组成:段 存储单元的物理地址由两部分组成: 寄存器保存的段基值,偏移地址。 寄存器保存的段基值,偏移地址。 • 在8086/8088的各种寻址方式中,寻找存 的各种寻址方式中, 的各种寻址方式中 储单元所需的偏移地址,称为有效地址, 储单元所需的偏移地址,称为有效地址, 用EA表示。 表示。 表示 • 不同的寻址方式,组成有效地址 的各 不同的寻址方式,组成有效地址EA的各 部分内容也不一样,寻址方式主要是EA 部分内容也不一样,寻址方式主要是 如何计算与寻找的问题。 如何计算与寻找的问题。
汇编指令的书写形式
• 格式
[name] operation operand [;comment] – 名字项(name):可以是标号或变量,表示本 名字项( ):可以是标号或变量 ):可以是标号或变量, 语句的符号地址。 语句的符号地址。
• 标号在代码段中定义,后跟冒号。 标号在代码段中定义,后跟冒号。 • 变量在数据段或附加数据段中定义,后面不跟冒号。 变量在数据段或附加数据段中定义,后面不跟冒号 不跟冒号。 • 名字项组成:字母打头的字符串组成。包含字符 名字项组成:字母打头的字符串组成。 (A~Z,0~9,_,?,$,@等),如MainLoop, , , , , , 等),如 , Calc_long_sum。 。 • 单独的$或?有特殊含义,不能做符号名。 单独的 或 有特殊含义,不能做符号名。 有特殊含义 • 保留字不能用在名字项。 保留字不能用在名字项。
第3章指令系统

解:程序如下: 程序如下: ORG NUM DATA STRING DATA START: CLR MOV LOOP: LOOP: CJNE SJMP NEXT: NEXT: INC INC SJMP COMP: COMP: MOV SJMP 0800H 20H 21H A R0, R0,#STRING @R0, @R0,#24H,NEXT COMP A R0 LOOP NUM, NUM,A $
单片机原理 及接口技术
第3 章
89C51单片机指 89C51单片机指 令系统
LOGO
LOGO
程序设计举例
一 二 三 四 五 六
简单程序设计举例 分支程序 循环程序 子程序设计举例 代码转换程序设计举例 运算类程序设计举例
BACK
LOGO
一、 简单程序设计举例
例1 :拆字。将片内RAM 20H单元的内容拆成两段,每段 拆字。将片内RAM 20H单元的内容拆成两段 单元的内容拆成两段, 四位。并将它们分别存入21H 22H单元中 程序如下: 21H与 单元中。 四位。并将它们分别存入21H与22H单元中。程序如下:
练习: 练习: 1.将片外RAM 2000H单元开 始的20个字节,传送到片 内RAM 30H单元开始的单元 中去。 2.将片内RAM 20H单元开始 的10个字节,传送到片内 RAM 30H单元开始的单元中 去。 3.将片内RAM BK1单元开始 的COUNT个字节,传送到片 外RAM BK2单元开始的单元 中去。
Back
LOGO
3.4
思考题与习题
1. 简述下列基本概念: 指令、指令系统、机器语言、汇编语言、高级 语言。 2. 什么是计算机的指令和指令系统? 3. 简述89C51汇编指令格式。 4. 简述89C51的寻址方式和所能涉及的寻址空间。 5. 要访问特殊功能寄存器和片外数据存储器,应采用哪些寻址方式?
单片机原理 及接口技术
第3 章
89C51单片机指 89C51单片机指 令系统
LOGO
LOGO
程序设计举例
一 二 三 四 五 六
简单程序设计举例 分支程序 循环程序 子程序设计举例 代码转换程序设计举例 运算类程序设计举例
BACK
LOGO
一、 简单程序设计举例
例1 :拆字。将片内RAM 20H单元的内容拆成两段,每段 拆字。将片内RAM 20H单元的内容拆成两段 单元的内容拆成两段, 四位。并将它们分别存入21H 22H单元中 程序如下: 21H与 单元中。 四位。并将它们分别存入21H与22H单元中。程序如下:
练习: 练习: 1.将片外RAM 2000H单元开 始的20个字节,传送到片 内RAM 30H单元开始的单元 中去。 2.将片内RAM 20H单元开始 的10个字节,传送到片内 RAM 30H单元开始的单元中 去。 3.将片内RAM BK1单元开始 的COUNT个字节,传送到片 外RAM BK2单元开始的单元 中去。
Back
LOGO
3.4
思考题与习题
1. 简述下列基本概念: 指令、指令系统、机器语言、汇编语言、高级 语言。 2. 什么是计算机的指令和指令系统? 3. 简述89C51汇编指令格式。 4. 简述89C51的寻址方式和所能涉及的寻址空间。 5. 要访问特殊功能寄存器和片外数据存储器,应采用哪些寻址方式?
第三章指令系统总结及课后题

(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,
(40H)
=40H,(48H)=38H
精选2021版课件
5
7、8951片内高128字节的地址寻址要注意什么/? 答: 用直接寻址,位寻址,寄存器寻址
8、指出些列指令的本质?
MOV MOV MOV MOV
A,DATA ;
寄存器寻址 工作寄存器R0-R7、A、B、C、DPTR
寄存器间接寻 址
片内RAM低128B、片外RAM
变址寻址
程序存储器(@A+PC,@A+DPTR)
相对寻址
程序存储器256B范围(PC+偏移量)
位寻址
片内RAM的20H-2FH字节地址、部分SFR
精选2021版课件
3
寻址方式中常用的符号注释
Rn(n=0~7):当前选中的工作寄存器组R0~R7。 Ri(I=0,1):作为地址指针的两个工作寄存器R0,R1。 #data:8位立即数。 #data16:16位立即数。 direct:8位片内RAM单元(包括SFR)的直接地址。 addr11:11位目的地址,用于ACALL和AJMP指令中。 addr16:16位目的地址。用于LCALL和LJMP指令中。 rel:补码表示的8位地址偏移量。范围:-128~+127D。 bit:片内RAM或SFR的直接寻址位地址。 @:间接寄存器的符号。 /:位操作指令中对该位先取反再参与操作,不影响原值。 (×):×中的内容。 ((×)):×指出的地址单元中的内容。 →:指令操作流程方向。
高级语言:独立于机器的,在编程时不需要对机 器结构及其指令系统有深入了解的通用性语言
精选2021版课件
2
第三章 单片机的指令系统

MOV @Rj, #data MOV direct, #data MOV DPTR, #data
(EX2)
数据传送指令(四) 第四类——片外数据存储器访问指令
可访问片外RAM的0~FFH地址共256个单元:
MOVX
MOVX
A,
@Ri,
@Ri
A
; i = 0, 1
; i = 0, 1
可访问片外RAM的整个空间0~FFFFH地址的单元: MOVX MOVX A, @DPTR A
@DPTR,
(EX3)
数据传送指令(五)
第五类——程序存储器访问指令(查表指令)
MOVC
MOVC
A, @A+DPTR
A, @A+PC
(INDXADDRESS.ASM)
数据传送指令(六)
第六类——数据交换指令
XCH
XCH XCH
A,
A, A,
Ri
@Rj direct
;i =0~7
; j = 0 ,1
第三章 指令系统(一)
一、单片机的编程语言
⑴机器语言 以二进制代码形式表示指令、程序
⑵汇编语言 用助记符表示操作码,字符表示操作数的指令。
⑶高级语言 面向过程的语言,与硬件无关,如BASIC、C等。
⑷汇编语言和高级语言的结合 (5)学习汇编语言的意义 ①开发实时性强的系统时,直接应用汇编语言或在C中嵌入 汇编语言进行开发; ②通过汇编语言学习,更好掌握单片机的硬件结构,为应用 C语言编制高效率的单片机程序打好基础。
51单片机的最小系统
AT89C51
30pF
+5V
12M 30pF 2.2K
R1
17 16
第3章--Cortex-M3-指令系统

3.2.2指令的可选后缀
(2)!后缀 如果指令地址表达式中不含!后缀,则基址寄存器中的地址值不会发生变化。 指令中的地址表达式中含有!后缀时,指令执行后,基址寄存器中的地址值将发 生变化,变化的结果如下: 基址寄存器中的值(指令执行后)=指令执行前的值+地址偏移量
例 3.3 分别执行下面两条指令有何区别?
18
3.3 指令的寻址方式
• 3.3.1 立即数寻址 • 3.3.2 寄存器寻址 • 3.3.3 寄存器间接寻址 • 3.3.4 寄存器移位寻址 • 3.3.5 基址变址寻址 • 3.3.6 多寄存器寻址 • 3.3.7 相对寻址 • 3.3.8 堆栈寻址
3.3.1立即数寻址
• 立即数寻址也叫立即寻址,操作数本身就在指令中给出,取出指令也就
第3章 Cortex-M3 指令系统
1
第3章 Cortex-M3 指令系统
• 3.1 指令基础 • 3.2 汇编语言 • 3.3 寻址方式 • 3.4 指令集
2
3.1 指令基础
• 3.1.1 程序设计语言的层次结构 • 3.1.2 程序的执行过程 • 3.1.3 Cortex M3寄存器
3.1.1程序设计语言的层次结构
S后缀通常用于对条件进行测试,例如是否有溢出,是否进位等;根据 这些变化,就可以进行一些判断,如是否大于,是否相等;从而可能影响 指令执行的顺序。
✓ 条件后缀和S后缀的关系如下: 如果既有条件后缀又有S后缀,则书写时S排在后面, 如:ADDEQS R1,R0,R2 该指令在Z=1时执行,将R0+R2的值放入R1,同时刷新条件标志位。
无法表示的32位数, 只有通过逻辑或算术运算等其它途径获得了. 比如0xffffff00, 可以通过0x000000ff按位取反得到.
第3章单片机指令系统

寄存器寻址 寻址方式 寄存器间接寻址
基址加变址寄存器间接寻址 相对寻址 位寻址
1.立即寻址
操作数直接由指令给出,通常紧跟指令操作码之 后的字节是操作数,该操作数被称为立即数。
立即寻址所对应的寻址空间为:ROM 立即数:8/16位二进制数
如:MOV MOV A,#7AH DPTR, #1234H
注意:
① 适当选择SFR。寻址SFR时,可以用直接地址,也可以 用寄存器名,但后者更容易理解和阅读 如: MOV A,0D0H ; (A)←(D0H) MOV A,PSW ; (A)←(PSW)
② 适当选择累加器的表达式
累加器A表达方式 A → 寄存器寻址 ACC 直接寻址 E0H ;04H 单字节
如:
INC A INC ACC INC 0E0H
;05E0H 双字节
③ 注意地址的区别(位地址与字节地址)
如: MOV A,30H MOV C,30H ; (A)←(30H) ;(C)←(30H) 字节操作 位操作
3. 寄存器寻址
操作数在寄存器中
可用寄存器有: (1)四组工作寄存器R0~R7共32个工作寄存器 (2)SFR中有A、AB、DPTR及CY 如: MOV R3,#12H MOV A,R3
注意:① 立即数前加“#”号 ② 立即寻址方式的指令是双字节的(第1个字节为 操作码,第2个字节是操作数) ③ 操作数是放在ROM内的常数
2. 直接寻址
指令中直接给出操作数所在的单元地址或位地址
直接寻址可访问的存储空间: (1)内部RAM低128个单元 在指令中直接以单元地址形式给出,地址范围00H~7FH (2)特殊功能寄存器SFR 直接寻址是SFR惟一的寻址方式,SFR可以用单元地址给出, 也可用寄存器符号形式给出(但A、AB、DPTR除外) (3)211个位地址空间 内部RAM中可位寻址的20H~2FH单元对应的128个位地址空间 11个SFR中83个可用的位地址空间
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3-1-3 所示。
图 3-1-3 MOV A,30H 指令执行过程
3.寄存器寻址 寄存器寻址是指定某一可寻址的寄存器的内容为操作数。可寻址的寄存器包括:对累加
器 A、通用寄存器 B、工作寄存器 R0~R7、数据指针寄存器 DPTR 和进位位 C。 这些可寄存器寻址的单元,其具体的寄存器已隐含在其操作码中,而不需要再用操作数
当访问片内 RAM 或片外 RAM 低 256B 时,一般用 R0 或 R1 作间接寻址寄存器,在这 类指令中,由操作码的最低位指出所用的是 R0 或 R1。
例如 MOV A,@R0 这条指令把 R0 中的内容(假设已设置为 30H)指定的内部 RAM 单元的内容(假设已设置为 11H)送入累加器 A 中。图 3-1-5 描述了指令执行过程。
指令的操作数为 8 位或 16 位数据,这个操作数称为立即数,这种寻址方式就叫立即寻 址。在 MCS—5l 单片机的指令系统中,用符号“#”表示立即数,以区别直接地址。
图 3-1-1 MOV A,#30H 指令执行过程
例如:MOV A,#30H;(A)←30H 指令码 74H,立即#30H 送到累加器 A 的过程如图 3-1-1。 16 位立即数的赋值过程类似,例如 MOV DPTR,#8000H 指令是把 8000H 这个数据送 入数据指针 DPTR 中。执行过程如图 3-1-2 所示。
- 43 -
第三章 指令系统与程序设计
3.2.2 数据传送类指令
数据传送类 29 条。包括:22 条数据传送指令、5 条数据交换指令、2 条栈操作指令。数
据传送类指令主要涉及到累加器 A、乘法寄存器 B、通用寄存器 Rn,直接内存地址 direct(包
括 SFR)等的数据复制、交换和栈操作等。数据传送类指令不影响 PSW 状态(对 PSW 的操
作除外)。
1.数据传送指令
22 条数据传送指令如表 3-2-1 所示。与立即数#data、直接地址 direct 的相关的指令为 2
7.位寻址 位寻址是指对片内 RAM 的位寻址区和某些有位地址的特殊功能寄存器进行位操作时的
寻址方式。位地址与直接寻址中的字节地址形式完全一样,主要由操作码来区分,使用时应 注意。例如 MOV C,07H 指令将 07H 位单元的内容送进位 C。又例如 MOV A,07H 指 令将 07H 字节单元的内容送 A。位寻址空间:
3.1 计算机的指令与汇编语言基础
3.1.1 计算机的指令
1.机器语言和汇编语言 MCS—5l 单片机的指令和一般的微型计算机一样,具有两级形式:汇编语言和机器语言。
计算机 CPU 是执行指令的部件,其本质上是一部有数字芯片单元组成的电路,它只能认识
由“1”和“0”组成的二进制代码。机器指令就是一组二进制编码,这些编码组合代表了不 同的操作命令,由 CPU 内部的指令译码器将其翻译成具体的控制操作脉冲,控制 CPU 中各 功能单元完成相应的操作。由机器指令组成的编码组合即为机器语言程序。
对用户而言,MCS—5l 单片机系统程序设计中,主要使用汇编语言来编写程序,然后由 汇编系统(机器汇编或手工汇编)将汇编语言程序翻译成二进制代码组成的机器语言程序。
汇编语言的特点是对每一条指令都给出了助记符,汇编指令与机器码指令有一一对应的关
系。计算机 CPU 真正执行的指令是机器语言指令,而汇编指令则是为了编程方便而约定的 一种符号指令。CPU 是不认识这种由汇编指令组成的汇编语言程序的,我们编制好程序后, 必须要先将其转换成机器语言指令。这种将汇编语言程序翻译为机器语言程序的过程成为汇
- 41 -
第三章 指令系统与程序设计
累加器 A。指令执行过程如图 3-1-7。 6.相对寻址
相对寻址主要用于程序转移跳转,是将程序计数器 PC 中的当前值与指令第二字节给出 的偏移量相加,其结果作为跳转指令的转移地址。指令第二字节给出的偏移量有正负号,它 在指令中以补码形式给出,相对寻址所转移的范围为—128B~+127B。
3.2.1 概述
MCS-51 单片机指令系统与 Intel 处理器系统指令助记符基本一致,共包括 111 条指令、 255 种代码。其中:
◆ 单字节指令 49 条,双字节指令 46 条,三字节指令 16 条; ◆ 单周期指令 64 条,双周期指令 45 条,四周期指令 2 条; ◆ 具有一个独特的布尔变量处理指令集。 MCS-51 单片机指令系统主要由单字节和双字节指令组成,指令执行时间也主要为单周 期和双周期,只有乘除法指令为 4 周期指令。MCS-51 单片机指令系统可分为以下 5 类: ◆ 数据传送类,29 条; ◆ 算术操作类,24 条; ◆ 逻辑操作类,24 条; ◆ 控制转移类,17 条; ◆ 布尔操作类,17 条。 介绍 MCS-51 单片机指令系统,首先对指令系统所使用的描述符号说明如下: Rn——R0∼R7,寄存器区中 8 个工作寄存器之一; Ri——R0、R1, R0、R1 可作地址寄存器; direct——8 位内部数据存储器单元的地址,例如 00H、1FH、32、240、DPH、P2 等; #data——8 位立即数; #data16——16 位立即数; addr16——16 位目的地址,例如 LJMP 0200H、LCALL SUB1; addr11——11 位目的地址,例如 AJMP ABC1、ACALL SUB1; rel——8 位相对转移偏移量,例如 DJNZ R0,LOOP DPTR——16 位数据指针; bit——内部存储器位地址; A——累加器; B——专用寄存器; C——进位标志或布尔指令的累加器; @——间址、基址寄存器前缀,例如 MOV @R0,A; /——位操作立即数前缀,表示对该位操作数取反; (×)——地址×单元中的内容; ((×))——由×单元寻址的单元中的内容; ← ——箭头左边内容被右边内容替代。
图 3-1-5 MOV A,@R0 指令执行过程
图 3-1-6 MOVX A,@DPTR 指令执行过程
MOVX A,@DPTR 指令把 DPTR 中的内容(假设已设置为 2000H)指定的内部 RAM 单元的内容送入累加器 A 中。图 3-1-6 描述了指令执行过程。
图 3-1-7 MOVX A,@A+DPTR 指令执行过程
图 3-1-4 描述了 INC R0 指令的执行过程。 4.寄存器间接寻址
寄存器间接寻址是把指令中寻址到的寄存器的内容作为操作数的地址,把该地址单元的
- 40 -
单片机应用系统设计
内容作为操作数。这种寻址方式用于访问内部和外部 RAM。可用来间接寻址的寄存器有: R0、R1 以及 16 位的数据指针 DPTR。加符号@表示间接寻址。
指定。例如对选定的工作寄存器 R0~R7 组,用操作码的低 3 位指明所用的寄存器。
图 3-1-4 INC R0 指令执行过程
例如 MOV A,R5 这条指令把 R5 中的内容送入累加器 A 中。又例如 MOV A,DPH 这条指令,对 A 的寻址是寄存器寻址,因为对 A 的寻址已经隐含在指令码中;而对 DPH 的 寻址则是直接寻址,因为对 DPH 的寻址需要外加一个操作数字节(83H)说明寄存器单元。
◆ 注释部分对汇编语言来讲可有可无,是次序设计人员为方便阅读而加的注释。注释 以“;”为开始。注释部分不影响指令的执行。
单片机的指令系统是由生产厂商定义的,因此实际上它就成了用户必须理解和遵循的标 准。各种 CPU 的指令系统没有通用性,各种型号的单片机都有自己专用的指令系统,因此 由汇编语言编写的程序也没有通用性,无法直接移植。即使是同样的 MCS—51 系列单片机, 不同厂家的指令系统可能也有一些特殊之处。
◆ 操作数部分指出了参加操作的数据来源和操作结果存放在什么地方。操作数字段的 表达形式与寻址方式有关。操作数可以是数据,也可以是地址。当操作数是指令中给出的数 据时,则称为立即数,它有 8 位和 16 位二进制数两种。在数字前加“#”来标记其是立即数 以与地址相区分,不带“#”的数字则为直接地址单元。指令的操作数可以是 1 个、2 个或 3 个,有些指令可能没有操作致。操作数与操作数之间以“,”分隔,操作码与操作数之间以 空格分隔。
- 39 -
第三章 指令系统与程序设计
图 3-1-2 MOV DPTR,#8000H 指令执行过程
2.直接寻址 直接寻址就是在指令中直接给出操作数的地址。这种寻址方式提供了访问内部数据存储
器的方法,可以访问直接地址空间为: ◆ 内部 RAM 的 l28 个字节单元; ◆ 特殊功能寄存器 SFR、位地址单元(SFR 和位地址单元只能用直接寻址方式来访问)。 例如 MOV A,30H 指令是把 30H 内存单元中的内容送入累加器 A 中。执行过程如图
指令系统是学习和使用单片机的基础工具,是必须掌握的重要知识。这一章我们将讨论 标准 MCS—51 汇编语言指令的功能和使用方法。
3.1.2 寻址方式
在指令系统中,操作数是一个重要的组成部分,它指定了参加运算的数或数所在的地址 单元。如何找到操作数地址的方式就称为寻址方式。寻址方式越多,则计算机的功能越强, 灵活性亦越大,能更有效地处理各种数据。MCS—5l 单片机指令操作数或操作数地址主要有 七种寻址方式。 1.立即寻址
为源操作数,“R3 内容送 A”为程序注释。
◆ 程序标号是表示该指令位置的符号地址,它是以英文字母开始的由 1—6 个字母或数
- 38 -
单片机应用系统设计
字组成的字符串,并以“:”结尾。通常在那些程序人口或转移指令的目标地址处才赋予标 号;
◆ 操作码部分规定了指令所实现的操作功能,操作码助记符由表示指令操作功能的英 文缩写组成。每条指令都有操作码,它是指令的核心部分;
第三章 指令系统与程序设计
第三章 MCS—51 单片机指令系统
一个计算机系统通常指其硬件和软件的结合,如果只有硬件而没有任何软件,这个计算 机系统是不能工作的。单片机也不例外,它必须配合各种各样的软件才能发挥其运算和控制 功能。所谓软件即设计好的程序,程序则是由计算机能够识别的指令组成的。因此,计算机 软件系统中,最为基础的东西就是计算机的指令系统。
图 3-1-3 MOV A,30H 指令执行过程
3.寄存器寻址 寄存器寻址是指定某一可寻址的寄存器的内容为操作数。可寻址的寄存器包括:对累加
器 A、通用寄存器 B、工作寄存器 R0~R7、数据指针寄存器 DPTR 和进位位 C。 这些可寄存器寻址的单元,其具体的寄存器已隐含在其操作码中,而不需要再用操作数
当访问片内 RAM 或片外 RAM 低 256B 时,一般用 R0 或 R1 作间接寻址寄存器,在这 类指令中,由操作码的最低位指出所用的是 R0 或 R1。
例如 MOV A,@R0 这条指令把 R0 中的内容(假设已设置为 30H)指定的内部 RAM 单元的内容(假设已设置为 11H)送入累加器 A 中。图 3-1-5 描述了指令执行过程。
指令的操作数为 8 位或 16 位数据,这个操作数称为立即数,这种寻址方式就叫立即寻 址。在 MCS—5l 单片机的指令系统中,用符号“#”表示立即数,以区别直接地址。
图 3-1-1 MOV A,#30H 指令执行过程
例如:MOV A,#30H;(A)←30H 指令码 74H,立即#30H 送到累加器 A 的过程如图 3-1-1。 16 位立即数的赋值过程类似,例如 MOV DPTR,#8000H 指令是把 8000H 这个数据送 入数据指针 DPTR 中。执行过程如图 3-1-2 所示。
- 43 -
第三章 指令系统与程序设计
3.2.2 数据传送类指令
数据传送类 29 条。包括:22 条数据传送指令、5 条数据交换指令、2 条栈操作指令。数
据传送类指令主要涉及到累加器 A、乘法寄存器 B、通用寄存器 Rn,直接内存地址 direct(包
括 SFR)等的数据复制、交换和栈操作等。数据传送类指令不影响 PSW 状态(对 PSW 的操
作除外)。
1.数据传送指令
22 条数据传送指令如表 3-2-1 所示。与立即数#data、直接地址 direct 的相关的指令为 2
7.位寻址 位寻址是指对片内 RAM 的位寻址区和某些有位地址的特殊功能寄存器进行位操作时的
寻址方式。位地址与直接寻址中的字节地址形式完全一样,主要由操作码来区分,使用时应 注意。例如 MOV C,07H 指令将 07H 位单元的内容送进位 C。又例如 MOV A,07H 指 令将 07H 字节单元的内容送 A。位寻址空间:
3.1 计算机的指令与汇编语言基础
3.1.1 计算机的指令
1.机器语言和汇编语言 MCS—5l 单片机的指令和一般的微型计算机一样,具有两级形式:汇编语言和机器语言。
计算机 CPU 是执行指令的部件,其本质上是一部有数字芯片单元组成的电路,它只能认识
由“1”和“0”组成的二进制代码。机器指令就是一组二进制编码,这些编码组合代表了不 同的操作命令,由 CPU 内部的指令译码器将其翻译成具体的控制操作脉冲,控制 CPU 中各 功能单元完成相应的操作。由机器指令组成的编码组合即为机器语言程序。
对用户而言,MCS—5l 单片机系统程序设计中,主要使用汇编语言来编写程序,然后由 汇编系统(机器汇编或手工汇编)将汇编语言程序翻译成二进制代码组成的机器语言程序。
汇编语言的特点是对每一条指令都给出了助记符,汇编指令与机器码指令有一一对应的关
系。计算机 CPU 真正执行的指令是机器语言指令,而汇编指令则是为了编程方便而约定的 一种符号指令。CPU 是不认识这种由汇编指令组成的汇编语言程序的,我们编制好程序后, 必须要先将其转换成机器语言指令。这种将汇编语言程序翻译为机器语言程序的过程成为汇
- 41 -
第三章 指令系统与程序设计
累加器 A。指令执行过程如图 3-1-7。 6.相对寻址
相对寻址主要用于程序转移跳转,是将程序计数器 PC 中的当前值与指令第二字节给出 的偏移量相加,其结果作为跳转指令的转移地址。指令第二字节给出的偏移量有正负号,它 在指令中以补码形式给出,相对寻址所转移的范围为—128B~+127B。
3.2.1 概述
MCS-51 单片机指令系统与 Intel 处理器系统指令助记符基本一致,共包括 111 条指令、 255 种代码。其中:
◆ 单字节指令 49 条,双字节指令 46 条,三字节指令 16 条; ◆ 单周期指令 64 条,双周期指令 45 条,四周期指令 2 条; ◆ 具有一个独特的布尔变量处理指令集。 MCS-51 单片机指令系统主要由单字节和双字节指令组成,指令执行时间也主要为单周 期和双周期,只有乘除法指令为 4 周期指令。MCS-51 单片机指令系统可分为以下 5 类: ◆ 数据传送类,29 条; ◆ 算术操作类,24 条; ◆ 逻辑操作类,24 条; ◆ 控制转移类,17 条; ◆ 布尔操作类,17 条。 介绍 MCS-51 单片机指令系统,首先对指令系统所使用的描述符号说明如下: Rn——R0∼R7,寄存器区中 8 个工作寄存器之一; Ri——R0、R1, R0、R1 可作地址寄存器; direct——8 位内部数据存储器单元的地址,例如 00H、1FH、32、240、DPH、P2 等; #data——8 位立即数; #data16——16 位立即数; addr16——16 位目的地址,例如 LJMP 0200H、LCALL SUB1; addr11——11 位目的地址,例如 AJMP ABC1、ACALL SUB1; rel——8 位相对转移偏移量,例如 DJNZ R0,LOOP DPTR——16 位数据指针; bit——内部存储器位地址; A——累加器; B——专用寄存器; C——进位标志或布尔指令的累加器; @——间址、基址寄存器前缀,例如 MOV @R0,A; /——位操作立即数前缀,表示对该位操作数取反; (×)——地址×单元中的内容; ((×))——由×单元寻址的单元中的内容; ← ——箭头左边内容被右边内容替代。
图 3-1-5 MOV A,@R0 指令执行过程
图 3-1-6 MOVX A,@DPTR 指令执行过程
MOVX A,@DPTR 指令把 DPTR 中的内容(假设已设置为 2000H)指定的内部 RAM 单元的内容送入累加器 A 中。图 3-1-6 描述了指令执行过程。
图 3-1-7 MOVX A,@A+DPTR 指令执行过程
图 3-1-4 描述了 INC R0 指令的执行过程。 4.寄存器间接寻址
寄存器间接寻址是把指令中寻址到的寄存器的内容作为操作数的地址,把该地址单元的
- 40 -
单片机应用系统设计
内容作为操作数。这种寻址方式用于访问内部和外部 RAM。可用来间接寻址的寄存器有: R0、R1 以及 16 位的数据指针 DPTR。加符号@表示间接寻址。
指定。例如对选定的工作寄存器 R0~R7 组,用操作码的低 3 位指明所用的寄存器。
图 3-1-4 INC R0 指令执行过程
例如 MOV A,R5 这条指令把 R5 中的内容送入累加器 A 中。又例如 MOV A,DPH 这条指令,对 A 的寻址是寄存器寻址,因为对 A 的寻址已经隐含在指令码中;而对 DPH 的 寻址则是直接寻址,因为对 DPH 的寻址需要外加一个操作数字节(83H)说明寄存器单元。
◆ 注释部分对汇编语言来讲可有可无,是次序设计人员为方便阅读而加的注释。注释 以“;”为开始。注释部分不影响指令的执行。
单片机的指令系统是由生产厂商定义的,因此实际上它就成了用户必须理解和遵循的标 准。各种 CPU 的指令系统没有通用性,各种型号的单片机都有自己专用的指令系统,因此 由汇编语言编写的程序也没有通用性,无法直接移植。即使是同样的 MCS—51 系列单片机, 不同厂家的指令系统可能也有一些特殊之处。
◆ 操作数部分指出了参加操作的数据来源和操作结果存放在什么地方。操作数字段的 表达形式与寻址方式有关。操作数可以是数据,也可以是地址。当操作数是指令中给出的数 据时,则称为立即数,它有 8 位和 16 位二进制数两种。在数字前加“#”来标记其是立即数 以与地址相区分,不带“#”的数字则为直接地址单元。指令的操作数可以是 1 个、2 个或 3 个,有些指令可能没有操作致。操作数与操作数之间以“,”分隔,操作码与操作数之间以 空格分隔。
- 39 -
第三章 指令系统与程序设计
图 3-1-2 MOV DPTR,#8000H 指令执行过程
2.直接寻址 直接寻址就是在指令中直接给出操作数的地址。这种寻址方式提供了访问内部数据存储
器的方法,可以访问直接地址空间为: ◆ 内部 RAM 的 l28 个字节单元; ◆ 特殊功能寄存器 SFR、位地址单元(SFR 和位地址单元只能用直接寻址方式来访问)。 例如 MOV A,30H 指令是把 30H 内存单元中的内容送入累加器 A 中。执行过程如图
指令系统是学习和使用单片机的基础工具,是必须掌握的重要知识。这一章我们将讨论 标准 MCS—51 汇编语言指令的功能和使用方法。
3.1.2 寻址方式
在指令系统中,操作数是一个重要的组成部分,它指定了参加运算的数或数所在的地址 单元。如何找到操作数地址的方式就称为寻址方式。寻址方式越多,则计算机的功能越强, 灵活性亦越大,能更有效地处理各种数据。MCS—5l 单片机指令操作数或操作数地址主要有 七种寻址方式。 1.立即寻址
为源操作数,“R3 内容送 A”为程序注释。
◆ 程序标号是表示该指令位置的符号地址,它是以英文字母开始的由 1—6 个字母或数
- 38 -
单片机应用系统设计
字组成的字符串,并以“:”结尾。通常在那些程序人口或转移指令的目标地址处才赋予标 号;
◆ 操作码部分规定了指令所实现的操作功能,操作码助记符由表示指令操作功能的英 文缩写组成。每条指令都有操作码,它是指令的核心部分;
第三章 指令系统与程序设计
第三章 MCS—51 单片机指令系统
一个计算机系统通常指其硬件和软件的结合,如果只有硬件而没有任何软件,这个计算 机系统是不能工作的。单片机也不例外,它必须配合各种各样的软件才能发挥其运算和控制 功能。所谓软件即设计好的程序,程序则是由计算机能够识别的指令组成的。因此,计算机 软件系统中,最为基础的东西就是计算机的指令系统。