程序是怎样跑起来的
上QQ阅读APP看书,第一时间看更新

1.6 通过地址和索引实现数组

接下来我们看一下表1-1中出现的基址寄存器变址寄存器。通过这两个寄存器,我们可以对主内存上特定的内存区域进行划分,从而实现类似于数组注1的操作。

注1:数组是指同样长度的数据在内存中进行连续排列的数据构造。用一个数组名来表示全体数据,通过索引来区分数组的各个数据(元素)。例如,一个10个元素的数组a,其中的各个数据就用a[0]~a[9]来表示。[]内的数字0~9就是索引。

首先,我们用十六进制数二进制数的位数较多、不易理解时,通常使用十六进制数来代替二进制数。这是一种数到16就进位的计数方式。我们用A~F来分别表示10~15,那么,二进制数的4位(0000 ~1111)就可以用十六进制数的1位(0~F)来表示。32位的二进制数,就可以用8位的十六进制数来表示。将计算机内存上00000000~FFFFFFFF的地址划分出来。那么,凡是该范围的内存区域,只要有一个32位的寄存器,即可查看全部的内存地址。但如果想要像数组那样分割特定的内存区域以达到连续查看的目的,使用两个寄存器会更方便些。例如,查看10000000地址~1000FFFF地址时,如图1-9所示,可以将10000000存入基址寄存器,并使变址寄存器的值在00000000~0000FFFF变化。CPU则会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。变址寄存器的值就相当于高级编程语言程序中数组的索引功能。

图1-9 综合使用地址和索引来决定实际地址