;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指向的数据赋此寄存器
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------