2.7数据存储模式

2.7数据存储模式

本节必须掌握的知识点:

u掌握存储模式

u 大端存储模式、小端存储模式的概念

u掌握DTDebug.exe软件中查找内存窗口数据

我们知道内存是用来存储数据的,那么你知道这些数据是怎么存储的吗?用DTDebug打开一个程序如图2-7-1所示:


2.7数据存储模式_第1张图片

在图2-7-1中标注了内存地址和数据。能看懂堆栈窗口中内存地址为0x004FFC3C存储的数据是0x00000000,在内存窗口中你知道它怎么存储的吗?我们改一下内存地址为0x004FFC3C存储的数据,改为0x12345678这串数据。

第一步:选中内存地址为0x004FFC3C那一行对应的数据。

第二步:右键弹出对话框,选择Modify如图2-7-2所示:

第三步:修改数据,如图2-7-3中出现的黑框框选的Hexadecimal修改数据,修改为0x12345678

第四步:点击OK。则内存地址为0x004FFC3C修改为0x12345678.观察堆栈窗口


2.7数据存储模式_第2张图片
2.7数据存储模式_第3张图片

接下来再内存窗口查看内存地址0x004FFC3C数据是怎么存储的。

第一步:找到内存窗口,内存窗口下面有个命令窗口,如图2-7-4所示:


2.7数据存储模式_第4张图片

第二步:在命令窗口输入db 0x004FFC3C.点击键盘Enter观察内存窗口,如图2-7-5所示:


2.7数据存储模式_第5张图片

db:是按字节的形式显示在内存窗口

dw:是按字的形式显示在内存窗口

dd:是按双字的形式显示在内存窗口

可以通过堆栈窗口看到内存地址为0x004FFC3C存储的数据为0x12345678,而内存窗口0x004FFC3C存储的数据为0x78563412。为什么要通过内存窗口呢?堆栈窗口可以看到0x004FFC3C里面的数据是0x12345678,因为它是以四字节为单位显示,我们并不能清楚地看到每个字节存储的数据,所以我们以一个字节为单位查看。

2.7.1【存储模式】

在计算机的世界里,存储数据的方式要按照计算机的方式去存储,计算机一共有两种存储模式:小端模式和大端模式。

大端模式存储:数据高位在内存低位,数据低位在内存高位。

小端模式存储:数据高位在内存高位,数据低位在内存低位。

那么什么是数据的高位哪?什么又是内存的低位哪?我们知道内存地址是内存编号,每一个编号代表一个内存单元。假设内存地址为0x004FFC3C里面存储的数据是0x12345678。看图2-7-6中内存窗口,内存地址为0x004FFC3C存储的数据为0x78563412,我们存进去的数据是0x12345678。这里我们拆分数据0x12345678,如表2-7-1所示:


2.7数据存储模式_第6张图片

数据0x12345678是按字节为单位显示:12为高位依次是 34、56、78;

内存地址0x004FFC3C:是按字节为单位显示:从低位到高位依次为0x004FFC3C、0x004FFC3D、0x004FFC3E、0x004FFC3F。


2.7数据存储模式_第7张图片

还有一种说法把大端模式称为“大尾”,小端模式称为“小尾”。市场上80X86这种CPU绝大多数是用小端模式进行存储,如果是ARM绝大多数都是大端存储。采取大端模式还是小端模式,还受到编译器的影响,可以在编译器上更改存储模式。

例:

向内存中写入四个字节的数据,并观察存储模式(大端存储/小端存储)。

MOV DWORD PTR DS:[0x004FFC40],0x11223344

第一步:输入指令,如图2-7-7所示:

2.7数据存储模式_第8张图片

第二步:按F8单步执行,通过内存窗口观察它们的存储情况,如图2-7-8所示:


2.7数据存储模式_第9张图片

0x004FFC40的数据为44,后面的地址依次为0x004FFC41、0x004FFC42、0x004FFC43的数据。44是数据的低位,0x004FFC40是内存的低位。数据低位存在内存低位上,所以该应用程序采取的小端存储模式。

u下一节介绍常用汇编指令。


练习:

什么是大端存储?什么是小端存储?

为什么会有大端存储和小端存储?请大家自己动手查资料吧,只需要了解。

自己观察内存中的数据存储方式与寄存器中的存储方式一样吗?

你可能感兴趣的:(2.7数据存储模式)