|
|
由于计算机内存的线性寻址的限制,
在做矩阵运算时多有不便,速度也受限制。
内存寻址单元:
4byte
数据类型支持(举例):
float,
signed long,
unsigned long
由于是矩阵式内存,所以需要固定基本数据类型的长度。
否则,纵向寻址不太方便。
============================================================================
CPU物理寻址方式:
**我先介绍物理寻址,再介绍分段的逻辑寻址**
矩阵绝对寻址: [ 行地址, 列地址 ]
行内绝对寻址: [ 行寄存器, 列地址 ]
列内绝对寻址: [ 行地址, 列寄存器 ]
矩阵相对寻址: [ 行寄存器 + 行地址, 列寄存器 + 列地址 ]
行内相对寻址: [ 行寄存器, 列寄存器 + 列地址 ]
列内相对寻址: [ 行地址 + 行地址, 列寄存器 ]
-------------------------------------------------------------------
注意:根据操作系统的内存管理,或者虚拟机的情况下的宿主机的内存管理,
如果列(行)地址太大,将可能导致系统崩溃,或虚拟内存不足。
所以,即使是大型线性数据结构,必须存储为较小的矩阵。
为了方便这种操作,附加以下寻址方式:
行线性绝对寻址: 列边界寄存器 [ 行线性地址 ]
CPU内部将按照 列边界寄存器,进行“自动换行”。
比如,列边界寄存器==100,行线性地址950,
则实际上就是对 [9, 50] 的内存寻址
行线性相对寻址: 列边界寄存器 [ 行线性寄存器 + 行线性地址 ]
注意这里的概念,
“行线性寄存器”是参考列边界寄存器指定的行地址。
行线性寄存器中,存储的是绝对的行线性地址,作为当前的基准地址。
列线性绝对寻址: 行边界寄存器 [ 列线性地址 ]
同理,略
列线性相对寻址: 行边界寄存器 [ 列线性寄存器 + 列线性地址 ]
同理,略
-------------------------------------------------------------------
**最具魅力的---交换寻址方式:
CPU有一个行列交换标志位,置为1,则所有地址中的行列。(包括线性寻址!)
如果必要,可以将DRC压入堆栈。
这样对于矩阵的转置十分方便。
(请听下回分解) |
|