欢迎您访问第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”获取素材资料以及开发工具和听课权限哦!

相关文章

c盘prefetch可以删除吗? 轻松升级旧电脑

不少朋友问我,家里的旧电脑该怎么处理?因为电脑技术发展飞快,市面上最新款电脑配置也是越来越好。有些人旧电脑也才使用短短两年,扔吧舍不得,留下来确实也出现卡顿现象。既然这么纠结,那么笔就来教大家一个折中的方法好啦!那就是进行电脑的升级,想要电脑恢复刚买的时候的流畅度,那就继续看下去吧!1、电脑可升级的

2024-12-23 09:00

C盘满了怎么办?最强安全清理工具来了

大家都知道,C盘是我们的系统盘,储存着大量的系统文件,时间久了,C盘的垃圾和文件变多,电脑的运行速度也会变慢。甚至有时候会出现C盘报红的情况,极大影响了我们的使用体验。清理C盘的方法有很多,Windows自带的磁盘清理、各电脑管家提供的磁盘瘦身工具以及第三方清理助手等等,本熊就不在一一介绍,本次要重

2024-12-23 08:45

3060显卡电脑多少钱, 6499元的12代酷睿3060显卡游戏本,优缺点都有哪些?

七彩虹,在国内板卡市场中算是有点名气的老牌子,而在笔记本和整机市场,则算新丁一枚,所以,它家笔记本的卖点自然也是“高配置价格比”。即便在12代酷睿H游戏本普遍降价的当下,要想拿下国际厂商的3060显卡机型,至少也要6999元,但七彩虹的将星X15 AT,i5 12500H+RTX 3060显卡,搭载

2024-12-23 08:30

rtx3050ti显卡驱动 ,跟RTX2060比,游戏性能到底如何?

目前RTX3050Ti笔记本电脑GPU已大量被6、7千元的游戏本所采用。对于这款光追显卡的真实游戏表现,相信很多玩家们都非常的感兴趣。它到底有没有上一代RTX2060笔记本电脑GPU好呢?此次笔者就来测它一测。需要说明的是,笔记本平台的性能对决有一大难点,那就是对比的机型很难找,尤其是这种两代平台之

2024-12-23 08:15

c盘可以全部删除吗 ?电脑重装系统会把所有的东西都删除吗

许多用户在给电脑系统重装前,由于自己电脑的里面的东西太多,担心自己的电脑上的数据丢失,不清楚重装系统会不会把所有数据删除。下面小编就给大家解答下电脑重装系统会把所有的东西都删除吗这个问题。电脑重装系统会把所有的东西都删除吗如果只是重新安装系统,并不会把所有的东西删除掉,重新安装系统的第一步是对(系统

2024-12-23 08:00

c盘分太小了,怎么扩容? C盘扩容操作

电脑系统C盘满了怎么办?导致电脑C盘空间越来越少,主要是由于硬盘本身容量太小或者装系统时,给C盘分配容量太小导致。而C盘作为电脑系统盘,安装程序和系统使用中产生的垃圾文件,都会不断占用C盘空间。那么C盘满了怎么办?以前为大家介绍的一些电脑技巧,主要是从C盘瘦身开始的,比如清理垃圾,将安装的程序转移

2024-12-22 10:31

3060显卡哪个品牌好 ,环比增长7%,2000元显卡还有好推荐么?

近日,Valve公布了2023年3月份的Steam硬件和软件调查数据。PC显卡使用详情方面,RTX 3060以10.67%占比(环比增长7%)的份额成为新晋“神卡”;上个月位列冠军宝座的GTX 1650直接跌出榜单前五。据悉,RTX 3060于2021年2月底正式发售,首发价格2499元。作为入门(

2024-12-22 10:15

c盘满了怎么回事,找出占用空间的元凶

从上周开始,C盘红了,删除了一些不常用的软件,清理出15G空间。持续用了几天,放假没关机,今天上班来一看,C盘又红了,只剩下十几兆的空间了。重启电脑,还是空间不足。然后用360清理垃圾功能清理了1.2G垃圾,能正常用了。到中午时,使用360浏览器,提示360崩溃。人也崩溃了,这360浏览器用了好几年

2024-12-22 10:00

电脑自带显卡和独立显卡?两者又该如何切换呢

现在不少电脑都会配备双显卡,那么究竟什么是双显卡呢?简单的说就是一台电脑配备两块显卡,可能是核显加独显,可能是集显加独显,也可能是两块独立显卡。一般情况下电脑的显卡是会自动切换的,当然我们也可以对其进行设置。下面就和小编一起了解下双显卡的详细知识吧~双显卡好还是独立显卡好1、双显卡是采用两块显卡(集

2024-12-22 09:46

6500xt对标什么显卡 ?RX6500XT与GTX1650S、GTX1650对比评测

继RX6600XT、RX6600之后,AMD又带来一款RX6500XT甜品级显卡,主要是面向主流级1080P玩家,该卡架构依然为RDNA2,不过采用Navi 24小核心设计,制造工艺也从7纳米升级为6纳米,意味着它会拥有更高的能耗比,首发定价1599元起,不过大部分显卡品牌基本在1899元左右,并没

2024-12-22 09:31