内存地址的高位和低位
对于汇编语言来说数据要么存在寄存器中,要么存在内存中。寄存器可以直接用名字访问,而内存中的数据需要通过地址来访问。内存地址就相当于公寓(相当于内存)房间的门牌号,通过门牌号就能找到对应的房间(相当于内存中的某个位置),进而找到房间里的人(相当于内存中的数据)在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的芯片都是以小端方式保存数据的