好吧,我可能会向教授询问这个问题,但过去几周我并没有经常去找教师,所以我会问任何碰到这个问题的人。
在MIPS中,如果整数数组的起始地址(A [0]的地址)存储在寄存器$ s3中,那么用于将数组的第9个元素存储在临时寄存器$ t0中的汇编程序代码将是lw $ t0 32($ s3)。因此偏移量为32.对此的解释是,今天大多数架构都引用存储器中的每个字节(即每个存储器单元),因为整数是4个字节,这是“字”的最常见大小,下一个整数的地址在内存中将是当前地址+ 4,使第9个整数的地址:起始地址+ 4 * 8。太好了!
现在我知道对于以ASCII编码的字符,所需的位数是8 = 1字节。所以我想问的是,如果我们有一个字符数组,那么数组中的下一个字符的地址是:“当前地址+ 1”,因为对于聊天只需要1个存储单元并且每个存储单元都有它自己的地址?或者,因为体系结构中的字大小是4个字节,所以可以引用的最小量是一个字,尽管每个存储单元都有自己的地址,尽管只需要1个字符,但是该字符需要4个字节。如果第一种情况如果是,那么处理器如何知道天气将1添加到地址4?编译器是否需要另外的指令来确定数据类型?另外,导致int占用4个地址引用的空间,是处理器用来加载第一个字节的整数的地址还是?
现在我正在使用缓存(就像我从Patterson和Hennessy的计算机组织和设计中学习的那样)而且这件事真让我感到烦恼所以如果有人我会很感激 会回答。那谢谢啦!
答案 0 :(得分:2)
如果我们有一个字符数组,那么数组中下一个字符的地址是:“当前地址+ 1 [字节]”?
是
如果[this]为真,处理器如何知道将天气加1到地址4?编译器是否需要另外的指令来确定数据类型?
是附加说明。 lw
用于加载字,而lb
/ lbu
用于加载字节。但这只会影响要加载的数据的大小。偏移量不会根据C中的数据大小进行缩放。如果对lw
使用3的偏移量,它将尝试从基址寄存器给出的地址加载+ 3个字节
另外,导致int占用4个地址引用的空间,是处理器用来加载第一个字节的整数的地址还是?
是。内存中字值的布局取决于CPU的字节顺序。 little-endian系统上的值0x12345678将存储为:
-- address -->
78 56 34 12
在大端系统上,它将存储为:
-- address -->
12 34 56 78