"内存操作数的对齐"如何帮助MIPS进行流水线操作?
这本书说:
第四,如第2章所述,操作数必须在内存中对齐.因此,我们不必担心需要两次数据存储器访问的单个数据传输指令; 所请求的数据可以在单个流水线级中在处理器和存储器之间传输.
我想我明白一条数据传输指令不需要两个或多个数据存储器.但是,我不确定它与内存操作数的对齐有什么关系.
提前致谢!
该lw指令要求存储器地址是字对齐的.
因此,要访问未对齐的字,需要访问所需字相交的两个字边界并屏蔽必要的字节.
例如,假设您希望加载存储在地址中的单词0x2.0x2不是字对齐的,所以你需要加载存储在的半字0x2和存储在的半字0x4.
为此,有人可能写道:
lh $t0 2($zero)
lh $t1 4($zero)
sll $t1 $t1 16
or $t2 $t0 $t1
Run Code Online (Sandbox Code Playgroud)
如果要加载例如存储在地址中的单词,这只会变得更复杂0x3:
# load first byte
lb $t0 3($zero)
# load second word, mask out first 3 bytes
lw $t1 4($zero)
lui $t2 0x0000FFFF
ori $t2 $t2 0xFFFFFFFF
or $t1 $t1 $t2
# combine
sll $t1 $t1 8
or $t2 $t0 $t1
Run Code Online (Sandbox Code Playgroud)
因此,可以看出,字对齐的要求无助于 MIPS流水线化,而是对未对齐字的访问需要过多的存储器访问 - 这是ISA的限制.
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |