【计算机组成原理】大端模式,小端模式,字节,高地址,低地址

  • 最近在做毕业设计,做着做着发现最熟悉的东西变成了最陌生的东西。学完计算机组成原理就知道了大端模式是低地址存高位,小端模式是低地址存低位
  • 上面加粗的文字死记硬背当然比较难了,如果联想一下我们十进制数的表示,比如就987这个数字吧。我们习惯上会从左边开始读书或者是读一个数字,那么我们就认为左边是低地址,从左到右地址编址从小到大。而我们这个数字它的最高位是百位,该位上对应的值是9,我们就发现数字9是最高位,而存放它的地址是低地址。所以我们就认为所谓大端模式就是人们习惯使用的模式
  • 记住了大端模式,小端模式当然不难记了,就是人们不习惯用的模式。
  • 我们在研究这两种模式之前,先来看下什么是字节,以及字节内部的数值表示方式:

一、字节

  • 首先众所周知,一个字节(1 byte)等于八个位(8 bits)。也就是说所谓一个字节,不过是连续的8个位。
  • 那么一个数字是如何存储在这个字节中的呢?
    • 首先我要说,下面的例子是为了能够理解字节,而真正数据存储是要按照补码来存。
    • 其实很简单,比如说数字6,存储在一个字节中就是0000 0110,化成16进制就是06
  • 上面的解释没有什么疑问吧?如果有欢迎在评论区指正或提问。
  • 下面再来看下什么是地址:

二、地址

  • 首先,我们知道了字节中能够存放数据,那么我们怎么知道我们的哪个数据对应存放在哪个字节中呢?
  • 这就需要地址来帮助我们,在计算机中每一个字节都有一个编号,我们把这个编号称为是地址,就是这么简单。举个例子,下面是计算机里面的存储单元,一个方框代表一个位。8各位组成一个字节,每个字节都有其地址:
    【计算机组成原理】大端模式,小端模式,字节,高地址,低地址_第1张图片
  • 下面我们再来看什么是小端模式:

三、小端模式

  • 我们在回忆一下,小端模式是。。。。。。。。。。。。。。。。思考。。。。思考。。。。。。。。。。思考。。。。。。。。。思考。
  • 小端模式是我们不习惯使用的模式,就是低地址存储低位。好那我们具体看下,比如说我们要存储一个int类型的数字6
  • 首先,众所周知,int类型需要4 bytes来存放,也就是需要32 bits来存放。好的那我们先把它需要的内存空间给列出来,如下图中,四个字节,每个字节从小到大进行编号后,将编号作为地址:

【计算机组成原理】大端模式,小端模式,字节,高地址,低地址_第2张图片

  • 空间有了,那么我们要怎么样存放呢?。。。。。。。思考。。。。。。。思考。。。。。。思考。。。。。
  • 首先,计算机不可能把十进制的6直接存储下来,是吧。所以我们先把他写成二进制形式,注意,它是int类型,需要用32 bits来表示,结果就是0.......110,省略号表示28个零。
  • 然后,我们知道存储的最小单位是字节,而一个字节是8位,所以我们再次把这个二进制数,8位为一组,分成4组。也就是按照字节来写,那就是四个字节,分别是0000 0000, 0000 0000, 0000 0000, 0000 0110。好了到这一步,应该没有什么问题吧?有问题的话,欢迎在评论区指针或者提出。
  • 下一步就要思考,如何把上面这四个字节存放在我们之前已经准备好的内存中。这一步也是最关键的一步。我们在来回忆一下什么是小端模式。。。。。。。。。思考。。。。。。。。思考。。。。。。。。思考。。。。。。。思考。。。。。。。。。思考。。。。。。。。思考。
  • 也就是说,我们需要把数字的低位存放在内存的低地址
    - 首先,数字从左至右,是从高位到低位,那么我们的最低位,就是最后一个字节,也就是0000 0110
    - 然后地址的低地址,当然就是编号比较小的地址了,也就是0。
    - 最后,就是说,我们要把0000 0110这个字节,存放在0所指向的内存空间。如下图:
    【计算机组成原理】大端模式,小端模式,字节,高地址,低地址_第3张图片
  • 其它的依次类推,最终结果如下图,
    【计算机组成原理】大端模式,小端模式,字节,高地址,低地址_第4张图片

四、大端模式

  • 详细讲了小端模式,大端模式就不详细说了,和小端模式相反,把高位存储在低地址,也就是把0000 0110这个字节,存储在地址为3的空间中。

五、举个例子

  • 上面说了这么多,不来点实际的谁知道你是不是在瞎扯呢。

  • 好那就把引发我研究这个知识点的问题拿出来和大家分享下。

  • 下面这个是wireshark抓包后的数据,大家不需要看其他的,只需要看我标出来的部分东西:

  • 【计算机组成原理】大端模式,小端模式,字节,高地址,低地址_第5张图片

  • 红框框住的东西,是我写进去的两个数字分别是0和6,图中使用16进制来显示。我就不做分析了,欢迎各位在评论区给出答案,这是用大端还是小端,哪几个数字表示了0,哪几个数字表示了6,等等。

  • 我会及时回复评论的。

  • 最后做一下总结,说了这么多,其实就是说,大端和小端,不影响字节内部如何存储数据,影响的只是字节在内存中的摆放顺序。大端,就顺着摆,小端就反着摆。

  • 文章存在bug或者有问题,欢迎在评论区讨论。

你可能感兴趣的:(计算机组成与设计/软硬件接口)