指令系统2 - 寻址方式
指令的寻址方式
符号说明:
PC: 指令寄存器
ACC:累加器
A: 指令的形式地址,在不同寻址方式中含义不同,可以是直接操作数,或者内存地址或者寄存器编号
(A): 形式地址中的值
EA : 指令的真实地址
R: 寄存器
OP:操作码
BR: 基址寄存器
IX:变址寄存器
SP:stack pointer 堆栈指针
指令寻址方式
-
顺序寻址
(PC) 增加一个指令字长,自动形成下一条指令地址 -
跳跃寻址
在本条指令中的操作数中给出了下一条操作指令的地址
是否跳跃,由状态寄存器和操作数本身控制
跳跃的地址分成两个情况: 绝对地址 或者 相对地址(当对于当前地址)
跳跃的结果是修改PC的值,所以跳跃之后的地址还是由(PC)给出的
数据寻址方式汇总
由于数据寻址方式特别多,在一些指令系统中存在很多寻址方式例如(CISC,像x86)
因此需要额外的寻址特征 位数来表示,例如有8种寻址方式在使用,需要3bit的位数来表示寻址特征
标准形式如。|OP|寻址特征码|A|
寻址方式汇总
寻址方式 | 表达式 | 访存次数 | 备注说明 |
---|---|---|---|
隐含寻址 | OP+ 特征码 +A/- (+(ACC)) | 0/1 | 规定ACC为第一/二个操作数地址,减少指令长,但增加隐含地址的硬件 |
立即寻址 | OP + 特征码 +EA | 0 | 操作数就是操作数本身,不妨问主存 |
直接寻址 | OP + 特征码 + A | 1 | (A)=EA,A决定了地址,不容易修改 |
间接寻址 | OP + 特征码 + A | N | (A)=A1,(A1)=A2,(An)=EA, 当主存第一位0表示真实EA |
寄存器寻址 | OP + 特征码 + R | 0 | EA=R编号比较少,所以地址码短。R数量有限,价格按规 |
寄存器间接寻址 | OP + 特征码 +R | 1 | EA=(R) |
相对寻址 | OP + 特征码 + A | 1 | (PC) + A,其中A可正可负补码表示,便于程序浮动,常用于转移指令 |
基址寻址 | OP + 特征码 + A | 1 | EA = (BR) + A.扩大寻址范围,不必考虑程序在主存位置,利于程序浮动,多道程序 |
变址寻址 | OP + 特征码 + A | 1 | EA = (IX) + A, IX面向用户是偏移量,A是形式地址作为基址 |
堆栈寻址 | OP | 1 | 无操作数指令,每次push之后(SP)-1 ,每次pop之前(SP)+1 |
注意事项:
相对寻址PC的浮动: 例如OP + 相对寻址 + A
例如 JMP A ,操作码 JMP会自动执行 (PC) + 指令码长度 -> PC;
例如JMP占据2B的长度,最后的地址跳转到 (PC)=X
(PC)=X+2, X + 2 + A ;