当前位置: 代码迷 >> 汇编语言 >> 一段简略的汇编代码
  详细解决方案

一段简略的汇编代码

热度:7701   发布时间:2013-02-26 00:00:00.0
一段简单的汇编代码
;ebp-4为i的地址  
1) 00410A48 MOV dword ptr [ebp-4],0 ;将i赋值为0  
2) 00410A51 MOV eax,dword ptr[ebp-4] ;将i的值赋给EAX寄存器
3) 00410A54 ADD eax,1 ;让EAX寄存器中的值加1

我的问题:1)00410A48,00410A51,00410A54表示神马东东?
  2)第一段的dword ptr [ebp-4]是一个指针啊,move 后,不应该是把指针弄成0么?比如 dword *a = 0;???怎么会是i赋为0???
  3)同理,第二段MOV eax,dword ptr[ebp-4],也应该是把dword ptr[ebp-4]这个地址赋给寄存器啊,而不应该是i的值赋给EAX寄存器啊????
 
问题灰常小白哈,见笑了....

------解决方案--------------------------------------------------------
1. 那些是相应指令在内存的起始地址
2. dword ptr [ebp-4] 是什么,要看你 i 的定义。如果定义的 int i; 的话,其表示的就是 i ;如果定义的是 int *a; 那它就的 a 这个指针
3. 从 2. 来说,这里给 eax 的不是什么地址了,而是你所定义的那个变量 i 的内容
------解决方案--------------------------------------------------------
1.内存地址嘛
2和3可能的话贴下代码呗?
------解决方案--------------------------------------------------------
ebp-4 是i变量的内存地址,加上[] 就是操作内存里的值了..

1)00410A48,00410A51,00410A54表示神马东东?
这些地址表示的是当前这些汇编语句所在的地址

2)第一段的dword ptr [ebp-4]是一个指针啊,move 后,不应该是把指针弄成0么?比如 dword *a = 0;???怎么会是i赋为0???
ebp-4 是i变量的内存地址,加上[] 就是操作内存里的值了..dword ptr表示寻址数据的范围 ,DWORD表示是4个字节,如 word ptr 表示两个字节,byte ptr 表一字节,如果你定义的i的类型是char,那么就会用byte ptr[ebp-4] 

3)同理,第二段MOV eax,dword ptr[ebp-4],也应该是把dword ptr[ebp-4]这个地址赋给寄存器啊,而不应该是i的值赋给EAX寄存器啊????
同理,加上括号就是把ebp-4指向的数据赋此寄存器




------解决方案--------------------------------------------------------
探讨2. 我这儿i就是int i
是不是就是说dword ptr[]虽然格式是ptr指针,但实际上就是表示[比如ebp-4],ebp-4指向内存里的值???也就是它暗含了一个取值操作???就像C里的 char a = 5;char *b = &a; 那么*b = 5的取值操作???

------解决方案--------------------------------------------------------
探讨但总的对我的问题来说
就像5楼说的,ebp-4 是i变量的内存地址,加上[] 就是操作内存里的值了对吗?
  相关解决方案