欢迎您访问第A百科网

计算机内存地址只有5种表现形式吗,为什么?

453次浏览     发布时间:2024-01-05 09:37:09     编辑: 编程小新

了解了内存的知识,也知道内存的使用方法,那内存是内存条吗?答案是否定的,内存是暂时存储程序以及数据的地方。那内存有什么作用哪?大家都知道是存数据的。

上节中介绍了如何对内存读写,例如把一块内存地址[0x12345678]的数据存到另一块内存地址为[0x87654321]中去,用MOV指令实现。

解:

MOV EAX ,DWORD PTR DS:[0x12345678]

MOV DWORD PTR DS:[0x87654321],EAX

我们从答案中可以得出,内存地址是一些数值编号组成的,难道内存地址只有这一种表现形式吗?我们在调试程序的时候还会碰到其它的表现形式吗?我们在调试程序时,内存地址不止这一种表现形式,还有其它的表现形式,共分为五种。

2.6.1【内存地址的五种表现形式】

第一种形式:[立即数]

读取内存的值:

MOV EAX,DWORD PTR DS:[0x003EF8CC]

第一步:首先确定宽度DWORD表示宽度为四个字节,EAX寄存器为32位寄存器,0x003EF8CC是已经申请的内存。看图2-6-1中,此时EAX寄存器存储的数据为0x001D2BA2;

第二步:按F8观察EAX寄存器存储的数据有什么变化,,如图2-6-2所示,看到EAX寄存器存储的数据正是内存地址0x3EF8CC里面存储的数据。

向内存中写入数据:

MOV DWORD PTR DS:[0x003EF8D0],ECX

第一步:首先确定宽度DWORD表示宽度为四个字节,ECX寄存器为32位寄存器,0x003EF8D0是已经申请的内存,看图2-6-3中,ECX存储的数据为0x0000000,内存地址0x03EF8D0存储的数据是001D2BA2;

第二步:按F8观察内存地址0x003EF8D0存储的数据的变化,如图2-6-4所示,

看到内存地址0x003EF8CC里面存储的数据正是ECX寄存器里面存储的数据。

第二种形式:[register]

register代表通用寄存器,可以是8个通用寄存器中任意一个,表示该寄存器中储存的数据为内存地址。我们程序运行的时候,通常将基址保存在寄存器中。这里只能使用这8个32位通用寄存器,因为内存地址编号是32位。

读取内存中的值:

MOV ECX,0x002FFE18

MOV EAX, DWORD PTR DS:[ECX]

第一步:将指令MOV ECX,0x002FFE18 写入汇编窗口,如图2-6-5,记住当前ECX寄存器存储的数据为0x11111111。

第二步:按F8观察,是否把内存地址0x002FFE18写入ECX中,如图2-6-6所示:

第三步:将指令MOV EAX, DWORD PTR DS:[ECX]写入汇编窗口,如图2-6-7所示:

第四步:按F8观察,是否把ECX存储的内存地址对应的数据写入EAX中,如图2-6-8所示:

向内存中写入数据:

MOV EDX,0x002FFE1C

MOV DWORD PTR DS:[EDX],0x123456

第一步:将指令输入到汇编窗口;

第二步:按F8观察,把内存地址0x002FFE1C写入EDX中,看图2-6-10:

第三步:按F8观察,把立即数0x00123456写入EDX中,看图2-6-11:

第三种形式:[register+立即数]

读取内存中的值:

MOV ECX,0x003FF9E4

MOV EAX, DWORD PTR DS:[ECX+4]

第一步:输入指令,看图2-6-12所示:

第二步:按F8观察,把内存地址0x003FF9E4写入ECX中,看图2-6-13:

第三步:按F8观察,把[ECX+4](0X003FF9E4+4)存储的数据写入EAX中,看图2-6-14:

向内存中写入数据:

MOV EDX,0x002EFA50

MOV DWORD PTR DS:[EDX+0xC],0x123456

第一步:输入指令;

第二步:按F8观察,把内存地址0x002EFA50写入EDX中;

第二步:按F8观察,把立即数0x00123456写入[EDX+0xC](0x002EFA50+0xC)中。

第四种形式:[register+register*{1,2,4,8}]

1、2、4、8我们称为比例因子(Scale Factor)。【有兴趣需要深入了解可以查阅Intel白皮书相关内容】

读取内存的值:

MOV EAX,0x0012FFC4

MOV ECX,0x2

MOV EDX,DWORD PTR DS:[EAX+ECX*4]

第一步:输入指令;

第二步:按F8观察,把内存地址0x0012FFC4 写入EAX中;

第三步:按F8观察,把立即数0x2(0x00000002)写入ECX中;

第四步:按F8观察,把[EAX+ECX*4](0x12FFC4+0x2*4)的值写入EDX中;

表示将2放入宽度为4字节(DWORD),内存地址为0x12FFC4+2*4即0x12FFCC中。

向内存中写入数据:

MOV EAX,0x12FFC4

MOV ECX,0x2

MOV DWORD PTR DS:[EAX+ECX*4],0x12345678

第一步:输入指令;

第二步:按F8观察,把内存地址0x0012FFC4 写入EAX中;

第三步:按F8观察,把立即数0x2(0x00000002)写入ECX中;

第四步:按F8观察,把立即数0x12345678写入[EAX+ECX*4](0x0012FFC4+0x2*4)中。

第五种形式:[register+register*{1,2,4,8}+立即数]

读取内存的值:

MOV EAX,0x0012FFC4

MOV ECX,0x2

MOV EDX,DWORD PTR DS:[EAX+ECX*4+1]

第一步:输入指令;

第二步:按F8观察,把内存地址0x0012FFC4 写入EAX中;

第三步:按F8观察,把立即数0x2(0x00000002)写入ECX中;

第四步:按F8观察,把[EAX+ECX*4+1](0x0012FFC4+0x2*4+1)写入EDX中。

向内存中写入数据:

MOV EAX,0x0012FFC4

MOV ECX,0x2

MOV DWORD PTR DS:[EAX+ECX*4+1],EDX

第一步:把内存地址0x0012FFC4 写入EAX中;

第二步:把立即数0x2(0x00000002)写入ECX中;

第三步:把EDX的数据写入[EAX+ECX*4+1](0x0012FFC4+0x2*4+1)中。

每一种地址形式都是有意义的,目前内存地址只有这五种形式,这五钟形式的通用格式为:[register+register*数+立即数]。

肯定会有人问:为什么只有五种表示方法,而且比例因子只能是1,2,4,8哪?极有可能的原因是(猜测):计算机只识别机器语言,所以我们要将内存地址的表示方法翻译成机器语言才能得到执行。组合越多,翻译起来越麻烦,cpu的技术员们只好订个规矩:只能使用五种表示方法,否则一律不识别。【有兴趣需要深入了解可以查阅Intel白皮书相关内容】

注:

1、如果我们所加的立即数为0xFFFFFFFF,那么运算结果极有可能会超过32位0xFFFFFFFF这个范围,计算机限宽,只会保留运算后32位。

2、如果乘的比例因子为0 的情况下,那么计算机会自动把0忽略,虽然运行结果与乘的比例因子1的结果一样,但是它是错误的运行结果。

3、切记比例因子只能是1、2、4、8。

思考一下:如果算出的内存地址结果超过32位会怎样?

最后,如果你想学C/C++可以私信小编“01”获取素材资料以及开发工具和听课权限哦!

相关文章

检察官和律师的区别通俗(法官、检察官、律师哪个职业比较好?)

先说结论:三个专业本身并无好坏之分,关键还要看自身对于未来的规划。一、职业的定位律师(lawyer)是指接受委托或者指定,为当事人提供诉讼代理或者辩护业务等法律服务的人员。法官是指依照法律规定的程序产生,在司法机关(一般指法院)中依法行使国家审判权的审判人员,是司法权的执行者。检察官是依法行使国家检

2024-09-20 08:46

专升本报名流程及条件详细(专升本需要什么条件?)

1、专升本报考不允许跨省首先,专升本考试是由各个省份自行组织的,换句话说,专升本考试是以省为基本单位的,不同省份的招生政策是不同的。在哪个省份读的专科,就只能在哪个省份参加专升本考试,一般来说,不会出现跨省升本的情况。 2、专升本的条件总体上来说,专升本考试针对的是各个省应届毕业的高职高专学生,专项

2024-09-20 08:30

洛可可建筑风格的代表(十大洛可可建筑代表作)

建筑是日常生活中非常常见的,现在的建筑风格一般都是钢筋水泥式的现代建筑,当然也遗留了一些之前的建筑。洛可可式建筑是一个比较特别的建筑风格,比较华丽而美丽世界上有很多地方还遗留着洛可可建筑的身影,下面为大家盘点一下吧。十大洛可可建筑代表作 1、十四圣洁大教堂十四圣洁大教堂始建于1743年德国,1772

2024-09-20 08:15

轮毂被马路牙子刮花怎么处理(轮毂划伤怎么办?)

很多新手小白会因为小区车位的防撞杠、限位杠或者行驶过程中遇上的大坑或挤到了马路牙子就会把爱车的轮毂划伤,如果去4S店修复往往要话费四五百大洋,而且还不包括人工费,保守估计要一番修复就要600大洋了。让人很不放心的是车还得留在4S店一晚,一顿拆装轮胎,真是路漫漫其修远兮!今天小编给大家介绍自己修复的轮

2024-09-20 08:01

影集制作软件(精美电子相册怎么一键制作,试试这几个工具!)

电子相册制作软件用过几个,映象中完全免费的好像不多,一般都是好看的模板需要开会员啥的,分享四款用过的音乐相册制作软件,模板风格多,操作也比较简单,有需要的朋友可以自己去试试啦~1、清爽视频编辑清爽视频编辑软件作为一款专业的视频编辑软件,支持视频剪辑、拼接合并、裁剪分割、调速、倒放、AI语音识别、加水

2024-09-19 10:31

羽毛球握拍图解教学(羽毛球基本技术——握拍法)

羽毛球握拍是你打羽毛球的第一步,打过羽毛球的都知道羽毛球拍握法正确与否,对于掌握和提高羽毛球技术水平,有着非常重要的影响。一个正确的握拍方法,能让你顺利打出各种角度和远度的羽毛球落点。羽毛球技术中的握拍方法是多种多样的,但是最基本的握拍法有两种,正手握拍法和反手握拍法。 正手握拍法 虎口对着拍柄窄

2024-09-19 10:16

suv和越野车有什么区别吗(城市SUV能越野吗?)

现在有很多人,买了一辆城市SUV,然后逢人就说自己买了一辆越野车,哪天有空去东山越野去。这些人压根就没弄明白城市SUV与越野车的区别,开着这样的车型去越野,我敢保证他有去无回。那么城市SUV和越野车究竟有什么区别呢?下面我们从车型名称、车身结构、外形尺寸、发动机、变速箱、驱动型式、底盘结构、轮胎等几

2024-09-19 10:00

null网络什么意思(烦人的NULL,你可以走开点了)

1. Null 的问题假设现在有一个需要三个参数的方法。其中第一个参数是必须的,后两个参数是可有可无的。第一种情况,在我们调用这个方法的时候,我们只能传入两个参数,对第三个参数,我们在上下文里是没有的,那么我们调用方法的时候,就需要用一个特殊值去告知这个方法:第三个参数我们拿不到,参数是不存在或者不

2024-09-19 09:46

ps路径怎么转换成选区(Photoshop教你如何将路径与选区进行转换)

路径与选区的转换 路径除了可以直接使用路径工具来创建外,还可以将创建好的选区转换为路径。另外,我们也可以将创建的路径转换为选区。1、将选区转换为路径 在Photoshop中创建好选区之后,在“路径”面板中单击“从选区生成工作路径”按钮。如图所示。 这样就可以将创建的选区转换为路径了。如图所示:2、将

2024-09-19 09:31

臭虫喜欢咬什么样的人(臭虫叮咬人时,会传播很多疾病)

臭虫又叫吸血虫,是因为臭虫从虫卵孵化为幼虫以后,就可以叮咬人吸血了,被臭虫叮咬以后又红又肿,奇痒无比,并且抓挠以后,会留下一些黑斑,影响一些爱美女孩子的形象。臭虫在叮咬人的同时,会传播很多疾病,带来更严重的危害。臭虫怕光怕动静,一般都是夜里关灯,人快睡着的时候才出来叮咬人吸血。等你感觉到了被咬,翻身

2024-09-19 09:15