av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

解讀C++編譯器編譯功能

下面深度講解C++中的大規(guī)模C++編譯器,C++編譯器具有很強的復(fù)雜性,并且源程序的行數(shù)也是非常多,所以,在進(jìn)行C++編譯器編譯時,一定要定一個計劃表,這樣才能更好的對C++編譯器進(jìn)行操作。

員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)堅持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因為“專注所以專業(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),成都小程序開發(fā),軟件按需策劃等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

接著再跟著編譯運行的主線來分析它的源程序。下面先看一下簡單的C++例子,如下:

 
 
 
  1. #001 #include  
  2. #002   
  3. #003 int main(void)  
  4. #004 {  
  5. #005  int nTest1 = 1;  
  6. #006  int nTest2 = 2;  
  7. #007  int nTest3;  
  8. #008  int i;  
  9. #009    
  10. #010  nTest3 = nTest1 + nTest2;  
  11. #011  printf("nTest3 = %d\r\n",nTest3);  
  12. #012    
  13. #013  for (i = 0; i < 5; i++)  
  14. #014  {  
  15. #015         printf("%d\r\n",nTest3+i);  
  16. #016  }  
  17. #017    
  18. #018  printf(__TIME__" "__DATE__"\r\nhello world\n");  
  19. #019  return 0;  
  20. #020 }  
  21. #021  

上面的程序就是用來說明編譯器工作的例子,它在***行里包含了頭文件stdio.h,由于后面調(diào)用printf函數(shù)輸出顯示到屏幕里。第二行空行,第三行是main函數(shù),它是C程序的入口函數(shù)。在main函數(shù)里,定義了幾個局部變量,分別第5,6,7,8行的變量。第10行作兩個變量nTest1和nTest2的加法,然后賦值給變量nTest3。第11行顯示變量nTest3的值,是用10進(jìn)制輸出顯示。在第13到16行是5次輸出nTest3+i值。在第18行里輸出編譯這個程序的時間和hello world的字符串。
 
C++編譯器的任務(wù),就是把上面的源程序變換到匯編代碼輸出,或者變成其它中間代碼輸出。在這里L(fēng)CC編譯器是輸出匯編代碼的,所以就不介紹其它的中間代碼輸出。那么LCC把上面的源程序變成什么樣的匯編輸出呢?下面就先把它的目標(biāo)代碼看一下,如下:

 
 
 
  1. #001 [global $main]  
  2. #002 [section .text]  
  3. #003 $main:  
  4. #004 push ebx  
  5. #005 push esi  
  6. #006 push edi  
  7. #007 push ebp  
  8. #008 mov ebp, esp  
  9. #009 sub esp, 16  
  10. #010 mov dword [ebp + -12], 1  
  11. #011 mov dword [ebp + -16], 2  
  12. #012 mov edi, dword [ebp + -12]  
  13. #013 mov esi, dword [ebp + -16]  
  14. #014 lea edi, [esi + edi]  
  15. #015 mov dword [ebp + -8], edi  
  16. #016 mov edi, dword [ebp + -8]  
  17. #017 push dword edi  
  18. #018 lea edi, [$L2]  
  19. #019 push dword edi  
  20. #020 call $printf  
  21. #021 add esp, 8  
  22. #022 mov dword [ebp + -4], 0  
  23. #023 $L3:  
  24. #024 mov edi, dword [ebp + -8]  
  25. #025 mov esi, dword [ebp + -4]  
  26. #026 lea edi, [esi + edi]  
  27. #027 push dword edi  
  28. #028 lea edi, [$L7]  
  29. #029 push dword edi  
  30. #030 call $printf  
  31. #031 add esp, 8  
  32. #032 $L4:  
  33. #033 inc dword [ebp + -4]  
  34. #034 cmp dword [ebp + -4], 5  
  35. #035 jl near $L3  
  36. #036 lea edi, [$L8]  
  37. #037 push dword edi  
  38. #038 call $printf  
  39. #039 add esp, 4  
  40. #040 mov eax, 0  
  41. #041 $L1:  
  42. #042 mov esp, ebp  
  43. #043 pop ebp  
  44. #044 pop edi  
  45. #045 pop esi  
  46. #046 pop ebx  
  47. #047 ret  
  48. #048 [extern $printf]  
  49. #049 [section .data]  
  50. #050 times ($-$$) & 0 nop  
  51. #051 $L8:  
  52. #052 db '00:30:28 Apr 07 2007', 13, 10, 'hello world', 10, 0  
  53. #053 times ($-$$) & 0 nop  
  54. #054 $L7:  
  55. #055 db '%d', 13, 10, 0  
  56. #056 times ($-$$) & 0 nop  
  57. #057 $L2:  
  58. #058 db 'nTest3 = %d', 13, 10, 0  
  59. #059  

LCC是可以生成很多目標(biāo)代碼的C++編譯器,在這里主要介紹生成X86的NASM匯編的代碼。上面的匯編代碼就是NASM的匯編格式,可以使用NASM編譯生成目標(biāo)文件,然后再用連接程序生成可執(zhí)行文件。如果不能看懂上面的NASM匯編,就需要去看NASM手冊了,這個手冊在網(wǎng)上有下載。如果想更深入理解匯編生成機(jī)器碼的過程,當(dāng)然也可以深入分析NASM的程序?qū)崿F(xiàn)。

從上面的C++和匯編也可以看出,匯編代碼比C++代碼要復(fù)雜,行數(shù)也比較多,還分了數(shù)據(jù)段和代碼段。所以使用C++編譯器是可以大大地提高生產(chǎn)效率的,并且更容易理解,這樣就容易降低軟件的成本,容易開發(fā)大規(guī)模的軟件工程。


分享標(biāo)題:解讀C++編譯器編譯功能
網(wǎng)頁URL:http://uogjgqi.cn/article/ccoghii.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流