其他分享
首页 > 其他分享> > 数据寻址(2)

数据寻址(2)

作者:互联网

数据寻址(2)

偏移寻址

  1. 基址寻址
  2. 变址寻址
  3. 相对寻址

  1. 第一个:运行到第 3 行,就让PC=7,跳跃到7。这里当然没有错误。但是,当我们无法从主存起始值为0的地方开始呢?

  2. 第二个:我们起始位置是100,到了103我们又跳到7?当然不是,我们的本意是要到这个程序的第7行。所以,这个7应该视为从100起的偏移量,即第107行。所以,要改变对它的解读方式

  3. 第三个:运行到第 103 行,此时PC=104 。故第 103 行的3的意思是“让PC在原有基础上+3”,这样PC=107

基址寻址

基址寻址:以程序的起始存放地址作为“起点”

一个专门的基址寄存器【操作系统中的重定位寄存器】

在指令中指明,要将哪个通用寄存器作为基址寄存器使用

例:执行主存中的一段从100起始的代码

int a=2 ,b=3,c=1,y=0;
void main() {
	y=a*b+c;
}

优点:

变址寻址

例:对某数组求和

采用变址寻址前

for(int i=O; i<10; i++)	sum += a[i];

采用变址寻址后

for(int i=O; i<10; i++)	sum += a[i];

变址寻址的作用

数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。

基址寻址&变址寻址复合

实际中往往是多个复合使用的:

基址寻址:EA = (BR)+ A

变址寻址:EA = (I X)+ A

先基址寻址后变址寻址: EA = (IX) + ((BR)+ A )

相对寻址

例:挪动一段循环代码

比如说,随着代码越写越多,想要在自己写的程序中挪动这一段循环代码到其他位置,就要用到相对寻址。

for(int i=0;i<10;i++)	sum += a[i];

挪动前

挪动后

优点:

与基址寻址的区别

BR中也说了程序的浮动,区别:

硬件层面是如何比较 a>b

硬件视角:

标签:变址,基址,PC,地址,寻址,寄存器,数据
来源: https://www.cnblogs.com/tupo/p/15658935.html