如何';内存操作数对齐';帮助MIPS管道化?

如何';内存操作数对齐';帮助MIPS管道化?,mips,pipeline,Mips,Pipeline,“内存操作数对齐”如何帮助MIPS流水线化 书上说: 第四,如第2章所述,操作数必须在内存中对齐。因此,, 我们不必担心单个数据传输指令需要两个数据 内存访问;请求的数据可以在处理器和处理器之间传输 单个管道阶段中的内存 我想我知道一条数据传输指令不需要两次或更多的数据内存访问。 但是,我不确定它与内存操作数的对齐有什么关系 提前谢谢 lw指令要求内存地址与字对齐 因此,要访问未对齐的字,需要访问所需字相交的两个字边界,并屏蔽必要的字节 例如,假设您希望加载存储在地址0x2处的单词0x2没有字对

“内存操作数对齐”如何帮助MIPS流水线化

书上说:

第四,如第2章所述,操作数必须在内存中对齐。因此,, 我们不必担心单个数据传输指令需要两个数据 内存访问;请求的数据可以在处理器和处理器之间传输 单个管道阶段中的内存

我想我知道一条数据传输指令不需要两次或更多的数据内存访问。 但是,我不确定它与内存操作数的对齐有什么关系


提前谢谢

lw指令要求内存地址与字对齐

因此,要访问未对齐的字,需要访问所需字相交的两个字边界,并屏蔽必要的字节

例如,假设您希望加载存储在地址
0x2
处的单词
0x2
没有字对齐,因此需要加载存储在
0x2
的半字和存储在
0x4
的半字

要做到这一点,可以这样写:

lh  $t0 2($zero)
lh  $t1 4($zero)
sll $t1 $t1 16
or  $t2 $t0 $t1
如果您想加载例如存储在地址
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

因此,可以看出,对单词对齐的要求无助于MIPS的管道化,相反,对未对齐单词的访问需要过多的内存访问-这是ISA的一个限制。

请编辑问题,将书包括在内(如果可能,最好是一个链接)。在375页,就在管线危险上方。