2010-03-05 73 views
1

我在MIPS中遇到内存寻址问题。它说,寻址是字对齐的......在下面的文本中,我不明白为什么它查看地址的2个最低有效位?为什么?有人能给我一个例子来澄清/说明这里提出的观点......所以它是说一个有效的半字地址都是2个最低有效位都是00或10?了解内存地址

那么如果我想从一个内存中加载一个字来对齐字?我怎样才能做到这一点?这是说,我需要转移2左,也就是使至少2个显著位0 ...然后提取位...

alt text http://img69.imageshack.us/img69/1603/jpgdw.jpg

+0

那么如果我想从单词对齐的内存中加载一个字节......我该怎么做?我的想法是首先提取包含我想要的字节的单词,然后从单词中提取字节...但是,如何在MIPS中执行加载字节(lb)时如何获取单词的地址... – aherlambang 2010-03-05 05:13:12

回答

1

'字对齐'表示CPU将始终读取4个字节。然而,如果操作实际上是一个2字节的短操作,那么地址结束0b00或0b10(因此地址是偶数)是合理的,并且CPU在加载时会将正确的2个字节戳到寄存器中写入一个寄存器或写入正确的信息。

同样,当读取一个字符时,两个最低有效位可以取任何值,并将正确的字节载入相关寄存器或将寄存器的相关部分(通常是LSB)写入正确的部分记忆。

但是,如果您尝试读取地址不是0b00的(4字节)int,则会得到一个SEGV或其附近。

0

半字对齐的地址,在结束二进制0(可以被小数点2整除,半字节中的字节数)。一个字对齐的地址以二进制00结尾(可以被十进制数4,一个字的字节数)整除。

是的,措辞和图表是有点钝。

0

我记得在使用MIPS时遇到这个问题。我的建议是首先加载整个单词,然后查看两个最低有效位,并使用它们来确定32个实际需要加载的8个位。

问题,你究竟想要做什么?你在写MIPS汇编代码吗?或者你是否试图在硬件中实现MIPS处理器?

如果你只是写MIPS的汇编代码,这是我的理解,你可以使用任何内存地址磅,它会妥善处理它。唯一需要担心正确对齐的时候是使用lw指令。

0

如果你想读取一个字节,你可以从内存中的每个位置读取。没什么好担心的。单词对齐只在您想要一次读取多个字节时才起作用。

如果要读取跨越字边界的4字节值,可以使用4个单字节读取操作(移位和ORing)来完成。它比简单的读取要慢得多。