c& _Al = _Alloc()) // _Al参数是在 00933FCF 位置压栈的 // _Ilist参数是按值传递,将成员_First和_Last分两次压栈,对应下面4行 00933FE9 mov edx,dword ptr [eax+4] 00933FEC push edx 00933FED mov eax,dword ptr [eax] 00933FEF push eax 00933FF0 lea ecx,[numbers] 00933FF3 call std::vector<int,std::allocator<int> >::vector<int,std::allocator<int> > (0931168h)
for (auto num : numbers)
// std::vector<int,std::allocator<int> >::begin() 结果保存在 dword ptr [ebp-30h] 00933FF8 lea eax,[numbers] 00933FFB mov dword ptr [ebp-24h],eax 00933FFE mov ecx,dword ptr [ebp-24h] 00934001 call std::vector<int,std::allocator<int> >::_Unchecked_begin (09311FEh) 00934006 mov dword ptr [ebp-30h],eax
// std::vector<int,std::allocator<int> >::end() 结果保存在 dword ptr [ebp-3Ch] 00934009 mov ecx,dword ptr [ebp-24h] 0093400C call std::vector<int,std::allocator<int> >::_Unchecked_end (09312C1h) 00934011 mov dword ptr [ebp-3Ch],eax
// 跳转 for 循环的条件比较 00934014 jmp main+0BFh (093401Fh)
// 迭代器加1 00934016 mov eax,dword ptr [ebp-30h] 00934019 add eax,4 0093401C mov dword ptr [ebp-30h],eax
// eax = dword ptr [ebp-30h] // eax 和 vector::end() 比较,如果相等则跳出循环 0093401F mov eax,dword ptr [ebp-30h] 00934022 cmp eax,dword ptr [ebp-3Ch] 00934025 je main+0E2h (0934042h)
// 将 dword ptr [ebp-30h] 迭代器指向的整形数值取出来,放到 dword ptr [ebp-48h] 00934027 mov eax,dword ptr [ebp-30h] 0093402A mov ecx,dword ptr [eax] 0093402C mov dword ptr [ebp-48h],ecx { printf( "num = %d\n", num );
// 从 dword ptr [ebp-48h] 取出整形数值,压栈 // 将 "num = %d\n" 压栈 // 调用 printf 0093402F mov eax,dword ptr [ebp-48h] 00934032 push &n |