阅读:1464回复:3
《天方夜读》中,有个地方不明白,想问一问,呵呵。。。
《天方夜读》第16页中,页面下部。
for(i=0;i<3;i++) 00401000 mov eax,dword ptr [esp+4] ;a 保存到eax 中 00401004 mov edx,dword ptr [esp+0Ch] ;c 保存到edx 中 00401008 mov ecx,dword ptr [esp+8] ;b 保存到ecx 中。 0040100C push ebx 0040100D push esi ;问题 start 0040100E add eax,4 ;这里已经开始处理数据。必须把这些指令和 ;函数入口指令和循环控制指令分开 ;问题 end 00401011 push edi ;问题 start 00401012 add edx,8 ;同前面的add eax,4 ;问题 end 00401015 mov esi,3 ;循环变量取3 0040101A lea ebx,[ebx] ;无意义指令 0040100E add eax,4 这行,为什么eax要加4啊,eax中保存的不应该是内存地址吗, 怎么好像跟栈扯上了关系,push一次,就加4,下面的情况也是类似。 |
|
沙发#
发布于:2007-10-26 14:39
刷成新帖,好让大牛哥帮俺解决解决。。。
|
|
板凳#
发布于:2007-10-26 16:26
把汇编代码再仔细的看了看,发现eax中存储的是内存地址,只是第一遍循环,它用[eax]代表 a[0][1],而不是习惯上的a[0][0],下面的edx也是,第一遍循环[edx]代表的是c[0][2]。
感觉挺奇怪,为什么不老老实实地用[eax]代表a[0][0],用[edx]代表c[0][0],反而加上一个偏移量呢? |
|
地板#
发布于:2007-10-29 21:23
你看的是《天方夜读》,又不是汇编教材, 扣那么细干嘛?
实在遇到搞不清的, 上机调试下. 0040100E add eax,4 00401020 mov ebx,dword ptr [eax] 00401029 imul edi,dword ptr [eax+4] 0040102F mov ebx,dword ptr [eax-4] 0040106F add eax,0Ch 有什么看不懂的吗? |
|