我在 Day2 的文章裡有講到暫存器(e.g. eax, ebx),可能對初學者而言相對陌生。這篇主要來介紹這些暫存器代表的意義與使用時機。
透過下圖可以清楚原因。不難發現,暫存器位在金字塔的最頂端,雖然價格較高昂,但存取的速度可到達1~2ns 。對比我們買電腦的時候最在意的記憶體(Main memory),速度更是快上30~90倍。
Reference
暫存器的出現,目的是為了加速運算。原因是,暫存器可以直接儲存資料元素,如此一來,就不用從記憶體存取資料。因此,透過暫存器,可以讓電腦效能的提升。至於常聽到32位元跟64位元的電腦,差異就在一個使用32位元暫存器,另一個使用64位元暫存器。因此,簡單來說,使用64位元的暫存器效能應當比32位元的更好,因為它一次可以處理倍數的32位元資料量。
主要分三大類:分別是 General registers, Control registers 與 Segment registers
以下介紹 General registers,我們先看圖:
下圖是 General registers 的種類
如何分辨64位元與32位元的暫存器?透過下圖可以發現,最長的區塊是64位元的暫存器,它是 R 開頭。如果遇到是 E 開頭的名稱,就是32位元的暫存器。
RAX 佔64位元,EAX 佔32位元, AX 佔16位元,AH 與 AL 分別佔8位元
分別是 Data registers、Pointer registers、Index registers,今天先說明 Data registers。
分別是 RAX, RBX, RCX, RDX。這4個 registers 主要用在算數、邏輯或其他運算。
暫存器是提升電腦存取速度的主因,因此在組合語言有許多應用場景。明天,會接著說明,組合語言如何找到資料在記憶體中的位置!