指令寻址方式与数据寻址方式

Posted PacosonSWJTU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指令寻址方式与数据寻址方式相关的知识,希望对你有一定的参考价值。

【README】

1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;

2. cpu访存寄存器耗费 10ns,访问缓存(高速缓冲寄存器)耗费20ns,访问主存200ns;访问磁盘1ms;一般情况下,CPU内部执行指令最长耗时是在访问内存(外设除外),所以本文列出了寻址方式是否访存的情况;


【1】指令寻址

  • 方式1: 顺序寻址 , PC+1 -> PC ;PC程序计数器寄存器用于存储要执行的下一条指令的地址;
  • 方式2:跳跃寻址, 如 JMP 7;无条件跳转到7号地址的指令;

【2】数据寻址

【2.1】 指令格式

操作码

寻址特征

形式地址A

形式地址 A:机器指令中操作数的形式地址;

有效地址EA:操作数的真实地址; effective address;

约定: 指令字长=存储字长=机器字长;

【2.2】数据寻址方式(10种)

【2.2.1】立即寻址

形式地址A就是操作数;(无需访存)

【2.2.2】直接寻址

形式地址A就是有效地址EA;(无需访存)

【2.2.3】 隐含寻址

操作数地址隐含在操作码中;根据操作码隐含指出操作数在某寄存器中;(如操作数在寄存器中,无需访存)

【2.2.4】间接寻址

通过访存取出形式地址A指向的内存单元的操作数有效地址EA;再通过访存取出有效地址EA指向的内存单元的操作数;(需要2次访存)

【2.2.5】寄存器寻址

形式地址就是寄存器编号,操作数存储在寄存器中;(无需访存)

【2.2.6】寄存器间接寻址

形式地址就是寄存器编号,但操作数有效地址存储在寄存器中;(需要1次访问寄存器,1次访存);

【2.2.7】基址寻址

操作数有效地址EA等于基址+形式地址A;其中基址存储在专用寄存器或通用寄存器中,形式地址作为偏移量;专用寄存器或BR,通用寄存器如R0;(1次计算,1次访存);(注意,基址不变,但形式地址改变,通常用于多道程序设计)

【2.2.8】变址寻址

操作数有效地址EA等于变址+形式地址A;其中变址存储在变址寄存器IX(或通用寄存器)中;(1次计算,1次访存);(注意,变址可变,但形式地址不变,通常用于遍历数组)

【2.2.9】相对寻址

以pc寄存器作为基址寄存器,形式地址作为偏移量;

【2.2.10】堆栈寻址

操作数存储在堆栈的栈顶中,其中栈底是低地址,栈顶是高地址(SP寄存器存储);

Push:入栈;把ACC累加器的数据压入栈顶(内存);
Pop:出栈:把栈顶元素出栈并存入ACC累加器;


【3】寻址示例:求数组N个元素均值

【3.1】 直接寻址实现

直接寻址步骤(共计N+2条指令)

序号

指令

描述

1

LDA D

把操作数存入ACC累加器中;

2

ADD D+1

把ACC内容与D+1内容相加;和存入ACC;

3

ADD D+2

把ACC内容与D+2内容相加;和存入ACC;

4

……

此处省略100字

5

ADD D+(N-1)

把ACC内容与(N-1)内容相加;和存入ACC;

至此,N个数据的累加和已完成,结果存入到ACC中;

6

DIV #N

求ACC中和的均值

7

STA ANS

保存结果到内存单元

【3.2】变址寻址实现

变址寻址步骤(共计8条指令)

序号

指令

描述

1

LDA #0

把ACC累加器清零;

2

LDX #0

把IX变址寄存器清零;

3

ADD X, D

把变址寄存器IX的内容和指令中的形式地址存储的操作数做加法,结果存入累加器ACC;D为形式地址,如数组0号元素地址;

4

INX

变址寄存器IX自增1;

5

CPX #N

Compare-变址寄存器IX 与 N做比较;

6

BNE M

Not equal-若不等,则跳转到M号指令(M=3);

通过这个循环,我们累加;

7

DIV #N

求和的均值

8

STA ANS

保存结果到内存单元

【小结】直接寻址和变址寻址对比:
直接寻址需要n+2条指令;而变址寻址只需要8条指令即可(变址寻址性能更优)

以上是关于指令寻址方式与数据寻址方式的主要内容,如果未能解决你的问题,请参考以下文章

(计算机组成原理)第四章指令系统-第二节3:数据寻址之偏移寻址(基址寻址变址寻址和相对寻址)

汇编学习笔记-80x86寻址方式

指令寻址方式与数据寻址方式

5.2-寻址方式

什么是ip寻址

计算机组成原理4.2指令寻址方式