[C++基础]011_#define的代码生成的汇编码在哪里

现在有一段源码:

1 #include <iostream>
 2 using namespace std;
 3 
 4 #define  DefFunc  cout<<"Hello, Define function."<<endl;\
 5     cout<<"This is a defined function"<<endl;
 6 
 7 int main(){
 8     DefFunc
 9     DefFunc
10     DefFunc
11     system("pause");
12     return 0;
13 }

如书中所说,通过查看汇编码,我们可以看到宏定义的函数被完全的嵌入进main函数了,如下:

DefFunc
00BA14C6  mov         esi,esp  
00BA14C8  mov         eax,dword ptr [__imp_std::endl (0BAA314h)]  
00BA14CD  push        eax  
00BA14CE  push        offset string "Hello, Define function." (0BA7858h)  
00BA14D3  mov         ecx,dword ptr [__imp_std::cout (0BAA318h)]  
00BA14D9  push        ecx  
00BA14DA  call        std::operator<<<std::char_traits<char> > (0BA1145h)  
00BA14DF  add         esp,8  
00BA14E2  mov         ecx,eax  
00BA14E4  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0BAA300h)]  
00BA14EA  cmp         esi,esp  
00BA14EC  call        @ILT+400(__RTC_CheckEsp) (0BA1195h)  
00BA14F1  mov         esi,esp  
00BA14F3  mov         eax,dword ptr [__imp_std::endl (0BAA314h)]  
00BA14F8  push        eax  
00BA14F9  push        offset string "This is a defined function" (0BA7838h)  
00BA14FE  mov         ecx,dword ptr [__imp_std::cout (0BAA318h)]  
00BA1504  push        ecx  
00BA1505  call        std::operator<<<std::char_traits<char> > (0BA1145h)  
00BA150A  add         esp,8  
00BA150D  mov         ecx,eax  
00BA150F  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0BAA300h)]  
00BA1515  cmp         esi,esp  
00BA1517  call        @ILT+400(__RTC_CheckEsp) (0BA1195h)  
    DefFunc
00BA151C  mov         esi,esp  
00BA151E  mov         eax,dword ptr [__imp_std::endl (0BAA314h)]  
00BA1523  push        eax  
00BA1524  push        offset string "Hello, Define function." (0BA7858h)  
00BA1529  mov         ecx,dword ptr [__imp_std::cout (0BAA318h)]  
00BA152F  push        ecx  
00BA1530  call        std::operator<<<std::char_traits<char> > (0BA1145h)  
00BA1535  add         esp,8  
00BA1538  mov         ecx,eax  
00BA153A  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0BAA300h)]  
00BA1540  cmp         esi,esp  
00BA1542  call        @ILT+400(__RTC_CheckEsp) (0BA1195h)  
00BA1547  mov         esi,esp  
00BA1549  mov         eax,dword ptr [__imp_std::endl (0BAA314h)]  
00BA154E  push        eax  
00BA154F  push        offset string "This is a defined function" (0BA7838h)  
00BA1554  mov         ecx,dword ptr [__imp_std::cout (0BAA318h)]  
00BA155A  push        ecx  
00BA155B  call        std::operator<<<std::char_traits<char> > (0BA1145h)  
00BA1560  add         esp,8  
00BA1563  mov         ecx,eax  
00BA1565  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0BAA300h)]  
00BA156B  cmp         esi,esp  
00BA156D  call        @ILT+400(__RTC_CheckEsp) (0BA1195h)  
    DefFunc
00BA1572  mov         esi,esp  
00BA1574  mov         eax,dword ptr [__imp_std::endl (0BAA314h)]  
00BA1579  push        eax  
00BA157A  push        offset string "Hello, Define function." (0BA7858h)  
00BA157F  mov         ecx,dword ptr [__imp_std::cout (0BAA318h)]  
00BA1585  push        ecx  
00BA1586  call        std::operator<<<std::char_traits<char> > (0BA1145h)  
00BA158B  add         esp,8  
00BA158E  mov         ecx,eax  
00BA1590  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0BAA300h)]  
00BA1596  cmp         esi,esp  
00BA1598  call        @ILT+400(__RTC_CheckEsp) (0BA1195h)  
00BA159D  mov         esi,esp  
00BA159F  mov         eax,dword ptr [__imp_std::endl (0BAA314h)]  
00BA15A4  push        eax  
00BA15A5  push        offset string "This is a defined function" (0BA7838h)  
00BA15AA  mov         ecx,dword ptr [__imp_std::cout (0BAA318h)]  
00BA15B0  push        ecx  
00BA15B1  call        std::operator<<<std::char_traits<char> > (0BA1145h)  
00BA15B6  add         esp,8  
00BA15B9  mov         ecx,eax  
00BA15BB  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0BAA300h)]  
00BA15C1  cmp         esi,esp  
00BA15C3  call        @ILT+400(__RTC_CheckEsp) (0BA1195h)  
    system("pause");


原文链接: https://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/09/2717602.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/65230

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午11:44
下一篇 2023年2月9日 上午11:44

相关推荐