第3章指令系统
第3章 指令系统(BH)

• 程序设计语言:是实现人机交换信息的基本工具,
分为机器语言、汇编语言和高级语言。 能直接识别和执行的语言。
• 机器语言:用二进制编码表示每条指令,是计算机
• 汇编语言:是用助记符、符号和数字等来表示指令
的程序设计语言。它与机器语言指令是一一对应的。
MOV direct,Rn;
111 1rrr direct
(Rn)
direct
MOV direct, direct;
1000 0101 源 direct 目的 direct
(源 direct) 目的 direct
MOV direct,@Ri ;
1000 011i direct
((Ri))
direct
• 例如
计算机科学学院
电子信息科学教研室
12
• 例如:将片内RAM 65H单元内容47H送A,可执行 指令“MOV A,@R0”。其中R0内容为65H。如 图所示:
以指令中所指定 的R0内容(65H) ① 为指针
地址 数据存储器
R0
65H
┋
② A
47H
将片内RAM 65H单 元内容47H送A
65H
11
计算机科学学院
电子信息科学教研室
4、寄存器间接寻址
• 寄存器间接寻址:操作数的地址事先存放在某个寄
存器中,寄存器间接寻址是把指定寄存器的内容作为 地址,由该地址所指定的单元内容作为操作数。
• 89C51规定R0或R1为间接寻址寄存器,它可寻址内部
地址RAM低位的128B单元内容。还可采用DPTR作为 间接寻址寄存器,寻址外部数据存储器的64KB空间。
第三章 指令系统--指令

寻址方式指令系统
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
通用传送指令
累加器专用传送指令
地址传送指令
标志传送指令
对标志位的影响: 除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
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
实现二进制
所有算术运算指令均所有算术运算指令均
四则运算是计算机经常进行的一种操作。
请注意算术运算指令对
只有一个操作数:寄存器或存储单元对操作数加
用于计数器和地址指针的调整
不影响进位
对操作数减
用于计数器和地址指针的调整不影响进位。
第三章 指令系统

(1) 三地址双操作
50
指令
数指执令行一条三地址的加法指令需要访问514
下条指令
次主.存。
个 ( 假 单 存A显 设 元 放1号第中地指中在三单)址令,主一取地O,存第存元址次第P指放一的(双中从二令在、1A操2取5操的主第0作第0作含存二0)数一义 的 操号数存指和→为 5 作操令单,的2: 0 数A有作元第303分3号0数中四0别,取次0第指将号三令加单次,法元从第的。2二结1200000次果0从保第第1存一二号操操0到...单作作0主元数数
寄存器/存储器:直接给出寄存器或存储 器的地址码(名称)即可; 注:寄存器(CPU内部或外围设备内部) 及存储器的编址方式: 1)字编址、字节编址、位编址; 2)统一编址、非统一编址
操作数的编码方式
例:设某机主存容量为16MB ,机器 字长16 位,若最小寻址单位为字节 (按字节编址) ,其地址码为多少位? 若最小寻址单位为字(按字编址) ,其 地址码又为多少位?
共需12 条指令,其中7 条一地址的进、出栈指令, 5 条零地址的算术运算指令。进、出栈指令3 次访 存,算逻指令4 次访存,执行此程序共访存7 × 3 + 5 × 4 = 41 次。
例: 某一机器的指令系统,操作码8 位, 地址码均为16 位,CPU 与主存之间每次传 送16 位数据。A 、B 、C 、D 、E 表示字地 址,存放16 位数据。
常用指令寻址方式
顺序寻址方式 跳跃寻址方式:直接、相对、间接
栈及相关概念
1、栈的分类: 用寄存器实现堆栈(串联堆栈) 内存中开辟堆栈区
自底向上生成堆栈 自顶向下生成堆栈 2、栈的建立: 将栈顶地址传送到SP中 3、栈的操作: PUSH/POP、MOV
IA32指令系统
第3章 PIC单片机指令系统

第3章 指令系统3.1 3.2 3.3 3.4 汇编语言 寻址方式 PIC18F452指令系统 程序设计举例3.1汇编语言• 指令:是 指令:是CPU CPU根据人的意图来执行某种操作的命令。
根据人的意图来执行某种操作的命令。
• 程序设计语言:是实现人机交换信息的基本工具,分为机 器语言、汇编语言和高级语言。
• 机器语言:用二进制编码表示每条指令 机器语言:用二进制编码表示每条指令,是计算机能 ,是计算机能直接 直接 识别和执行的语言。
识别和执行 的语言。
• 汇编语言:是用助记符、符号和数字 汇编语言:是用助记符、符号和数字等来表示指令的程序 等来表示指令的程序 设计语言。
它与机器语言指令是一一对应的。
设计语言。
它与机器语言指令是一一对应的。
? 汇编语言编写的程序能否直接被计算机执行? • 高级语言:面向问题和计算过程的语言,可通用于各种不 同的计算机。
用户编程时不必了解所用计算机的指令系统。
Why study assembly language?• Many critical programs are written in assembly language • To better understand the functions and architecture of a computer system • To better understand the working of high level languages • To design efficient programs • A tool for writing system programs • Embedded systems development– Mixed languages programming3• PIC18F452 PIC18F452汇编语言指令格式 汇编语言指令格式 标记段: 标记段 :操作码 [目的 目的操作数 操作数][, ][,源 源操作数 操作数][ ][; ;注释 注释] ]MOVLW BTFSS BCF GOTO 0x7F WREG, 7 WREG, 0 Stop ;load test data ;clear bit 0Stop:• 其中操作码 其中操作码是必不可少的。
第3章 8086(8088)CPU指令系统

20H 00H
00H 34H 12H
3000H:0000H
注: ◆基址因子BP访问默认为堆栈段 ◆不能同时取两个基址因子;也不 能同时去两个变址因子
16
+
3000H:3000H
AH
AL
第3章 8086/8088CPU指令系统
4.1.4 操作数寻址方式
●存储器寻址之相对基址加变址寻址(Base
9
第3章 8086/8088CPU指令系统
3.1.3 操作数寻址方式
4.1操作数寻址方式
所谓操作数的寻址方式,是在指令格式中怎样有效的表示出操 作数的存放位臵,CPU在执行该指令时,按照指令格式中的表示找 到并对数据进行存取。 1.立即寻址(Immediate Addressing) 立即寻址中的操作数作为指令的一 部分存放在代码段中,在取指阶段数据 随指令一起被取到CPU,这种数据在指 令格式中的直接表现为常数。 如:MOV AL,34H
2
第3章 8086/8088CPU指令系统
汇编语言指令或符号指令:用字母和其它一些符 号组成的“助记符”与操作数等表示的指令称为汇编 语言指令或符号指令。 例如: MOV AX, BX ; AX←BX 而其二进制代码(机器代码)为89D8H,就是 1000 1001 1101 1000 B 不易理解,不易记忆。助记符是MOV。
操作码
操作数
4
第3章 8086/8088CPU指令系统
3.1.1 8086/8088指令格式
4.1操作数寻址方式
8086/8088机器指令格式通常1-6个字节组成。典型的指令格式 由2个字节组成,如下图所示。
操作码 D W MOD REG R/M
第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个可用的位地址空间
第三章MCS51的指令系统

3.4.1 MCS-51数据传送指令
[1]. 以累加器A为目的操作数类指令(4条) 这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、
立即数、寄存器和寄存器间接寻址方式:
MOV A,direct
(direct)→(A)直接单元30H
MOV A,0A2H
§3.1 概述
7种寻址方式,111条指令
指令所占用空 间(字节数)
指令执行周期 (运算速度)
单字节指令:49条 双字节指令:45条 三字节指令:17条
单周期指令:64条 双周期指令:45条 四周期指令:2 条
试问
1 如果一条指令执行时间为3个机器周 期,那么需要经历多少个时钟周期?
2 如果一条指令执行时使用了2us,而 晶振使用的是12MHz,请问执行这条指 令需要多少个机器周期?
(A)+((Ri))+(C)→(A) 累加器A中的内容与工作寄存 器Ri指向地址单元中的内容、连同进位位相加,结果存在A中
3.4.2 MCS-51算术运算指令
[3]. 带借位减法指令(4条)
这组指令包含立即数、直接地址、间接地址及工作寄存器与累加器A连同借位 位C内容相减,结果送回累加器A中。
3.4.1 MCS-51数据传送指令
[2]. 以寄存器Rn为目的操作数的指令(3条)
这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器 Rn中。有直接、立即和寄存器寻址方式:
MOV Rn, direct (data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中 MOV R4,37H
**补充知识
MCS51系列单片机为复杂指令单片机CISC。目前单片机大 量使用的是精简指令集RISC结构单片机.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理 及接口技术
第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. 要访问特殊功能寄存器和片外数据存储器,应采用哪些寻址方式?
0800H R0, R0,#20H DPTR,#1000H R7,#0AH A,@R0 @DPTR,A R0 DPTR R7,LOOP $
Back
LOGO
三 、循环程序
例2:统计字串长度。内存从STRING开始有一字串,该字 统计字串长度。内存从STRING开始有一字串, STRING开始有一字串 串以$(ASCII码为24H)结束,试统计该字串长度, 码为24H)结束 串以$(ASCII码为24H)结束,试统计该字串长度,结果 存于NUM NUM单元中 存于NUM单元中
解: START: START: ORG MOV MOV ANL MOV INC MOV SWAP ANL MOV SJMP 2000H R0, R0,#21H A,20H A,#0FH @R0, @R0,A R0 A,20H A, A,#0FH @R0, @R0,A $ ;21H→R0 ;(20H 20H) ;(20H)→A ;A∧#0FH→A ;(A R0) ;(A)→(R0) ;R0+1(R0 ;(20H 20H) ;(20H)→A ;A0~3 ← →A4~7 ;A∧#0FH→A ;(A R0) ;(A)→(R0)
字空操作指令不进行任何操作,但它在程序存储器中占了一个字节 的位置,执行时也需要占用一个机器周期的时间。 的位置,执行时也需要占用一个机器周期的时间。
LOGO
例:设单片机晶振频率6M,编写一段程序,大约延时1秒钟。分析: 由于DJNZ指令最多的循环次数是256次,而1S÷256÷256 约等于 15µS,晶振频率6MHZ,则1个机器周期为2µS,我们把内循环定为8 个机器周期16µS。则16µS×250×250=1S。
LOGO
例2:16位数求补。设16位二进制数在R1R0中,求补结 位数求补。 果存于R3R2中。
解: ORG START: MOV CPL ADD MOV MOV CPL ADDC MOV SJMP 1000H A,R0 A A,#01H R2, R2,A A,R1 A A,#00H R3, R3,A $
解: ORG BAS1: MOV ADD MOV MOVX RET 0100H A,R1 A,30H DPTR, DPTR,#1000H @DPTR, @DPTR,A
LOGO
例2:片外RAM2000H单元中有一BCD码,编一 子程序将其转换成ASCII码。
ORG BAS2: MOV MOVX ADD MOVX RET 0100H DPTR, DPTR,#2000H A,@DPTR A,#30H @DPTR,A
Back
LOGO
若将30H单元BCD码转换成ASCII码,利用 SUB1子程序。
ORG MAIN: MOV LCALL MOV SJMP
2000H 40H, 40H,30H SUB1 30H, 30H,40H $
LOGO
五、 代码转换程序设计举例
中存有一个BCD BCD码 编一子程序将其转换为ASCII ASCII码 例1:R1中存有一个BCD码,编一子程序将其转换为ASCII码 , 存入片外RAM1000H单元中去。 直接转换) RAM1000 存入片外RAM1000H单元中去。(直接转换)
Back
LOGO
二、 分支程序
例 1 : 片内 RAM ONE 和 TWO 两个单元中存有两个无符号 片内RAM ONE和TWO两个单元中存有两个无符号 将两个数中的小者存入RES单元。程序如下: RES单元 数,将两个数中的小者存入RES单元。程序如下:
ORG DATA DATA DATA MOV START: CJNE SJMP BIG: BIG: JC MOV STORE: STORE:MOV SJMP 解: ONE TWO RES 1000H 定义ONE 22H ;定义ONE 定义TWO 23H ;定义TWO 定义RES 30H ;定义RES A,ONE TWO, A,TWO,BIG STORE STORE A,TWO RES, RES,A $
Back
LOGO
六 、运算类程序设计举例
例1:片内RAM30H单元开始有10个字节的二进制数。编一 片内RAM30H单元开始有10个字节的二进制数。 RAM30H单元开始有10个字节的二进制数 子程序,求它们的和。( <256)将和存入20H单元中。 。(和 20H单元中 子程序,求它们的和。(和<256)将和存入20H单元中。
查表注意到执行DJNZ指令要用两个机器周期 指令要用两个机器周期 查表注意到执行 执行MOV Rn,#data要一个机器周期 执行 要一个机器周期 执行MOV dir,#data要两个机器周期 执行 要两个机器周期 因此可以精确算出程序执行时间。 因此可以精确算出程序执行时间。
例:以机器周期为单位,计算以下程序的执行时间。 以机器周期为单位,计算以下程序的执行时间。 ;1个机器周期 MOV R7,#64H ;1 LOOP: MOV R6,#0FAH ;250*2=500 DJNZ R6,$ ;(2), 503*100=50300 DJNZ R7,LOOP ;2 RET 共50303个机器周期
Back
LOGO
三 、循环程序
例 1 : 数据块传送。 将片内RAM 20H单元开始的10 个字节, 数据块传送。 将片内RAM 20H 单元开始的10个字节, 10 个字节 传送到片外RAM 1000H单元开始的单元中去。 传送到片外RAM 1000H单元开始的单元中去。
解:程序如下: 程序如下: ORG START: MOV MOV MOV LOOP: MOV MOVX INC INC DJNZ SJMP
LOGO 6. 在89C51片内 片内RAM中,已知 片内 中 已知(30H)=38H, , (38H)=40H,(40H)=48H,(48H)=90H。请 , , 。 分析下面各是什么指令, 分析下面各是什么指令,说明源操作数的寻址方式以 及按顺序执行每条指令后的结果。 及按顺序执行每条指令后的结果。
解:方法1 方法1 ORG ASUB1: MOV CLR MOV CLR LOOP: LOOP: ADDC INC DJNZ MOV RET 方法2 方法2 1000H R0, R0,#30H A R7, R7,#10 C A,@R0 R0 R7, R7,LOOP 20H, 20H,A ORG ASUB2: MOV MOV MOV CLR LOOP: LOOP: INC ADDC DJNZ MOV RET 2000H R0, R0,#30H A,@R0 R7, R7,#09 C R0 A,@R0 R7, R7,LOOP 20H, 20H,A
MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV A,40H , R0,A , P1,#0F0H , @R0,30H DPTR,#3848H , 40H,38H , R0,30H , P0,R0 , 18H,#30H , A,@R0 , P2,P1 ,
LOGO 7. 对89C51片内 片内RAM的高 的高128字节的地址空间寻址要 片内 的高 字节的地址空间寻址要 注意什么? 注意什么 8. 指出下列指令的本质区别 指出下列指令的本质区别? MOV A,data , MOV A,#data MOV data1,data2 MOV 74H,#78H , 9. 设R0的内容为 的内容为32H,A的内容为 的内容为48H,片内 的内容为 , 的内容为 ,片内RAM的 的 32H单元内容为 单元内容为80H,40H单元内容为 单元内容为08H。请指 单元内容为 , 单元内容为 。 出在执行下列程序段后上述各单元内容的变化。 出在执行下列程序段后上述各单元内容的变化。 MOV A,@R0 MOV @R0,40H , MOV 40H,A , MOV R0,#35H ,
Delay: LOOP: MOV R7,#0FAH MOV R6,#0FAH
LOOP1: NOP NOP NOP NOP NOP NOP DJNZ R6,LOOP1 DJNZ R7,LOOP