初次接觸mooc課堂,裡面有個很牛x的老師教linux,恰好自己有興趣學,顧有了此系列學習博文。
第一講 計算機是如何工作的
學習linux,涉及到了c語言和彙編以及作業系統的知識,顧第一講要講講彙編的知識,c和作業系統知識自行複習。以下知識都是at&t彙編的知識,可能與intel彙編有些不同。
知識一:
知識二:
有這些知識差不多就能看懂彙編了。現在給乙個簡單的c程式,main.c,然後讓它編譯成匯程式設計序,得到main.s。
實驗執行環境:實驗樓64位linux虛擬機器
1int g(intx)2編譯命令為:gcc –s –o main.s main.c -m32 (其中-m32是將**編譯為32位的意思,因為該命令是在實驗樓64位linux虛擬機器環境下使用的,32位linux環境可能會稍有不同)。56int f(intx)7
1011
int main(void)12
以下是main.s**,共25行。需要說明的是,編譯後會出現很多以「.」開頭的語句,這些都是起連線作用的,實際上是不執行的語句,顧可以把它們刪除,得到純淨的彙編**,如下:
接下來就是分析了。
從main函式開始。
18行,將%ebp壓棧(其中%esp的值會自動減4,因為pushl操作等價於2行**,可參考知識二);
19行,將%esp的值給%ebp,形成棧中棧的結構。(其中18,19行**就是enter操作)
20行,21行,就相當於將888入棧。
22行,呼叫f()函式,首先將%eip入棧,然後將f()的位址賦值給%eip(說明:%eip所指的值為下一條**執行的位址,所以將f()函式的位址給%eip,那下一次就會執行f()函式)。
18行--22行中的棧的內容的變化如下圖
後續**的棧變化類似,入棧、出棧、入棧、出棧……在此就不多加累贅了。
總結:對於計算機是如何工作的,首先是將高階語言轉換成組合語言,接著將組合語言理解成入棧、出棧操作。整個計算機的工作就是由不斷的入棧,不斷的出棧,外加一些簡單的加減等操作所構成的。
註明:部落格署名:***
linux學習一《計算機概論》
1 cpu的頻率 指cpu每秒鐘可以進行的工作次數。2 cpu的外頻和倍頻 外頻指cpu和外部元件進行資料傳輸 運算時的速度,倍頻指cpu內部用來加速工作效能的乙個倍數,兩者相乘才是cpu的頻率!3 南橋北橋 北橋負責連線速度較快的cpu 記憶體和顯示卡等元件,南橋負責連線比較慢的周邊介面,如硬碟 ...
一 計算機概覽
一 計算機概覽 阿蘭 麥席森 圖靈 alan mathison turing 6月23日生於英國倫敦。是英國著名的數學家和邏輯學家,被稱為電腦科學之父 人工智慧之父,是計算機邏輯的奠基者,提出了 圖靈機 和 圖靈測試 等重要概念,人們為紀念其在計算機領域的卓越貢獻而設立 圖靈獎 1 計算機五大組成部...
一 計算機系統漫遊
可執行目標檔案,可載入到記憶體中 匯流排 連線系統各部分傳遞資訊 定長位元組塊,即 字 的電子管道 i o裝置 通過控制器或介面卡與i o匯流排相連 主存 臨時儲存,存放程式和資料,乙個線性的位元組陣列 處理器 處理指令集 os主要功能 1.防止硬體被失控的應用程式濫用 2.為應用程式提供簡單一致的...