问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

2.6内存地址的五种形式

发布网友 发布时间:2022-10-01 19:32

我来回答

1个回答

热心网友 时间:2024-02-28 19:13

2.6内存地址的五种形式

本节必须掌握的知识点:

       内存地址的五种形式

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

上节中介绍了如何对内存读写,例如把一块内存地址[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*相关内容】

注:

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

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

[if !supportLists]3、[endif]切记比例因子只能是1、2、4、8。

下节介绍存储模式

练习:

[if !supportLists]1、[endif]已知EAX=0x01010101,ECX=0x00000002,执行下面语句后,求EDX的值MOV EDX,DWORD PTR DS:[EAX+ECX*8+4]。

[if !supportLists]2、[endif]如果算出的内存地址结果超过32位会怎样?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
成都汇众益智游戏学院怎么样 为什么苹果手机屏幕老是自动滚上去? roughness test什么意思 国家标准打印纸为每包500张,小雨同学家里新买—包打印 纸,她想练习... 谁知道卡布奇诺含义 卡布奇诺咖啡历史 电脑针式打印纸有哪些规格? 外籍人才招聘 接种甲肝疫苗会出现什么不良反应 中华人民共和国境内的任何人均应接种哪些疫苗 怎样测试变频器的共模电压及dv/dt?需要什么仪器?示波器可以吗?_百度... 海容乃大,无求品自高! 上联观音山上观山水下联智慧海边智海容。开门红作品天下无敌? 石家庄天海容天下和远洋风景长安,这两个楼盘买哪个好? 天海容天下为什么便宜 天海容天下为什么不卖 科幻电影在天空中有个基地,象一个巨大的航母 有一部科幻电影 有一个基地 人类还要抗那些像虫子一样的机器怪物 地点... 帮我编一首诗谜,谜底是 李芊你很可爱 张家界市汽车运输有限责任公司中心汽车站怎么样? 中华人民共和国农业机械化促进法的介绍 哈尔滨市农业机械化促进条例(2018修正) 广西壮族自治区农业机械化促进条例 山东省农业机械化促进条例(2020修正) 微信只发文字怎么发 微信朋友圈发文字的数字限制 传奇私服如何设置套装属性 热血传奇仿盛大连击,仿盛大连击传奇,今日新开连击传奇 第二次蛀牙有办法挽救吗???急!!! 如何就可以让孩子学会保护自己? 家长如何教育女孩子要保护好自己 浏览器清除的历史怎么找回? 如何申请微粒贷借钱 怎么操作? 公文中的特提特急平急是指什么 公文中的特提特急平急是指啥 手机拔了充电器还显示充电怎么回事 刚刚做了一首打油诗给大家看看:猴年就要看大圣,希望央视能圆梦。都是... 厦门同安哪里有英语成人培训中心 短波频率有哪些? 厦门英语家教 厦门大学录取要看高考口语考试成绩吗(包括所有专业)? 靴的组词 靴经典组词 公司吊销20年未注销怎么... 如何制备含量50%的醋酸铬溶液(是溶液,不是固体) 醋酸铬能去残碱吗? 乙酸铬溶液中加过氧化氢反应生成什么 醋酸可以和铬反应生成氢气吗 金属碘化物(钾、铁、镍、铬),是否溶于醋酸?是什么颜色的? 醋酸铬水合物为什么要用乙醇洗涤 铬和乙酸在h2o环境加热会不会生成有毒气体 在制备醋酸铬中,为什么不用稀盐酸来滴? 在制备醋酸铬(二价)的时候,为什么用乙醇和乙醚洗涤沉淀?