day14.内存存储方式

第14节: 内存存储方式
day14.内存存储方式
这上面的内存地址也就是内存编号,每一个内存编号对应着一个内存块(单元),这个内存单元大小就是8位,图上出现的是一个程序的内存块大小,它的内存单元是4G,4G有多大呢?如果按照编号来排的话,能够排多少个字节?从0开始,0就是对应一个字节的编号,1也是对应一个字节的编号以此类推,从小到大,内存最小的是0x00000000,最大是0xFFFFFFFF,如果说每一个编号对应一个字节,那最多能对应多少个字节呢?答案是8个字节。这个我们编写程序能访问的内存,大家可以盯着这个图看一下有个印象。举个例子:
MOV BYTE PTR DS:[0x00000000],0x1A


上面是如何存储的知道码?上面的代码有一点编程基础的人会说0是不可以存储数据的,其实是可以存储数据的。如果你看过前面几节的话,就知道能不能存储数据了。其实这数据想存储到哪里就存储到哪里,所以不能存储数据是你不懂问题的本质,你会觉得0的地方只要存入了数据就会异常,这个想法是错误的,对于没有基础的人,你可以不用管它。我们只要知道0x00000000=0x1A,如果将数据的宽度改成WORD如下:
MOV WORD PTR DS:[0x00000000],0x1A1C


这个又如何存储呢?这节就是讲内存如何存储这些数据,存储的模式分为两种:


1) 大端模式特点:数据高位在内存的低位,数据低位在内存的高位
如果数据是:0x1A1F它在内存中查到的是1A1F这种形式的
2) 小端模式特点:数据低位在内存的低位,数据高位的在内存的高位
如果数据是:0x1A1F它在内存中查到的是1F1A这种形式的


在x86都是小端模式,除了手机上的应用绝大多数才是大端模式,这个东西不是绝对的,受到编译器的影响,编译器上是可以改这个存储模式的。


我们在olldebug工具来实现一下什么是小端模式:


day14.内存存储方式
day14.内存存储方式