读取字节时的小尾数详细信息(内存位置)

时间:2019-05-06 15:14:50

标签: assembly

我们假设使用此32位数字66 DD FA EB。

小尾数

0 x 100 ---> 66(MSB)

0 x 99 ---> DD

0 x 98 ---> FA

0 x 97 ---> EB(LSB)

大尾数

0 x 100 ---> EB(LSB)

0 x 99 ---> FA

0 x 98 ---> DD

0 x 97 ---> 66(MSB)

我相信已经了解了字节存储的正确顺序。

但是我的问题是,访问此4字节字时,首先读取哪个字节?

根据计算机的字节序,总是始终先读取地址最低的字节,然后再将其定位为最高有效还是最低有效?

我试图更好地解释自己。 以上面的LITTLE ENDIAN为例。

我想得到的正确命令是66 DD FA EB

现在要实现此目的,我可以读取地址最低的字节并将其放在页面的右侧,然后继续向左查找以下字节。

         EB 

      FA EB

   DD FA EB

66 DD FA EB

结果是66 DD FA EB,这是正确的。

或者我可以从地址最高的字节中读取,将其放在页面的左侧,然后继续在右侧读取以下字节

66

66 DD

66 DD FA

66 DD FA EB

结果始终为66 DD FA EB,这是正确的。

由于字的存储地址是第一个字节的地址(最低地址),与字节顺序无关,因此我假定它始终是第一个要读取的字节(最低地址),然后放在第一个字节中。正确的顺序。

所以我的最后一个问题是,

我之前显示的两种模式中的哪一种是由Little Endian的计算机用来读取建议的示例中的4字节字?

1 个答案:

答案 0 :(得分:0)

一件事与另一件事无关,正如评论中多次提到的那样。主存储器总线的宽度至少为32位,但更常见的是64位,并且所有事务都是这些大小。好吧,那也不是真的,更重要的是。总线很多,处理器核心的边缘上有一个/一些总线,然后您经过mmus和缓存进入芯片级总线,然后离开芯片总线。在芯片上,您至少为32位宽,但更可能为64位,或者是其两倍的幂。当您通常将芯片从芯片放入系统内存时,则取决于技术。高速缓存和外部接口之间的控制器和各种总线管理每一层的总线事务数。在服务器或台式机上,您可能具有64或72位接口(后者带有ecc)。对于电话而言,ddr4是16位总线,因此自其ddr(每个时钟周期的一半时钟数据,而不是每个时钟周期一位数据)起,您的缓存行就分为许多16位事务或32位事务。因此,您可以将其计为16或32。您的笔记本电脑可能具有32/40位记忆棒,但是我有一段时间没有计算引脚数了。

根据您的问题,尽管如果您返回自己的返回机器,还是要视情况而定,一个32位事务可能已经由32位总线和32位内存处理了,无论是4 8位总线还是2 16s或32.但是,即使不匹配,也要由系统设计人员来决定,因为我们在芯片上没有很多系统,然后是cpu,然后是外设,而其他芯片上也是如此。因此,存储器控制器设计人员可以选择首先执行哪个字节事务。这通常是任意的。

同样适用于小端。如果您对大与小的定义是什么,那就存在问题。您如何打开问题对我来说毫无意义。...0x11223344 32位值0x44是最低有效字节,并且始终是真的,字节序与它无关。现在,以字节可寻址方式考虑时,其地址可能以2b00或2b11结尾,那就是您的字节序。但是我们有字节不变的be8处理器和字不变的be32处理器,这是您通常想到的,但是arm切换到了字节不变,因此字被交换,但是字节位于相同的地址(取决于事务大小)。疯狂吧?那么当然会有位排序,其中0x44可能是位7..0,而某些cpus认为0x44位是24..31。

没有底线的答案,这完全取决于系统级设计人员,这并不意味着仅由cpu员工负责,您可以将68K挂接到8位内存中,然后提取一个字大小的事务以您喜欢的任何顺序A [1:0] = 2b11、2b10、2b01、2b00或2b00、2b01、2b10 2b11,由您决定并不重要,也不会影响处理器本身,因为一旦收集字节就将其全字送入

经过设计或在8位总线时代的系统不必具有32位事务。也许是16,但您更有可能将两个8位部分放在那儿并控制输出和写入使能,而不是添加等待状态,尤其是在那个时代。因此,8088与8086之间的比较。一个用于8位宽的存储器,可能是单个部分,另一个用于16位宽的系统,最初是两个8位宽的部分,随着需求的变化逐渐演变为16位宽的部分。

这个问题没有一个答案。