2.7数据存储模式
本节必须掌握的知识点:
u掌握存储模式
u 大端存储模式、小端存储模式的概念
u掌握DTDebug.exe软件中查找内存窗口数据
我们知道内存是用来存储数据的,那么你知道这些数据是怎么存储的吗?用DTDebug打开一个程序如图2-7-1所示:
在图2-7-1中标注了内存地址和数据。能看懂堆栈窗口中内存地址为0x004FFC3C存储的数据是0x00000000,在内存窗口中你知道它怎么存储的吗?我们改一下内存地址为0x004FFC3C存储的数据,改为0x12345678这串数据。
第一步:选中内存地址为0x004FFC3C那一行对应的数据。
第二步:右键弹出对话框,选择Modify如图2-7-2所示:
第三步:修改数据,如图2-7-3中出现的黑框框选的Hexadecimal修改数据,修改为0x12345678
第四步:点击OK。则内存地址为0x004FFC3C修改为0x12345678.观察堆栈窗口
接下来再内存窗口查看内存地址0x004FFC3C数据是怎么存储的。
第一步:找到内存窗口,内存窗口下面有个命令窗口,如图2-7-4所示:
第二步:在命令窗口输入db 0x004FFC3C.点击键盘Enter观察内存窗口,如图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所示:
数据0x12345678是按字节为单位显示:12为高位依次是 34、56、78;
内存地址0x004FFC3C:是按字节为单位显示:从低位到高位依次为0x004FFC3C、0x004FFC3D、0x004FFC3E、0x004FFC3F。
还有一种说法把大端模式称为“大尾”,小端模式称为“小尾”。市场上80X86这种CPU绝大多数是用小端模式进行存储,如果是ARM绝大多数都是大端存储。采取大端模式还是小端模式,还受到编译器的影响,可以在编译器上更改存储模式。
例:
向内存中写入四个字节的数据,并观察存储模式(大端存储/小端存储)。
MOV DWORD PTR DS:[0x004FFC40],0x11223344
第一步:输入指令,如图2-7-7所示:
第二步:按F8单步执行,通过内存窗口观察它们的存储情况,如图2-7-8所示:
0x004FFC40的数据为44,后面的地址依次为0x004FFC41、0x004FFC42、0x004FFC43的数据。44是数据的低位,0x004FFC40是内存的低位。数据低位存在内存低位上,所以该应用程序采取的小端存储模式。
u下一节介绍常用汇编指令。
练习:
什么是大端存储?什么是小端存储?
为什么会有大端存储和小端存储?请大家自己动手查资料吧,只需要了解。
自己观察内存中的数据存储方式与寄存器中的存储方式一样吗?