Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 理解内存地址_Memory_Assembly_Mips_Cpu Architecture - Fatal编程技术网

Memory 理解内存地址

Memory 理解内存地址,memory,assembly,mips,cpu-architecture,Memory,Assembly,Mips,Cpu Architecture,我在MIPS中遇到内存寻址问题。它说地址是单词对齐的。。。在下面的文本中,我不明白为什么它要查看地址的2个最低有效位?为什么?有人能给我举个例子来澄清/说明这里提出的观点吗。。。那么,是不是说一个有效的半字地址都是其2个最低有效位为00或10的地址 那么,如果我想从一个字对齐的内存中加载一个字节呢??我该怎么做?据说我需要向左移位2,即使至少2个有效位为0。。。然后提取这些位 半字对齐地址以二进制0结尾(可被十进制2整除,即半字中的字节数)。字对齐地址以二进制00结尾(可被十进制4整除,即字中的

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


那么,如果我想从一个字对齐的内存中加载一个字节呢??我该怎么做?据说我需要向左移位2,即使至少2个有效位为0。。。然后提取这些位


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


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

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


是的,文字和图表有点迟钝。

“字对齐”意味着CPU将始终读取4个字节

但是,如果操作实际上是2字节短的,则地址以0b00或0b10结尾是合法的(因此地址是偶数),CPU将在加载到寄存器或写入正确信息时将正确的2字节插入寄存器

类似地,在读取字符时,两个最低有效位可以取任何值,并且正确的字节被加载到相关寄存器中,或者寄存器的相关部分(通常是LSB)被写入内存的正确部分


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

“字对齐”意味着CPU将始终读取4个字节

但是,如果操作实际上是2字节短的,则地址以0b00或0b10结尾是合法的(因此地址是偶数),CPU将在加载到寄存器或写入正确信息时将正确的2字节插入寄存器

类似地,在读取字符时,两个最低有效位可以取任何值,并且正确的字节被加载到相关寄存器中,或者寄存器的相关部分(通常是LSB)被写入内存的正确部分


但是,如果您试图读取地址不以0b00结尾的(4字节)int
int
,那么您将得到一个SEGV或其左右的值。

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

问题,你到底想做什么?您正在编写MIPS汇编代码吗?或者您正在尝试在硬件中实现MIPS处理器


如果您只是为MIPS编写汇编代码,我的理解是,您可以将lb与任何内存地址一起使用,并且它将正确处理它。唯一需要担心正确对齐的时候是使用lw指令。

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

问题,你到底想做什么?您正在编写MIPS汇编代码吗?或者您正在尝试在硬件中实现MIPS处理器


如果您只是为MIPS编写汇编代码,我的理解是,您可以将lb与任何内存地址一起使用,并且它将正确处理它。唯一需要担心正确对齐的时候是使用lw指令。

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


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

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


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

所以,如果我想从字对齐的内存中加载一个字节,该怎么办。。。我该怎么做?我的想法是先提取单词,它有我想要的字节,然后从单词中提取字节。。。但是,如何在MIPS中通过加载字节(lb)来获取单词的地址…因此,如果我想从单词对齐的内存中加载字节,该怎么办。。。我该怎么做?我的想法是先提取单词,它有我想要的字节,然后从单词中提取字节。。。然而,我怎样才能从MIPS中的加载字节(lb)中获得单词的地址。。。