chstk
发表于 2010-1-29 18:00:53
原帖由 boy 于 2010-1-29 09:46 发表 https://www.chinapyg.com/images/common/back.gif
LZ有希望做秦哥哥的首席小弟
秦哥首席小弟不是我。我是他二小弟~也有可能是三小弟~~
ikeart
发表于 2010-1-29 21:16:36
看了确实感受颇深,谢谢写这么好的新手级的文章
boy
发表于 2010-1-30 14:16:54
原帖由 chstk 于 2010-1-29 18:00 发表 https://www.chinapyg.com/images/common/back.gif
秦哥首席小弟不是我。我是他二小弟~也有可能是三小弟~~
这个是靠秦哥哥提拔的哈..努力下就到首席了。
qnbs1
发表于 2010-1-30 15:28:08
不错。。。虽然懂了。呵呵
xxkxef
发表于 2010-2-2 01:28:28
学习学习了
liu3062315
发表于 2010-2-2 15:17:59
进来学习下寻址
pygcnm
发表于 2010-6-6 15:57:25
看看一下啊
whypro
发表于 2010-6-6 18:19:20
楼主好厉害,能问个问题吗?
数组存放在那里,用的什么寄存器,为什么要这么存?
whypro
发表于 2010-6-6 18:23:27
#include"stdio.h"
main(){
int a={1,2,3,4,5,6,7,8,9};
int *pa={a,a,a};
int *p=a;
int i;
for(i=0;i<3;i++)
printf("%d,%d,%d\n",a,*a,*(*(a+i)+i));
for(i=0;i<3;i++)
printf("%d,%d,%d\n",*pa,p,*(p+i));
}
0040F9F0 >/> \55 PUSH EBP
0040F9F1|.8BEC MOV EBP,ESP
0040F9F3|.83EC 78 SUB ESP,78
0040F9F6|.53 PUSH EBX
0040F9F7|.56 PUSH ESI
0040F9F8|.57 PUSH EDI
0040F9F9|.8D7D 88 LEA EDI,DWORD PTR SS:
0040F9FC|.B9 1E000000 MOV ECX,1E
0040FA01|.B8 CCCCCCCC MOV EAX,CCCCCCCC
0040FA06|.F3:AB REP STOS DWORD PTR ES:
0040FA08|.C745 DC 01000>MOV DWORD PTR SS:,1
0040FA0F|.C745 E0 02000>MOV DWORD PTR SS:,2
0040FA16|.C745 E4 03000>MOV DWORD PTR SS:,3
0040FA1D|.C745 E8 04000>MOV DWORD PTR SS:,4
0040FA24|.C745 EC 05000>MOV DWORD PTR SS:,5
0040FA2B|.C745 F0 06000>MOV DWORD PTR SS:,6
0040FA32|.C745 F4 07000>MOV DWORD PTR SS:,7
0040FA39|.C745 F8 08000>MOV DWORD PTR SS:,8
0040FA40|.C745 FC 09000>MOV DWORD PTR SS:,9 //**数组初始化
0040FA47|.8D45 DC LEA EAX,DWORD PTR SS:
0040FA4A|.8945 D0 MOV DWORD PTR SS:,EAX
0040FA4D|.8D4D E8 LEA ECX,DWORD PTR SS:
0040FA50|.894D D4 MOV DWORD PTR SS:,ECX
0040FA53|.8D55 F4 LEA EDX,DWORD PTR SS: //指针数组初始化,lea拿到地址就放入指针数组堆栈中,都是每个子数组的首地址
0040FA56|.8955 D8 MOV DWORD PTR SS:,EDX
0040FA59|.8D45 DC LEA EAX,DWORD PTR SS:
0040FA5C|.8945 CC MOV DWORD PTR SS:,EAX //将**数组的首地址放入p指针变量里
0040FA5F|.C745 C8 00000>MOV DWORD PTR SS:,0 //此堆栈充当的是计数器
0040FA66|.EB 09 JMP SHORT NO318.0040FA71 //无条件跳转
0040FA68|>8B4D C8 /MOV ECX,DWORD PTR SS:
0040FA6B|.83C1 01 |ADD ECX,1
0040FA6E|.894D C8 |MOV DWORD PTR SS:,ECX
0040FA71|>837D C8 03 CMP DWORD PTR SS:,3 //进入比较
0040FA75|.7D 41 |JGE SHORT NO318.0040FAB8 //当不小于3的时候跳转
0040FA77|.8B55 C8 |MOV EDX,DWORD PTR SS: //拿到计数器 也就相当于i的值
0040FA7A|.6BD2 0C |IMUL EDX,EDX,0C //进行乘法指令
0040FA7D|.8D4415 DC |LEA EAX,DWORD PTR SS: //拿到子数组的首地址
0040FA81|.8B4D C8 |MOV ECX,DWORD PTR SS: //看看是子数组的第几个元素
0040FA84|.8B1488 |MOV EDX,DWORD PTR DS: //根据首地址(EAX)+偏移地址(ECX*4)=元素地址,在根据相对基址加变址,拿数据
0040FA87|.52 |PUSH EDX ; /<%d>
0040FA88|.8B45 C8 |MOV EAX,DWORD PTR SS: ; |
0040FA8B|.6BC0 0C |IMUL EAX,EAX,0C ; |
0040FA8E|.8B4C05 DC |MOV ECX,DWORD PTR SS: ; |
0040FA92|.51 |PUSH ECX ; |<%d>
0040FA93|.8B55 C8 |MOV EDX,DWORD PTR SS: ; |
0040FA96|.6BD2 0C |IMUL EDX,EDX,0C ; |
0040FA99|.8D4415 DC |LEA EAX,DWORD PTR SS: ; |
0040FA9D|.B9 02000000 |MOV ECX,2 ; |
0040FAA2|.2B4D C8 |SUB ECX,DWORD PTR SS: ; |
0040FAA5|.8B1488 |MOV EDX,DWORD PTR DS: ; |
0040FAA8|.52 |PUSH EDX ; |<%d>
0040FAA9|.68 1C504200 |PUSH OFFSET NO318.??_C@_09CDGI@?$CFd?0?>; |format = "%d,%d,%d
"
0040FAAE|.E8 5D16FFFF |CALL NO318.printf ; \printf
0040FAB3|.83C4 10 |ADD ESP,10
0040FAB6|.^ EB B0 \JMP SHORT NO318.0040FA68
0040FAB8|>C745 C8 00000>MOV DWORD PTR SS:,0
0040FABF|.EB 09 JMP SHORT NO318.0040FACA
0040FAC1|>8B45 C8 /MOV EAX,DWORD PTR SS:
0040FAC4|.83C0 01 |ADD EAX,1
0040FAC7|.8945 C8 |MOV DWORD PTR SS:,EAX
0040FACA|>837D C8 03 CMP DWORD PTR SS:,3
0040FACE|.7D 2D |JGE SHORT NO318.0040FAFD
0040FAD0|.8B4D C8 |MOV ECX,DWORD PTR SS:
0040FAD3|.8B55 CC |MOV EDX,DWORD PTR SS:
0040FAD6|.8B048A |MOV EAX,DWORD PTR DS:
0040FAD9|.50 |PUSH EAX ; /<%d>
0040FADA|.8B4D C8 |MOV ECX,DWORD PTR SS: ; |
0040FADD|.8B55 CC |MOV EDX,DWORD PTR SS: ; |
0040FAE0|.8B048A |MOV EAX,DWORD PTR DS: ; |
0040FAE3|.50 |PUSH EAX ; |<%d>
0040FAE4|.8B4D C8 |MOV ECX,DWORD PTR SS: ; |
0040FAE7|.8B548D D0 |MOV EDX,DWORD PTR SS: ; |
0040FAEB|.8B02 |MOV EAX,DWORD PTR DS: ; |
0040FAED|.50 |PUSH EAX ; |<%d>
0040FAEE|.68 1C504200 |PUSH OFFSET NO318.??_C@_09CDGI@?$CFd?0?>; |format = "%d,%d,%d
"
0040FAF3|.E8 1816FFFF |CALL NO318.printf ; \printf
0040FAF8|.83C4 10 |ADD ESP,10
0040FAFB|.^ EB C4 \JMP SHORT NO318.0040FAC1
0040FAFD|>5F POP EDI
0040FAFE|.5E POP ESI
0040FAFF|.5B POP EBX
0040FB00|.83C4 78 ADD ESP,78
0040FB03|.3BEC CMP EBP,ESP
0040FB05|.E8 E616FFFF CALL NO318.__chkesp
0040FB0A|.8BE5 MOV ESP,EBP
0040FB0C|.5D POP EBP
0040FB0D\.C3 RETN
//我只做了一部分讲解,其实别的细细分析也会出来的!!
Knuth学徒
发表于 2011-2-8 22:30:10
科锐交流?……听起来不错哦