凌阳十六位单片机原理及应用(邱绍峰)1-4章 (3)

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

4
第3章 SPCE061A寻址方式及指令系统 3.1.2 汇编语言格式
用户要计算机完成各项任务,就要设计各种应用程序。 程序设计常有三种:机器语言、汇编语言和高级语言。机器 语言是计算机惟一能识别的语言,它由一组0、1二进制数组 成,人们不便识别、记忆,因此很难用它来进行程序设计。 高级语言是面向问题和计算过程的语言,可通用于各种不同 的计算机,用户编程时不必仔细了解计算机的具体性能和指 令系统。用汇编语言设计的程序具有针对性,不同的微处理 器有不同的指令系统。
2
第3章 SPCE061A寻址方式及指令系统
R1,R2,R3,R4,R5(BP) PC
CS,DS N,Z,S,C
SR
IM6 IM16
A6 A16 Rd Rs → MR &,|,^, {}
[] ++,--
表 3.1 常用指令符号
通用寄存器 程序计数器 SR 寄存器中的代码段选择字段和数据段选择字段 SR 寄存器中的四个标志位 段寄存器。其中 bit15~bit10 对应 DS;bit9~bit6 对应 NZSC 标志位;bit5~ bit0 对应 CS 6 位立即数 16 位立即数 6 位地址码 16 位地址码 目标寄存器或目标存储器指针 源寄存器或源存储器指针,包括 R1,R2,R3,R4,R5(BP) 数据传送符号 由 R4,R3 组成的 32 位结果寄存器(R4 为高字节,R3 为低字节) 逻辑与记号、逻辑或记号、逻辑异或记号 可选项 寄存器间接寻址标志 指针单位字增量、字减量
7
第3章 SPCE061A寻址方式及指令系统
2.16位地址直接寻址 此寻址方式指令中给出的地址为16位有效地址[A16], 指令周期较6位地址直接寻址强。由于给出的是16位有效地 址,所以只用于第0页存储器的64K字存储单元范围内寻址。 【例3.3】
R1=R2+[0x2000]
//[0x2000]就是 16 位地址直接寻址,将寄存器 R2 中的内容与第 0 页 //存储器 0x2000 单元中的内容相加,再将结果存放到寄存器 R1 中
5
第3章 SPCE061A寻址方式及指令系统
3.2 寻 址 方 式
3.2.1 立即数寻址 立即数寻址直接包含操作数,操作数是一个6位或16
位的常数,也叫立即数。6位立即数用IM6表示,范围是 0x00~0x3F;16位立即数用IM16表示,范围是0x0000~ 0xFFFF。
【例3.1】
R1=0x20
23
第3章 SPCE061A寻址方式及指令系统 6.堆栈操作 堆栈操作也属于一种特殊的数据传送指令,其通过两
条指令PUSH和POP来完成压栈与出栈操作。
24
第3章 SPCE061A寻址方式及指令系统 将多个寄存器同时压栈时,总是序号最高的寄存器先压
栈,然后依次压入序号较低的寄存器,直到序号最低的寄存 器最后入栈。所以,执行指令“PUSH R1,R4 TO [SP]”与 指令“PUSH R4,R1 TO [SP]”是等效的,都是先压入R4, 再依次R3、R2、R1。堆栈指令格式为:
30
第3章 SPCE061A寻址方式及指令系统
表 3.3 ADD 指令表
指令语法
指令长度
指令子集语法
指令周期
[A6] = Rs
[A16] = Rs
2
[Rd] = Rs
[++Rd] = Rs 1
[Rd--] = Rs
[Rd++] = Rs
注:若目的寄存器 Rd 为 PC,则指令周期数是表中的后者。
18
周期数 4/5 2 6 5/6 7/8 3/5
6/7
6 5 7
6
第3章 SPCE061A寻址方式及指令系统
寄存器直接寻址是操作数存放在某个寄存器中,寄存器 名称由指令指出。
【例3.4】 R2= R1+0x2000
10
第3章 SPCE061A寻址方式及指令系统 3.2.4 寄存器间接寻址
寄存器间接寻址是操作数的地址由寄存器给出,寄存 器需用“[]”括起来,其格式为{D:}[Rs]。省略D,Rs指向0 页存储器单元;不省略D,由寄存器Rs和段寄存器SR中的数 据段DS共同指向存储单元。DS的值确定存储器的页码,然后 再根据Rs的值寻址。由于SPCE061A地址只涉及到0页,故以 后省略D。
3
第3章 SPCE061A寻址方式及指令系统
ss,us Label FIR
N Z S
C //
续表
两个有符号数之间的操作、无符号数与有符号数之间的操作 程序标号 Finite Impulse Response(有限冲击响应),数字信号处理中的一种具有线性 相位及任意幅度特性的数字滤波器算法 负标志。N=0 时表示运算前最高有效位为 0;N=1 表示最高有效位为 1 零标志。Z=0 表示运算结果不为 0;Z=1 表示运算结果为 0 符号标志。S=0 表示结果不为负;S=1 表示结果为负数(2 的补数)。对于有 符号运算,16 位数表示的范围-32 768~32 768,若结果小于零,则 S=1 进位标志。C=0 表示运算过程中无进位或有借位产生;C=1 表示有进位或 无借位产生 注释符
【例3.5】
R1=[R2] //[R2]为寄存器间接寻址,将寄存器 R2 中的内容作为地址,再将此地址 //中的数据存放到 R1 中
11
第3章 SPCE061A寻址方式及指令系统 1.寄存器前置增量间接寻址 【例3.6】 R1=[++R3] 假设执行指令前R3中的内容为0x1000,该指令是先将
R3的内容加1,即0x1000加1,得0x1001,再把0x1001地址中 的内容存放到R1中。指令执行完后,R3的值变为0x1001。
14
第3章 SPCE061A寻址方式及指令系统 3.2.5 变址寻址
【例3.9】 R1=[BP+0x30]
若BP的内容为0x1000,该指令执行的操作是将0页存 储器0x1030的内容存放到寄存器R1中。
15
第3章 SPCE061A寻址方式及指令系统 3.2.6 PC相对寻址
PC相对寻址主要用于跳转指令中,并且是短跳转。根据 寄存器SR中标志段的4个标志位(NZSC)来作为程序跳转的条 件。若条件满足则跳转到相关的地址上,其跳转范围是根据 6位的相对偏移量来决定的,因此跳转范围限制在PC + 63个 字,往前往后均最多跳63个字。
表 3.2 数据传送类指令表
语法
指令长度(word)
影响标志
Rd = IM16
2
Rd = IM6
Rd = [BP+IM6]
1
Rd = [A6] Rd = [A16]
N,Z 2
Rd = Rs
Rd = [Rs]
Rd = [Rs++]
Rd = [++Rs]
1
Rd = [Rs--]
[BP+IM6] = Rs
第3章 SPCE061A寻址方式及指令系统 【例3.14】 POP R2,PC FROM [SP]
28
第3章 SPCE061A寻址方式及指令系统
图3.2 POP R2,PC FROM [SP]执行过程示意图 29
第3章 SPCE061A寻址方式及指令系统 3.3.2 算术运算类指令
1.不带进位的加法指令ADD 加法运算中,被加数X可以是目的寄存器或源寄存器, 加数Y可以是6种寻址方式中的任何一种,其运算结果存放到 目的寄存器Rd中。表3.3是ADD运算的指令表。
于只给出6位有效地址,所以只能用于第0页存储器 (SPCE061A只用到第0页)的前64个字存储单元范围内寻址, 指令周期短。
【例3.2】
R1=R1+[0x20]
//[0x20]就是 6 位地址直接寻址,将寄存器 R1 中的内容与第 0 页 //存储器 0x20 单元中的内容相加,再将结果存放到寄存器 R1 中
//0x20 就是立即数,将 6 位的立即数 0x20 送入寄存器 R1
R1=R1+0x1FFF //0x1FFF 就是立即数,将 16 位立即数 0x1FFF 与寄存器 R1 中的
//内容相加,把所得结果存回寄存器 R1
6
第3章 SPCE061A寻址方式及指令系统
3.2.2 直接寻址 1.6位地址直接寻址 此寻址方式指令中给出的地址为6位有效地址[A6],由
第3章 SPCE061A寻址方式及指令系统
第 3 章 SPCE061A寻址方式 及指令系统
3.1 基本概念 3.2 寻址方式 3.3 指令系统 本章小结
1
第3章 SPCE061A寻址方式及指令系统
3.1 基 本 概 念
3.1.1 常用指令符号 为了方便阅读程序,在介绍寻址方式之前,先统一约
定常用的指令符号,见表3.1。
内容存入目的寄存器Rd中。 【例3.11】 R1 = R2 若执行前R2 = 0x2000,执行后将此数据存入R1,R1 =
0x2000。
20
第3章 SPCE061A寻址方式及指令系统 3.寄存器间接寻址 寄存器间接寻址格式为[Rd] = Rs,将Rs的数据存入到
以Rd的值作为地址的单元中。 【例3.12】 [++R3]=R1
16
第3章 SPCE061A寻址方式及指令系统
3.3 指 令 系 统
3.3.1 数据传送类指令 数据传送类指令是把源操作数传送到指令所指定的目
标地址。数据传送操作属复制性质,而不是搬家性质。指令 执行后,源操作数不变,目的操作数被源操作数代替。通用 格式是:
<目的操作数>=<源操作数>
17
第3章 SPCE061A寻址方式及指令系统
21
第3章 SPCE061A寻址方式及指令系统 4.直接地址寻址 该寻址方式有6位和16位两种。例如:
[A6] = Rs [A16] = Rs Rd = [A6] Rd = [A16]
//将源寄存器 Rs 中的数据存入以立即数 A6 为地址的单元中 //将源寄存器 Rs 中的数据存入以立即数 A16 为地址的单元中 //将以立即数 A6 为地址的单元中的数据存入到目的寄存器 Rd 中 //将以立即数 A16 为地址的单元中的数据存入到目的寄存器 Rd 中
12
第3章 SPCE061A寻址方式及指令系统 2.寄存器后置增量间接寻址 【例3.7】 R1=[R3++] 同样假设执行指令前R3中的内容为0x1000,该指令是先
将0x1000地址中的内容存放到R1中,再把R3的内容加1,即 0x1000加1,得0x1001。指令执行完后,R3的值变为0x1001。
PUSH Rx, Ry TO [SP] POP Rx, Ry FROM [SP] PUSH Rx TO [SP] POP Rx FROM [SP]
25
第3章 SPCE061A寻址方式及指令系统 【例3.13】 PUSH R2,PC TO [SP]
26
第3章 SPCE061A寻址方式及指令系统
图3.1 PUSH R2,PC TO [SP]执行过程示意图 27
1.立即数寻址
立即数寻址分6位和16位立即数寻址,格式:Rd = IM6
和Rd = IM16,执行后将6位或16位立即数存入目的寄存器Rd
中。
【例3.10】
R1=0x20
//将6位的立即数0x20送入寄存器R1
R1= 0x1F19
第3章 SPCE061A寻址方式及指令系统 2.寄存器直接寻址 寄存器直接寻址的格式为Rd = Rs,将源寄存器Rs中的
22
第3章 SPCE061A寻址方式及指令系统 5.变址寻址 该寻址方式有两种寻址格式:
Rd = [BP+IM6] [BP+IM6] = Rs
//将基址指针 BP 与 6 位立即数 IM6 之和所指向的存取单元的数据 //读到 Rd 寄存器中 //将源寄存器 Rs 的值存储到基址指针 BP 与 6 位立即数 IM6 之和 //所指向的存取单元中
13
第3章 SPCE061A寻址方式及指令系统 3.寄存器后置减量间接寻址 【例3.8】 R1=[R3--] 同样假设执行指令前R3中的内容为0x1000,该指令是先
将0x1000地址中的内容存放到R1中,再把R3的内容减1,即 0x1000减1,得0x0FFF。指令执行完后,R3的值变为0x0FFF。
8
第3章 SPCE061A寻址方式及指令系统 3.22位地址直接寻址 此寻址方式指令中给出的地址为16位有效地址[A16],
它是将CS代码段作为高6位地址和页内16位地址拼接而成的。 其可在4 MB的存储单元范围内寻址,主要用于程序的调用与 返回。
9
第3章 SPCE061A寻址方式及指令系统 3.2.3 寄存器直接寻址
相关文档
最新文档