天天看點

Linux彙編教程01: 基本知識

  在我們開始學習linux彙編之前,需要簡單的了解一下計算機的體系結構。我們不需要特别深入的了解,了解了一些基本概念對與我們了解程式會很有幫助。現在計算機的結構體系都是采用馮諾依曼體系結構的基礎上發展過來的。而馮諾依曼的體系有兩個主要組成部分:cpu和記憶體。而我們的彙編語言和這兩個部分十分密切。

記憶體的結構就像一排連續的房子,或者是一種矩陣。每個空間的大小是固定的,且每一個存儲單元都有自己的位址或者編号。房子的位址是門牌号,而記憶體的每個單元都有自己的位址。

計算機的記憶體有數以萬計的bit組成,每個bit可以儲存0或1的值。但一個bit太小,單獨使用用處不大,是以把8bit作為一個機關,叫做位元組byte。

cpu一次從記憶體中讀取一條指令并執行,前面cpu執行指令的的過程叫做讀取–執行周期或者叫做指令周期。而cpu基本包涵下面的部分:

程式計數器

指令解碼器

資料總線

通用寄存器

算術邏輯單元

程式計數器儲存即将執行的下一條指令的記憶體位址,cpu先檢視程式計數器,擷取指定位址的數字,并把這個資料交由指令解碼器來解釋那個數字所代表的指令。之後,計算機使用資料總線取得存儲在記憶體單元的用于計算的資料。(順便提一下,資料總線是cpu和記憶體之間的實體連線)

當然,作為cpu中的特殊高速存儲單元——寄存器有兩種:通用寄存器和專用寄存器。

通用寄存器是進行主要計算的地方,比如加減乘除和比較等運算。但cpu中的通用寄存器很少,是以隻有當處理是資料才會進入寄存器中,不用時都存儲在主記憶體中。

專用寄存器不好說明,當遇到具體情況在說明。

計算機處理器對資料有多種不同的通路方式,稱為尋址方式。

立即尋址方式 指令本身就包含了通路的資料。比方說,我們要把寄存器初始化為0,那麼可以使用立即尋址方式,把0指派給寄存器,而不是告訴計算機一個值為0的位址

寄存器尋址 通路對象是寄存器,不是記憶體裡的位址,這個好了解。

直接尋址方式 指令中包含要通路的記憶體位址。

變址尋址方式 指令中包含一個通路位址之外,還要指定一個變址寄存器,其中包含該位址的偏移量。比如記憶體位址是2013, 變址寄存器的值是2, 那麼實際通路的位址是2013 + 2 = 2015. 而且還可以指定變址的比例因子,比如我們想要一字(4位元組)通路,那麼比例因子就是4。

間接尋址方式 指令中有一個寄存器,這個寄存器存儲的是一個位址,這個位址隻想我們需要的資料,這個位址被稱為指針。

基址尋址方式 這個方式和間接尋址類似,當加上一個偏移量,将寄存器的值加上這個值,再尋址。

人就像是被蒙着眼推磨的驢子,生活就像一條鞭子;當鞭子抽到你背上時,你就隻能一直往前走,雖然連你也不知道要走到什麼時候為止,便一直這麼堅持着。