20144303 半周學習總結
乙個處理器支援的指令和指令的位元組級編碼稱為它的指令集體系結構(isa),不同的處理器家族有不同的isa。
現代處理器的工作方式可能跟isa隱含的計算模型大相徑庭。isa模型看上去應該是順序指令執行,然而,與乙個時刻只執行一條指令相比,通過同時處理多條指令的不同部分,能提高處理器的效能。
hcl:硬體控制語言
1、y86指令集:
2、指令編碼:
每條指令的第乙個位元組表示指令的型別。這個位元組分為兩個部分,每部分4位。高4位是**部分,第4位是功能部分。
功能值只有在一組相關指令共用乙個**時才有用。
y86指令集的功能碼:
所有整數採用小端法編碼。當指令按照反彙編格式書寫時,這些位元組就以相反的順序出現。
指令集的乙個重要性質就是位元組編碼必須有唯一的解釋。
3、y86異常:
在更完整的設計中,處理器就會經常呼叫乙個異常處理程式,這個過程被指定用來處理遇到的某種型別的異常。異常處理程式可以被配置成不同的結果。
建立y86唯一的工具就是彙編器。
yis(指令集模擬器),它的目的是模擬y86機器**程式的執行,而不用試圖去模擬任何具體處理器實現的行為。
4、y86指令的詳情
pushl指令會把棧指標減4,並且講乙個暫存器值寫入儲存器中。因此,執行pushl的時候,處理器的行為是不確定的,因為要入棧的暫存器會被同一條指令修改。通常有兩種約定:
壓入%esp的原始值
壓入減去4的%esp的值
1、邏輯門
邏輯門是數位電路的基本計算元素。他們產生的輸出,等於他們輸入位值的某個布林函式。
and &&
or ||
not !
邏輯門符號與c語言符號不同,是因為邏輯門只對單個位的數進行操作,而不是整個字。
邏輯門總是活動的。一旦乙個門的輸入變化了,在很短時間內,輸出就會相應的發生變化。
將很多的邏輯門組合成乙個網,就能構建計算塊,稱為組合電路。構建這些網有兩條限制:
hcl表示式和c語言中表示式的區別:
2、字級的組合電路和hcl整數表示式
執行字級計算的組合電路根據輸入字的各個位,用邏輯門來計算輸出字的各個位。
在hcl中,我們將所有字級的訊號都宣告為int,不指定字的大小
在hcl中,多路復用函式是用情況表示式來描述的。每種情況i都有乙個布林表示式select和乙個整數表示式expr。前者表示什麼時候該選擇這種情況,後者表示得到的值
算術/邏輯單元(alu)是一種很重要的組合電路。這個電路有3個輸入:標號為a和b的兩個資料輸入,以及乙個控制輸入。
3、儲存器和週期:
時鐘暫存器:簡稱暫存器。儲存單個位或字。時鐘訊號控制暫存器載入輸入值
暫存器檔案有兩個讀埠(a和b),還有乙個寫埠w。這樣乙個多埠隨機訪問儲存器允許同時進行多個讀和寫的操作。每個埠都有乙個位址輸入,表明該選擇哪個程式暫存器。
4.1:
這道題是要把指令序列轉換成位元組編碼。做法就是先根據圖4-2找出每個指令對應的位元組編碼,然後按照其格式和規定,參照圖4-3中功能碼和4-4中暫存器名字對應的數字,完成每行指令的轉換。
比如:第2行的 irmovl $15,%ebx
先看irmovl對應的格式,應該是30frbv,所以,只要知道rb和v對應的位元組編碼即可,根據圖4-4查得%ebx是3,v對應$15。這裡要注意的就是在把15轉換成16進製制數的時候,先把它寫成16進製制數,然後在前面補0,補成4位元組的數。所以$15就是0000000f,然後再採用小頂端法,把位元組以相反的順序出現,就是0f000000。
所以,第二行命令對應的位元組編碼就是30f30f000000.
這樣算出來第二行的指令需要6個位元組,起始位址位0x100,所以到第三行對應的位址就是0x106。用這種方法類推,第四行的位址是0x108。同樣使用小頂端法,所以最後一行jmp loop的位元組編碼就是7007010000.
4.2:
這道題和4.1相當於是反過程,根據位元組編碼來判斷命令。
以a為例:先看第乙個數字,是3,所以就應該是irmovl v,rb這一型別。對應可知rb是%ebx,v的16進製制數表示是fcffffff,轉換成10進製是-4。所以,這段位元組編碼對應的指令是irmovl $-4,%ebx。
用這種方法類推,可以發現c中的f0和e中的a0f0是不合法值。
4.5:
這道題沒看懂。
問題1:第四行指令,mrmovl 8(%ebp),%ecx和第五行指令,mrmovl 12(%ebp),%edx。這兩行**中的8、12分別指的是什麼?
有同學告訴我是因為int *start佔8個位元組,int count佔4個位元組,不知道是不是這個原因?
問題2:loop部分的**。為什麼$4,%ebx指的是start++?
問題3:(已經解決)一開始覺得已經有了count這個計數的引數,為什麼還要start?後來詢問同學後明白,start++指的是指標的移動,不是簡單的計數加。
4.6:
不是很理解
4.10:
int middle=[
(a<=c&&a>=b)||(a<=b&&a>=c) : a;
(b<=a&&b>=c)||(b<=c&&b>=a) : b;
1: c;
]
不知道有沒有問題? 第六周周總結
這一周,不管是生活上的還是學習上的,亦或是工作上的,都異常的忙碌,忙碌到心態會有些崩潰的地步,可能是性格原因,不願意說放棄就放棄,所以還是希望可以完成自己該做的,想做的事情。堅持不是一件容易的事情,可怕的是你都不知道自己的堅持到底對不對,不管正確與否,我都選擇,做下去。像長跑,原以為自己肯定跑不動,...
第六周周總結
在第六周中是忙碌的,對於高數,上課的內容也在快速的翻篇,我的大腦也在快速的運轉著,講概念的時候我很難理解過來,但是講習題的時候勉勉強強能聽的懂,每次在聽不懂的地方我都會打個問號,以便於自己下課後方便問同學,我覺得這也是初中以來養成的乙個好習慣吧,數學的作業真的太傷腦細胞了,往往要思考很久才能做出一題...
第六周學習筆記
課程位址 第十七講,離散與維數災難 主要內容 值得注意的地方 1.未知的psa p ps a 和r rr 即便我們能夠通過值迭代或策略迭代來解決mdp問題,但對於一些實際問題,我們不知道p pp和r rr的具體值,這時我們可以通過取樣,在尋找策略的過程中同時模擬出真實的模型 第十八講,線性二次型調節...