计算机组成原理指令系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.3 寻 址 方 式
寻址方式 确定 本条指令 的 操作数地址
下一条 欲执行 指令 的 指令地址
寻址方式
指令寻址 数据寻址
7.3 寻 址 方 式
一、指令寻址
顺序寻址 ( PC ) + 1
PC
跳跃寻址 由转移指令指出
指令地址
指令
PC +1
0 LDA
11 ADD 22 DEC 33 JMP
4 LDA
5 SUB
通用寄存器也可以作为变址寄存器
寻址特征
OP
A
主存
IX
ALU
操作数
• 可扩大寻址范围 • IX 的内容由用户给定 • 在程序的执行过程中 IX 内容可变,形式地址 A 不变 • 便于处理数组问题
例 设数据块首地址为 D,求 N 个数的平均值

直接寻址
LDA D ADD D + 1 ADD D + 2
储器中(由变 址寄存器和位移量决定),所以是RS型指令。
例1 某计算机字长16bit,主存容量64K。指令系统共有 58条指令,有直接、间接、相对和变址四种寻址 方式,指令为单字长单地址指令。请设计该指令 系统的指令格式并指出直接和间接寻址的范围。
例如:Intel8086 中的立即寻址指令。
ADD Ax, #2000H; 将AX内容与立即数2000H相加存入 累加器AX中
2. 直接寻址
EA = A 有效地址由形式地址直接给出
寻址特征
LDA
A
主存 A 操作数
ACC
• 寻址简单,无需计算,执行阶段访问一次存储器 • A 的位数决定了该指令操作数的寻址范围 • 操作数的地址不易修改(必须修改A)
A1 0 EA EA 操作数
多次访存
间接寻址编程举例
主程序
80 调用子程序 81
201 调用子程序 202
……
… ……


子程序
A单元
@ 间址特征
JMP @ A ((AA)) == 28012
例:在一个单地址指令的计算机系统中有一个累加器,给定以下存 储器数值:
地址为20的单元中存放的内容为30; 地址为30的单元中存放的内容为40; 地址为40的单元中存放的内容为50; 地址为50的单元中存放的内容为60; 求以下指令分别将什么数值装入累加器中? (1) Load #20 (2)Load 20 (3) Load (20)
(1)CALL指令被读取前。
(2)CALL指令被执行后。
(3)子程序返回后。
例:指令格式如下所示,其中OP为操作码,试分析指令格式的 特点。
7
1
OP 寻址特征
4
4
源寄存器 目标寄存器
解: (1) 单字长二地址指令。 (2) 操作码字段OP可以指定128条指令。 (3) 源寄存器和目标寄存器都是通用寄存器(可分别指定
(2)若PC当前值为240(十进制),要求转移到200 (十进制),则转移指令的第二、三字节的机器代码 是什么?
10. 堆栈寻址
(1) 堆栈的特点
硬堆栈 堆栈
软堆栈
多个寄存器 指定的存储空间
先进后出(一个出入口) 栈顶地址 由 SP 指出
进栈 (SP)– 1 SP 出栈 (SP)+ 1 SP
SP
1FFFH 2000 H
(1) 相对寻址举例
LDA # 0
LDX # 0
M
ADD X, D
M+1 INX
M+2 M+3
CPX # N BNE M DIV # N
* 相对寻址特征 *–3
STA ANS
M 随程序所在存储空间的位置不同而不同
* 而指令 BNE – 3 与 指令 ADD X, D 相对位移量不变 * 指令 BNE – 3 操作数的有效地址为
❖ 变址寄存器中存放的是数组的下标,而基址寄存器 中存放的是数组的起始位置,数组下标在指令中给出。
9. 相对寻址
EA = ( PC ) + A A 是相对于当前指令的位移量(可正可负,补码)
寻址特征
OP PC 1000
A 主存
ALU
1000 OP
A

操作数
相对距离 A
• A 的位数决定操作数的寻址范围 •有利于编写浮动程序 • 广泛用于转移指令
(1) 寄存器寻址 R (2)寄存器间接寻址 (R)
(3)直接寻址 1000 (4)存储器间接寻址 (1000)
(5)相对寻址-2000(PC) (6)立即数寻址 #2000
解: (1) Data=( R)=1000 (2) Data=( ( R) )=(1000)=2000 (3) Data=(1000)=2000 (4) Data=((1000))=(2000)=3000 (5) EA=(PC)-2000=4000-2000=2000
ADD D + ( N -1 ) DIV # N STA ANS 共 N + 2 条指令
变址寻址
LDA # 0 LDX # 0 M ADD X, D INX CPX # N BNE M DIV # N STA ANS 共 8 条指令
X 为变址寄存器 D 为形式地址 (X) +1 X (X) 和 #N 比较 结果不为零则转
• 指令系统中采用不同寻址方式的目的主要是缩短指 令长度,扩大寻址空间,提高编程灵活性。 • 各种操作数寻址方式的速度比较
立即寻址

寄存器寻址
直接寻址
寄存器间接寻址
变址寻址、基址寻址、相对寻址
间接寻址

例:设( R )=1000,(1000)=2000,(2000)=3000,(PC)=4000, 问在以下寻址方式下访问到的操作数的值是什么?
PC
7. 基址寻址
(1) 采用专用基址寄存器(隐式)
EA = ( BR ) + A
BR 为基址寄存器
寻址特征
OP
A
主存
BR
ALU
操作数
• 可扩大寻址范围 • BR 内容由操作系统或管理程序确定 • 在程序的执行过程中 BR 内容不变,形式地址 A 可变
(2) 采用通用寄存器作基址寄存器(显式)
寻址特征
EA = ( M+3 ) – 3 = M
(2) 按字节寻址的相对寻址举例
2000 H
8 OP 位移量
JMP * + 8
二字节指令
2000 H
8 OP 06 H
2008 H
2008 H
设 当前指令地址 PC = 2000H 转移后的目的地址为 2008H
因为 取出 JMP * + 8 后 PC = 2002H 故 JMP * + 8 指令 的第二字节为 2008H - 2002H = 06H
6 INC
77 STA 88 LDA
9
...
1000 1001 1200
7 2000 2001
2500 1100
指令地址寻址方式
顺序寻址 顺序寻址 顺序寻址
跳跃寻址 顺序寻址
二、数据寻址
数据寻址有多种,需要在指令中明确指出采用哪一 种寻址方式,可以专门设置一个寻址方式特征字段, 或纳入操作码中。
操作码 寻址特征 形式地址 A
特点: 简单、直观、硬件实现容易。只能访问固定的存 储单元。
3. 隐含寻址
指令中不直接给出操作数地址,操作数地址隐含在操作
码或某个(约定)寄存器中。
寻址特征
主存
ADD
A
另一个操作数 隐含在 ACC 中
A 操作数
ACC ALU
暂存
如 8086
MUL 指令 被乘数隐含在 AX(16位)或 AL(8位)中 MOVS 指令 源操作数的地址隐含在 SI 中
❖ 变址寻址与基址寻址的不同:
❖ ----在使用变址寻址时,由指令提供形式地址作为基准 量,其位数足以指向整个主存;变址寄存器提供修改量, 其位数可以较短。
❖ 在使用基址寄存器时,由基址寄存器基准量,其位 数足以指向整个主存;而指令给出形式地址作为位移量, 其位数往往较短。
❖ ---- 从应用目的看,变址寻址面向用户,可以访问字符 串、数组等成批数据;基址寻址面向系统,解决程序在 实际主存中的重定位问题,以及在有限字长指令中扩大 寻址空间等。
• 有效地址在寄存器中, 操作数在存储器中,执行阶段访存
偏移寻址
直接寻址和寄存器间接寻址方式的结合 有效地址EA=A+(R)
A是显式的形式地址字段; R可以是显式的,也可以隐含的,某个专用的寄存器;
常用的偏移寻址
基址寻址:EA=(基址R)+A ,基址R不变,A可变 变址寻址:EA=(变址R)+A ,A不变,变址R可变 相对寻址:EA=(专用R)+A
12F0F00F H
–1
进栈
栈顶 栈顶
SP
1FFFH 2000 H
12F0F00F HH
+1
出栈
栈顶 栈顶
… …
栈底
栈底
(2) 堆栈寻址举例
主存
ACC 15
栈顶
SP 200H 200H
X
PUSH A 前
栈底
ACC 15 SP 1FFH
主存
栈顶 1FFH 15 200H X
PUSH A 后
栈底
ACC Y SP 1FFH

Ri 操作数
Rn 寄存器
• 执行阶段不访存,只访问寄存器,执行速度快 • 寄存器个数有限,可缩短指令字长
6. 寄存器间接寻址
EA = ( Ri )
寻址特征
OP
Ri
指令中的形式地址为寄存器的编 号,寄存器的内容是操作数的有 效地址。
主存
R0


Ri 地址
操作数


MOV AX , [BX]
Rn 寄存器
目的操作数的地址隐含在 DI 中 • 指令字中少了一个地址字段,可缩短指令字长
4. 间接寻址
EA =(A)
指令中的形式地址不是操作数的地址, 而是操作数地址的地址。
有效地址由形式地址间接提供
寻址特征
OP @ A
主存 A EA
寻址特征
OP
A
主存 A 1 A1
一次间址
EA 操作数
多次间址
• 执行指令阶段 2 次访存 • 可扩大寻址范围 • 便于编制程序
栈顶 1FFH
200H
主存
15 X
POP A 前
栈底
ACC 15 SP 200H
POP A 后
主存
栈顶
15
200H
X
栈底
(3) SP 的修改与主存编址方法有关
① 按 字 编址
进栈 (SP)– 1 SP
出栈 (SP)+ 1 SP
② 按 字节 编址
存储字长 16 位 进栈 (SP)– 2 SP
出栈 (SP)+ 2 SP
• A 的位数限制了立即数的范围
1.立即寻址(immediate addressing):所需的操作数 在指令中直接给出,即操作数包含在指令内,称为 立即数。
优点:取指令的同时操作数、操作码同时取出, 不必再次访问存储器,指令的执行速度快。
缺点:由于指令字的长度有限,限制了立即数 所能表示的数据范围,不能修改,适宜操作数固定 不变的场合。灵活性最差。一般情况下用于给某一 个寄存器或存储单元赋予一个初值或提供一个常数。
形式地址 A 指令字中的地址 有效地址 EA 操作数的真实地址 有效地址由形式地址根据寻址方式来确定。 约定 指令字长 = 存储字长 = 机器字长
1. 立即寻址(立即数寻址)
形式地址 A 就是操作数,不是操作数地址
立即寻址特征 OP # A
立即数
MOV AX, #20H 可正可负 补码
• 指令执行阶段不访存
Data=(EA)=(2000)=3000 (6) Data=2000
例7.2 设相对寻址的转移指令占3个字节,第一字节为 操作码,第二、三字节为相对位移量(补码表示), 而且数据在存储器中采用以低字节地址为字地址的存 放方式。每当CPU从存储器取出一个字节时,即完成
(PC)+1PC.
(1)若PC当前值为240(十进制),要求转移到290 (十进制),则转移指令的第二、三字节的机器代码 是什么?
16个),所以是RR型指令,两个操作数均在寄存器中。 (4) 这种指令结构常用于算术逻辑运算类指令。
例: 指令格式如下所示,OP为操作码字段,试分析指令格 式特点。
6
2
4
4
OP
寻址特征
源寄存器 变址寄存器
ห้องสมุดไป่ตู้
位移量(16位)
解: (1) 双字长二地址指令,用于访问存储器。 (2) 操作码字段OP为6位,可以指定64种操作。 (3) 一个操作数在源寄存器(共16个),另一个操作数在存
解:(1)立即寻址,(累加器)=20
(2)直接寻址, (累加器)=(20)=30
(3)间接寻址, (累加器)=((20))=(30)=40
5. 寄存器寻址(寄存器直接寻址)
EA = Ri
寻址特征
指令中的形式地址直接指出寄 存器的编号,操作数存储于寄 存器中。
OP
Ri
R0
MOV AX , BX



存储字长 32 位 进栈 (SP)– 4 SP
出栈 (SP)+ 4 SP
例7.3 一条双字长直接寻址的子程序调用指 令,其第一个字为操作码和寻址特征,第二 个字为地址码5000H。假设PC当前值为 2000H,SP的内容为0100H,栈顶内容为 2746H,存储器按字节编址,而且进栈操作 是先执行(SP)-⌂SP,后存入数据。回答 下列几种情况下,PC、SP及栈顶内容各为 多少?
OP
R0 A
R0 作基址寄存器
主存 R0

R1 通用寄存器
Rn-1
ALU
操作数
• 有利于多道程序 • 由用户指定哪个通用寄存器作为基址寄存器
• 基址寄存器的内容由操作系统确定 • 在程序的执行过程中 R0 内容不变,形式地址 A 可变
8. 变址寻址
EA = ( IX ) +A
IX 为变址寄存器(专用)
相关文档
最新文档