Assembler d core sim在第7行中,如果r0=120,在命令stw r1,r0,1之后,存储器访问应该是MEM[121]=2,但是为什么是MEM[122] = 2(是:0)?我们如何在寄存器中保存的值中保存某些内容?
blpfk2vs1#
我们不知道内存是否在每个地址存储字节或其他东西,但让我们假设每个内存位置存储一个字节,这称为字节寻址。它看起来像是在缩放。缩放是将索引相乘以获得字节偏移量,当数据类型占用多个地址时,这是必要的,例如16位值在内存中占用两个字节-因此也占用两个内存地址。这里,索引是0、1、2、3,并且缩放因子是2,因为两个地址用于存储的每个字-因此,在缩放之后,存在对应于索引的偏移0、2、4、6。然后将这些偏移量加到基地址120上,产生地址120、122、124、126,其中在每个地址处存储2个字节以组成16位字。他们没有显示的是,在第5行,MEM[121]也必须已经被写入,并且他们也不太清楚endian,但是看起来MEM[120] = 1% 256,并且MEM[121] = 1 / 256,即如果内存是字节,那么这就是两个字节存储简单值1的方式,以小字节序的形式。另一方面,它们可能意味着MEM[addr]=value是一个双字节写入,而不告诉我们端序是什么。然而,使用字节寻址的机器通常也会有一个stb存储字节指令,否则就没有什么意义了。看看他们如何用stb描述MEM[addr]=值会很有趣,因为从技术上讲,它只需要指示一个字节写而不是双字节写。
stb
1条答案
按热度按时间blpfk2vs1#
我们不知道内存是否在每个地址存储字节或其他东西,但让我们假设每个内存位置存储一个字节,这称为字节寻址。
它看起来像是在缩放。缩放是将索引相乘以获得字节偏移量,当数据类型占用多个地址时,这是必要的,例如16位值在内存中占用两个字节-因此也占用两个内存地址。
这里,索引是0、1、2、3,并且缩放因子是2,因为两个地址用于存储的每个字-因此,在缩放之后,存在对应于索引的偏移0、2、4、6。
然后将这些偏移量加到基地址120上,产生地址120、122、124、126,其中在每个地址处存储2个字节以组成16位字。
他们没有显示的是,在第5行,MEM[121]也必须已经被写入,并且他们也不太清楚endian,但是看起来MEM[120] = 1% 256,并且MEM[121] = 1 / 256,即如果内存是字节,那么这就是两个字节存储简单值1的方式,以小字节序的形式。
另一方面,它们可能意味着MEM[addr]=value是一个双字节写入,而不告诉我们端序是什么。
然而,使用字节寻址的机器通常也会有一个
stb
存储字节指令,否则就没有什么意义了。看看他们如何用stb
描述MEM[addr]=值会很有趣,因为从技术上讲,它只需要指示一个字节写而不是双字节写。