011-【X86-汇编语言】-内存字节序(大端,小端)

内存地址的高位和低位

对于汇编语言来说数据要么存在寄存器中,要么存在内存中。寄存器可以直接用名字访问,而内存中的数据需要通过地址来访问。内存地址就相当于公寓(相当于内存)房间的门牌号,通过门牌号就能找到对应的房间(相当于内存中的某个位置),进而找到房间里的人(相当于内存中的数据)在004-【X86-汇编语言】-信息的形式&整数中介绍过,CPU操作内存数据的最小单元是Byte也就是8Bit,所以每个内存地址代表了一个8bit的内存空间(公寓房间大小,所有房间一样大)。

地址 0x01 0x02 0x03 0x04
数据 12h 34h 56h 78h

表格的第一行代表内存地址,x86中地址是32bit(8位十六进制数),因篇幅问题表格里只写了8bit(2位十六进制数),表格中的0x01其实代表着0x00000001,0x02代表着0x00000002,0x03和0x04同理。它们分别保存着12h,34h,56h,78h四个Byte的数据。

其中地址数值大的称为内存的高位,地址数值小的称为内存的低位。高位和低位是相对而言的,比如0x02相对于0x01是高位,但是相对于0x03却是低位。

数据的高位和低位

数据的高位和低位是按照人类的阅读习惯指定的,靠左的位称为【高位】,靠右的位称为【低位】

如:1234ABCDh这个十六进制数,数字1为最高位,数字D为最低位

大端(big endian)和小端(little endian)

大端和小端是指数据存在内存中不同的字节顺序,区别如下。表格分别表示同时存储0x1234ABCDh时数据在内存中不同的顺序

大端:数据的高位保存在内存的低位

内存地址 0x01 0x02 0x03 0x04
数据 12 34 AB CD

小端:数据的高位保存在内存的高位

内存地址 0x01 0x02 0x03 0x04
数据 CD AB 34 12

查看内存内容

现在介绍如何在Visual Studio 2017中查看内存内容。首先单步调试010-【X86-汇编语言】-MOV指令,变量,立即数中的程序

打开反汇编器

这时会显示反汇编器

打开内存监视器

之后可以看到内存监视器(至于为什么会出现4个内存我现在还不太清楚,暂时选内存1)

在内存中查看变量的值

先查看反汇编器中的内容,从中可以得到变量在内存中真实的地址

在我的机器上此时dwS的内存地址是0384000h

将此地址输入内存监视器的地址栏,然后回车

会发现从0384000开始连续存放了4个Byte也就是32bit(一个DWORD的长度),分别是cd ab 34 12,可以看出我的机器是以小端方式存储的数据,其实Intel的芯片都是以小端方式保存数据的

猜你喜欢

转载自blog.csdn.net/patronwa/article/details/88417018