寻址方式,包含顺序寻址,指令寻址,数据寻址

顺序执行

直接让(pc)+1->pc 这里的1,我们理解为:当前取出的指令的字长

指令寻址

定长指令字结构

设定按照字节编址,那么(pc)+2->pc

变长指令字结构

读如一个字,根据操作码判断这条指令的总字节数n,修改pc的值

(pc)+2->pc

指令寻址,当cpu检测到JMP的时候(无条件转移)虽然pc会+1,但执行完转移指令之后,会把pc值修改为JMP指向的地址

数据寻址

确定本条指令的地址吗指明的真实地址

比如jmp 7 不一定是指向内存中7这个位置
有一些是而是指向这个程序的第7个位置

而还有一些是基于pc往后偏移7个位置

十种数据寻址方式

直接寻址

指令字中的形式地址A就是操作数的真实地址EA,即EA=A

一条指令的执行:

取指令访存一次;执行指令访存一次,不用考虑结果,共访存两次

优点:简单,指令执行仅访问一次主存,不需要专门计算操作数的地址

缺点:A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改,灵活性差

间接寻址

假设指令字长=机器字长=存储字长吧,操作数=3

指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,

也就是操作数的地址的地址即EA=(A)【相对地址】 这里的括号A代表,A指向的主存单元里数据

一条指令的执行:

取指令访存一次;执行指令访存二次,不用考虑结果,共访存三次

优点:可以间接扩大寻址范围(有效地址EA的位数大于形式地址A的位数)便于编程

缺点:指令在执行阶段要多次访存

寄存器寻址

在指令字中给出操作数所在的寄存器编号,即EA=R,其操作数载由R所指的寄存器内

一条指令的执行:

取指令访存一次;执行指令访存零次,不用考虑结果,共访存一次

优点:指令在执行阶段不访问主存,只访问寄存器,指令字短,且执行速度快,支持向量和矩阵运算

缺点:寄存器价格贵,因此计算机中的寄存器数量有限

寄存器简介寻址

寄存器R中给出的不是一个操作数,而是操作数所在的主存单元的地址

EA=(R)

一条指令的执行

取指令访存一次;执行指令访存一次,不用考虑结果,共访存两次

特点:比一般的简介寻址速度更快,但是指令执行的阶段需要访问主存,因为操作数在主存中

隐含寻址

不是明显的给出操作数的地址,而是在指令中隐含着操作数的地址

结合我们之前学的,有可能这个操作数隐藏在acc中

优点:有利于缩短指令字长

缺点:需要增加存储操作数或者隐含地址的硬件

立即寻址

并非直接寻址

形式地址A直接存的就是操作数本身,一般采用补码的形式。 #表示立即寻址特征

当你看到#那就知道后面这个是立即数,而不是地址

一条指令的执行

取指令访存1次,执行指令访存0次,暂不考虑结果,共访存1次

优点:执行阶段不访问主存,执行时间最短

缺点:A的位数限制了立即树的范围,比如A的位数为n,且立即树采用补码时,可表示的数据范围是

\[-2^{n -1} 到2^{n-1}-1 \]

寻址方式 有效地址 访存次数(执行指令期间)
隐含寻址 程序指定 0
立即寻址 A即使操作数 0
直接寻址 EA=A 1
一次间接寻址 EA=(A) 2
寄存器寻址 EA=R_i 0
寄存器间接一次寻址 EA=(R_i) 1
posted @ 2025-09-15 16:06  是我,米老鼠  阅读(25)  评论(0)    收藏  举报