本週咱們瞭解了Y86-64指令體系結構,並在此基礎上了解了硬件控制語言HCL。Y86-64是《深刻理解計算機系統》這本書的做者出的指令集,目的是爲了讓咱們更加清楚地瞭解ISA,該指令集的指令基本都是從x86而來。如下是對本章內容的總結:html
y86-64指令的指令編碼長度爲一字節到十字節,由三大部分(一個字節的指令指示符,一個字節的寄存器指示符,一個八字節的當即數),五小部分組成。編碼的第一個字節的前半部分表示指令的種類,後半部分表示功能碼(用來區別具體指令,好比肯定分支類型),寄存器指示符的前半部分以及後半部分分別表示一個寄存器,當沒有使用寄存器時使用十六進制數的F代替。根據指令的不一樣能夠選擇不一樣的指示符以及編碼長度來表示,例如jxx dest
能夠用六進制編碼7 Fn DEST
表示(Fn表示分支類型)。程序員
HCL的狀況表達式的通用格式爲:x=[ selct1 :expr1 ; select2 :expr2;];
,而在實際使用的過程當中,常常須要在判斷條件中使用集合關係,好比:bool s1=code in{2,3};bool s0=code in{1,3};
在邏輯設計過程當中,多個邏輯門的組合具備如下限制條件:安全
爲了使處理器充分利用硬件,處理器工做分爲六階段:
一、取指(地址爲PC的值,從內存中取指令,同時給valc和valp賦值)
二、譯碼(從寄存器文件讀入兩個操做數valA與valB,即從寄存器中讀出值)
三、執行(ALU將計算內存的有效地址或修改棧指針,計算結果爲valE)
四、訪存(將數據讀出或寫入內存,記做valM)
五、寫回(將最多兩個結果寫入寄存器文件,即對寄存器的值進行修改)
六、更新(將PC設置爲下一條指令的地址)
其中,全部指令都要進行取指、執行以及更新PC的過程,irmovq指、JXX指令不通過譯碼階段,OPQ、rrmovq、irmovq以及JXX指令不通過訪存階段,rmmovq、JXX指令不通過寫回的階段。學習
其中須要注意的是:編碼
y86-64是基於x86-64指令集而來,教材學習過程當中並無碰到問題。.net
本週主要是理論內容,代碼量不大,運行過程當中並無碰到問題。設計
問題一:
問題一解析:enter等價於pushq %rbp movq %rsp, %rbp
問題二:
問題二解析:內存之間不能直接mov,要用寄存器中轉。b,w,l,q表示的長度要和寄存器匹配
問題三:
問題三解析:X86-64中虛擬地址的數量目前是2^48個,在目前的實現中,這些地址的高16位必須設置爲0,因此一個地址實際上可以指定的是2^48或64TB範圍內的一個字節。指針
本章內容是由x86-64的指令集發展而來,並幫助咱們理解處理器工做的過程,自己內容並不複雜,可是編碼等內容較爲繁瑣,須要記憶指令以及寄存器對應的編碼,並理解順序實現過程當中不一樣的命令在各步驟所進行的操做。本章內容是爲了讓咱們更加清楚地瞭解ISA,瞭解CPU處理器的工做流程,有助於咱們更好地瞭解計算機系統。調試
博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | ||
---|---|---|---|---|
目標 | 30篇 | 400小時 | ||
第三週 | 1/1 | 13/13 | ||
第四周 | 1/2 | 22/35 | ||
第五週 | 1/3 | 30/65 | ||
第六週 | 1/4 | 25/90 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。 耗時估計的公式 :Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。code