成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

編程語言的巔峰境界

開發 后端
“哇塞,怎么可能這么簡單!”當C語言老頭兒還是小伙子的時候,第一次見到了匯編,發出了這么一聲感慨。在C語言看來,這匯編的指令實在是太簡單了,簡單到了令人發指的地步。

“哇塞,怎么可能這么簡單!”

當C語言老頭兒還是小伙子的時候,***次見到了匯編,發出了這么一聲感慨。

在C語言看來,這匯編的指令實在是太簡單了,簡單到了令人發指的地步,只有這么幾類指令:

數據傳輸類:

  • 就是把數據從一個位置復制到另外一個位置,比如從內存到寄存器,或者從寄存器到內存, 或者從寄存器到寄存器。

算術和邏輯運算類:

  • 無非就是加減乘除,AND, OR, 左移,右移

控制類:

  • 比較兩個值,跳轉到某一個位置。

匯編老頭兒非常地驕傲, 他經常囂張地說:“別看我的指令這么簡單,但是配合我的寄存器和內存, 卻能完成你們這些所謂的高級語言的所有功能!”

這寄存器是什么鬼? C語言腦海中只有內存和指針,根本就沒有什么寄存器的概念, 實際上,這是屬于CPU阿甘的,容量有限,但是速度超級快的存儲部件。

 

編程語言的***

32位CPU寄存器
圖片來源: http://pascalturbo.net/cpu-registers/

數組

C看著匯編這單薄的小身板,想到自己那優雅的if , 漂亮的while, for ,還有那極為重要的函數調用,心里不由得泛起嘀咕:我的程序怎么可能被編譯成這么簡單的匯編?

雖然心里有點瞧不上,但C小伙還是挺恭敬的:“前輩,在我這里有個數組的概念,編譯成匯編是什么樣?”

 

  1. int num[10]; 
  2. num[0] = 100; 
  3. num[1] = 200; 

除了機器語言,那就屬匯編最老,連C語言的***個編譯器都是用匯編寫的,當之無愧的前輩。

匯編老頭兒沒想到C小伙兒連這個問題都沒弄清楚,說道:“我這里只認寄存器和內存,你這所謂數組,就是內存的一段連續的空間嘛,我只要知道開始地址就可以了。”

編程語言的***

C小伙兒一看,好家伙,連變量名num都不要了。 不過說得也是, 匯編老頭只要記住初始地址,順著地址就能找到所有東西。

“咦,這個什么0x000083d0不就相當于我的指針么? ”

“是啊,不過在我這里,都是地址,忘掉指針吧!”

條件分支

C小伙又想到了自己的if else,在匯編中該怎么處理?

 

  1. if(x < y ){ 
  2.    return y - x; 
  3. else { 
  4.    return x -y ; 

匯編老頭兒說:“你們這些高級語言啊,就愛搞復雜化,怎么不用goto呢?”

C小伙說:“goto 被迪杰斯特拉認為是有害的,會破壞結構化,不建議使用!”

“唉,簡單就是美,你們這些高級語言懂不了,我這里很簡單,就是比較和跳轉指令,從一個地方跳到另外一個地方執行就行了。”

匯編老頭兒一遍感慨,一遍寫道:

我們假設

  • %eax 寄存器保存的是y的值,
  • %edx 寄存器保存的是x的值。

 

  1.   cmpl %eax, %edx ;  比較x和y 
  2.  
  3.   jge   .L1       ;  如果x >= y,跳轉到.L1處去執行 
  4.  
  5.   subl  %edx,%eax ;  計算y-x,結果存到eax寄存器中 
  6.  
  7.   jmp  .done      ;  跳轉到.done標簽處 
  8.  
  9. .L1: 
  10.  
  11.   subl %eax, %edx ;  計算 x-y 
  12.  
  13.   movl %edx, %eax ; 把結果存到eax寄存器中 
  14.  
  15. .done:            ; 計算結束,結果保存在eax寄存器中 

(碼農翻身注:這個例子來源于《深入理解計算機系統》)

C小伙兒看了半天,終于搞明白了這段匯編程序的含義,這所謂的jge也就是做一個判斷,然后跳轉到特定位置去執行,就像是if 和 goto 的結合。

匯編老頭兒看到C小伙兒懂了, 問道:“你想想你的while 循環,for 循環,是不是if 和 goto 的包裝而已?”

C小伙兒想了一會:“確實是這樣!”

編程語言的***

“這不就結了,我的匯編看起來簡單,但是卻能表達你所有的流程控制語句,不管什么if else, while, for ,switch ,對吧?”

C小伙兒覺得匯編老頭兒說的都是歪理:“這goto是簡單,可是程序讀起來就非常復雜了啊!”

匯編老頭兒說:“你算是說道了點子上,所謂高級語言,主要是方便人類的編寫和閱讀的,是為了提升人類的效率。 在我這里,主要是讓CPU阿甘執行的,那傻小子,速度飛快,什么也不懂,你只要告訴它指令就行,越簡單越好。”

沒想到CPU阿甘聽到了對它的嘲諷,不滿地說:“老伙計,又在背后說我的壞話,我執行了億萬條指令以后,早就悟出了程序的局部性原理,這你懂不懂?”

(碼農翻身注:詳情參見《CPU阿甘》)

函數調用

C小伙看到不能難倒匯編老頭兒,想到了自己可以定義函數,精神一振,問道:“函數調用你怎么處理啊?”

 

  1. int funcA(int a){ 
  2.     ...... 
  3.     funcB(10) 
  4.     ...... 
  5.  
  6. int funcB(int b){ 
  7.     ...... 
  8.     funcC(); 
  9.     ...... 

看看,這funcA調用funcB, funcB又調用funcC,函數嵌套調用,你那簡單的指令能處理? C小伙兒心里暗想。

匯編老頭兒不慌不忙:“你可算是問了一個有價值的問題,不過這也難不倒我,我需要內存配合一下就行了。”

編程語言的***

“看到里邊的棧幀沒有,每個棧幀都表示一個函數的調用!”

“那這棧幀中有什么東西?” C小伙兒問道。

“細節太復雜,給你畫個示意圖看看吧!”

編程語言的***

“不對啊,你這棧幀中有輸入參數,有返回值,可是沒有函數代碼啊?代碼去哪兒了?”

“真是幼稚! 這是運行時在內存中對函數的表達,那代碼肯定是在代碼段啊。” 匯編老頭兒嘲諷道。

代碼段的指令不斷被CPU阿甘執行,遇到函數調用,就建立新的棧幀,函數調用結束,棧幀就會銷毀,廢棄。然后返回上一個棧幀。

C小伙兒意識到自己犯了一個大錯誤,他老是想著代碼的靜態結構,而忽略了運行時的表示。

編程語言的***

他急于挽回面子,趕緊給C++打電話求援:“兄弟,快過來,治一下這個匯編老頭兒!”

C++了解了事情的經過,說道:“兄弟,不行啊,別看我有class, 但是最終我也得變成過程化的程序,翻譯成匯編,和你是一樣一樣的。”

(碼農翻身注: 參見《面向對象圣經》)

“那Python呢, Java 呢?” C小伙兒有點氣急敗壞。

“他們更不行了,是虛擬機中的語言,他們連匯編老頭兒的面兒都見不著,再說那虛擬機也是用你老兄C語言寫的啊!”

C小伙呆住了,可不是,自己是很多系統級軟件和編程語言的基礎,已經非常貼近硬件了,自己治不了匯編老頭兒,別人肯定也不行啊。

C小伙兒又想到了應用層那復雜的業務邏輯,他們都是由Python,Java, JavaScript等高級語言編寫的,還用到了什么OOD,設計模式,函數式,響應式編程...... 但是它們都是一層層的抽象,幫助程序員更好地編寫程序,在***層,還是匯編啊。

他嘆了一口氣,對匯編老頭說:“前輩,我服了,您可真是編程語言的***啊。”

“不敢當,還有一個語言比我更厲害!”

“是誰?”

“機器語言! 只有0和1!不信你看看這程序員專屬的鍵盤。”

編程語言的***

責任編輯:未麗燕 來源: 碼農翻身
相關推薦

2013-01-06 01:58:00

編程語言排行

2013-12-18 13:26:24

多核編程

2012-09-11 09:55:26

編程HTML5編程能力

2022-07-27 16:40:25

C語言

2010-11-24 09:15:44

編程

2013-01-07 13:21:40

IT技術周刊

2025-01-02 14:10:41

2021-06-10 10:28:21

PythonC語言指數

2021-06-10 05:51:38

編程語言PythonC語言

2024-06-19 08:49:48

2018-08-16 15:11:47

Code ReviewPPT代碼

2023-09-06 12:11:21

ChatGPT語言模型

2023-05-29 19:31:00

PythonBashShell

2012-09-28 13:23:43

編程語言語言進化程序員

2010-03-19 09:39:17

Python編程語言

2023-09-22 22:43:26

eval()Python

2021-05-28 05:34:06

Golang語言編程

2021-01-13 10:40:42

編程語言PLCGraph

2020-10-13 06:34:15

編程語言IDE

2021-08-10 19:15:17

語言編程應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级网站 | 日韩精品一区二区久久 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 国产欧美一区二区三区日本久久久 | 国产精品永久免费观看 | 狠狠干av| 午夜网| 一区二区国产精品 | 国产精品亚洲欧美日韩一区在线 | 69视频在线播放 | 91久久夜色精品国产网站 | 国产精品免费小视频 | 99精品久久| 日韩视频一区 | 国产高清一区二区三区 | 嫩草一区二区三区 | 日日碰碰 | 日本欧美国产在线 | 国产精品一区二区av | 成年人精品视频 | 欧美日韩精品 | 国产成人精品午夜视频免费 | 国产1区2区在线观看 | 亚洲一区二区三区视频 | 久久狠狠 | 日韩免费在线观看视频 | 日批的视频 | 亚洲最新在线视频 | 夜夜精品视频 | 日日夜精品视频 | 久久久国产一区二区三区 | 特级毛片爽www免费版 | 国产成人精品免高潮在线观看 | 婷婷综合激情 | 久久精品 | 亚洲精品9999 | 国产精品久久久久久久久久尿 | 国产精品久久久久久模特 | 色天堂影院 | 午夜电影在线播放 | 在线播放一区二区三区 |