寻址,通俗讲就是寻找地址
比喻:给你一个房间号F1003,让你找这个房间。如果我们第一次来到一个新校园,好懵逼啊,这怎么找,F代表什么,1003难道是第一千零三个房间吗?或者F1是某栋楼的简称,003是第三个房间?
怎么才能快速找到这个房间呢?
(1)如果规定是,F表示辅助楼,第一个数代表楼层,后3位数是房间编号。
(2)然后给我一条去往辅助楼的路线,告诉我楼梯在楼宇中的位置。
OK,没问题,很快找到这个小房间。这里第一点对应的术语是编址方式,第二点是寻址方式。
编址方式
下面每个格子代表一位,一行有16个格子,代表机器字长为16
位编址
一位一个地址
字节编址
一个字节(8位)一个地址
字编址
一个字(字长16)一个地址
在计算机中最基本的单位是字节,位地址中的大多数地址都不会使用,造成大量浪费。
对于处理字符,每个字符占一个字节,字节编址比较好。
对于处理数字,数字一般占用2个(short)或4个(int、float)字节,字编址比较好。
寻址方式
对于寻找的目标不同,寻址分为指令寻址和数据寻址
如果寻找的是将要执行的指令的地址,就是指令寻址
如果寻找的是操作数的地址,就是数据寻址
新瓶装旧酒! ----李彦宏
数据寻址
立即寻址
简单粗暴,不用去找数了,数就在指令里。但仍然得根据操作码去找具体的操作。
寄存器寻址
根据寄存器的编号,去指定的寄存器取数,速度很快。
直接寻址
根据主存地址去主存中找操作数
间接寻址
对地址进行分类,如果一个地址指向的是地址,那么称它为间接地址;如果指向的是操作数,那么称它为有效地址
主存地址可以指向间接地址或有效地址,间接地址可以指向间接地址或有效地址
为了区分是间接地址还是有效地址,用存储单元的最高位来分辨
寄存器间接寻址
寄存器2中存放的是有效地址
变址寻址
将寄存器中的变址值(变量)与形式地址(常量)相加,得到有效地址
基址寻址
和变址寻址类似
将寄存器中的基址值(常量)与位移量(变量)相加,得到有效地址
位移量可正可负
相对寻址
将程序计数器中的指令地址(变量)与位移量(变量)相加,得到有效地址
页面寻址
将地址高n位相同的主存单元分为一组,每组称为1个页面
有效地址分成两部分,一部分是页面地址,用于找到对应的页;另一部分是页内地址,用于找到页中的主存单元
根据页面地址的来源,页面寻址可分为3种方式
- 基页寻址(零页寻址):页面地址固定全0
- 当前页寻址:页面地址等于程序计数器(PC)的高几位
- 页寄存器寻址:页面地址取自寄存器
指令中的多个地址码的寻址方式可不同
指令寻址
顺序寻址
不用干预,自动按顺序往下执行。这个指令的顺序保存在程序计数器(PC)中
跳跃寻址(同上)
- 直接寻址
- 相对寻址
- 间接寻址