内存地址_堆栈

一:寄存器的结构_eax与ax,ah,al的关系86207ed75c824442b4c63836909f3e32.png

 eax分一半是ax,ax内部左边是ah,右边是al。即这样的关系。修改al的值ax也会变,eax也会变。7f6e50cc344f48788c48eb75b02e111f.jpg

 注意:8位寄存器只能存放两个16位数,因为一个8位寄存器存放8位二进制数,1位16进制数等于4位二进制数。

二:窗口介绍

bfccf6fadea44de69a6e8293a06a396d.png

 编号:9025a9e5550d4490b6e4d5a37d38c44e.png

修改指定内存中的数据: 8ea6668c78b2401a813a442cf944cdb8.png

 注意:前面定义的类型(如byte,word,dword)要与后面的存入数据的宽度一致。如果存入的是word类型,而一个存储单位只能存一个字节,那么会依次顺延,更改存储单位数据数据。4b76323ea8d44a46988488e4aaf531ad.png

 存入word类型到D8中,D9数据

LEA指令:取地址

1e810e77dddb432faea022e3333824d0.png

 将12FFC4的地址传入EAX中(后来用于间接取址,当括号内的值是变量时想得到地址需要进行此操作)

e9909ff9b128410b9239aaa1ff7844da.png

指令+存入的地址+数据宽度+PTR DS:[要取数据的地址](???)

补充:如何不修改代码改值

197713b9aa4e445abedb614c38074fff.png

 

663dca56d56e435284673300e3288325.png

 此时是将ECX的地址所指向的变量取出(???)

取地址方法总结:

1:直接放地址编号

2:将地址放到寄存器中,通过寄存器找内存

LEA指令执行完后ECX的值等于EAX的值

2b7fbd810bbd4a32af759851cddeee3b.png

MOV指令是将值取出,LEV指令是取出地址。

其他寻址方式:

39f80ca3146c4e44a30f6582b102f5a4.png

 1fec8e27599942e9829779cf3249549b.png

 (方括号内的会有寄存器的计算,但只能是(reg+reg*(1,2,4,8)+立即数形式。

三:堆栈

临时存放数据,方便读入和取出

可以记录存储多少数据

能够快速找到存储的数据

932fd2d8f4c844019d922bb4e135b2e0.png

采取基础地址=段地址*16+偏移地址方式找到地址。例如:base+...或者top+...(其中base和top是任意两个寄存器)

465c0cb8e801416c915ebe6ae446dd36.png

 当不需要这组数据时,将top下移

如何存储(实际操作):

开始可以将栈底和栈顶存到同一位置

ed6d0c919fe04f97a9f41bff4d0288ff.png

存入数据:地址=栈顶位置-数据宽度 (为什么是-数据宽度?因为window中是向低位拓展,即栈底高于栈顶)cc4e7b30c560497c8c726746cad1ff78.png

 修改栈顶的值c66467a5fed54486ba3ba3f1fd82129e.png

 此方法是先存数据再移栈顶的位置,也可以先移栈顶位置,再存数据。

先移栈顶值,再存数据,此时存入存入数据到寄存器中不需要再-数据宽度。

4ddecf71918b4b4aafaa633462ed2c7a.png

 2181a778562f49cc94f8964143e7d003.png

 如何弹出数据?

先取出数据到其他寄存器后再将移地址(也可以先移地址再取数据)

01aa3c9ba290448182e897ff77ecfe61.png

 4c5e69fa50f741ffb16b157d3c17017b.png

 其他存储数据,弹出数据指令:

push指令:将数据存入cpu中常用的存储堆栈的寄存器esp(栈顶)中(ebp栈底)

af6f8c173bdc479b97049520b4776cc5.png

pop指令:将数据弹出。例如:pop eax 是将数据弹出并存储到eax中。655c4a1a78f64186bbf62ccb3955fa04.png

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值