設計一個簡易的處理器(1)--定義指令集體系結構(ISA)
處理器的主要作用就是執行指令,那麼設計處理器的第一步就是要定義或者相容指令集體系結構(Instruction Set Architecture,ISA). 定義一個指令集體系結構,包括定義各種狀態元素,指令集及編碼,一組程式設計規範和異常事件處理.
傳統的指令集的設計理念主要分為CISC和RISC兩種設計理念.現代處理器比如IA32體系結構的指令集,已經不是單純的CISC,設計時候已經結合了RISC的精華.
本文介紹的Y86 ISA是IA32的一個簡化版本(子集),操作集較少,定址方式較少. (注*)
程式設計師的可見的狀態
————
Y86的每條指令都會讀取或修改處理器狀態的某些部分,稱為程式設計師可見狀態.如圖1所示.
1.程式暫存器(Program registers): %eax, %ecx, %edx, %ebx, %esi,%edi, %esp和%ebp.都是32位的.
2.條件碼(Condition codes): ZF(零標誌), SF(符號標誌), OF(溢位標誌).用來儲存最近的算術或邏輯指令造成的影響.
3.程式計數器(PC):存放當前正在執行的地址.
4.儲存器(Memory):在程式設計師看來, Y86程式使用虛擬儲存器.
5.狀態碼(State):表明程式執行的總體狀態,它指示正常執行,或者發生某種異常.
指令集
————
圖2是Y86指令集的簡單描述.與IA32的AT&T指令集相似.操作的資料都是4位元組的. 指令編碼長度1-6個位元組不等.
指令的格式大抵是: icode:ifun rA:rB D,具體如下圖所示:
指令分類 |
具體指令 |
說明 |
|||||||||||||||
傳送指令(XXmovl) (4種) |
|
Y86指令的定址方式單一:基址+偏移量. |
|||||||||||||||
算術邏輯指令(opl) (4個) |
addl, subl, andl, xorl |
這4個指令的執行會設定條件碼(CC). |
|||||||||||||||
跳轉指令(jxx) (4個) |
jmp, jle, jl, je, jne, jge, jg |
jmp是無條件跳轉指令,其他是條件跳轉指令 (根據條件碼選擇分支). |
|||||||||||||||
條件傳送指令(cmovXX) (6個) |
cmovle, cmovl, cmove, cmovne, cmovge, cmovg |
根據條件碼選擇是否更新目的暫存器. |
|||||||||||||||
call/ret指令 |
call/ret |
call將返回地址入棧,跳轉目的地址. ret指令從過程呼叫中返回. |
|||||||||||||||
pushl/popl指令 |
pushl/popl |
入棧和出棧操作. |
|||||||||||||||
halt指令 |
halt |
停止執行指令指令.設定Stat位HLT. |
|||||||||||||||
nop指令 |
nop |
|
指令集編碼
————
Y86指令1-6個位元組不等.第一個位元組表明指令的型別,其中高4位是程式碼(code)部分,低4位是功能碼(function). Y86的程式碼值0~0xB.
圖3給出了整數操作,條件傳送和條件傳送指令的具體編碼(第一個位元組),其他指令的功能碼是0(可以功能擴充套件).
暫存器編碼
——
為了方便,每個程式暫存器使用4位編碼,其中F表示無暫存器.
狀態碼和異常
————
狀態碼(Stat)是程式設計師可見的狀態之一,用來描述程式執行的總體狀態.詳見圖5.
一個適用的處理器,當處理器遇到異常,會呼叫一個異常處理程式.在Y86,當遇到異常時,直接讓處理器停止執行指令.
注*:本篇中的圖片均來自本書的官網,詳見http://csapp.cs.cmu.edu/public/figures.html
Copyright© 2011, Randal E. Bryant and David R. O'Hallaron
reference:
(版權所有,轉載時請註明作者和出處-dennis_fan-http://blog.csdn.net/dennis_fan )
相關文章
- 指令集體系結構 - ISA
- 計算機基礎——指令集體系結構ISA計算機
- 指令集體系結構_計算機體系結構:指令程式碼計算機
- 處理器指令集架構的位數架構
- 一個典型的採集伺服器體系結構設計伺服器
- (計算機體系結構)MIPS指令集結構計算機
- 指令集結構與微體系結構
- 一個簡易的渲染迴圈結構
- 一個開源的IoC採集伺服器體系結構設計伺服器
- 計算機處理器結構計算機
- Runtime中的 isa 結構體結構體
- 《奔跑吧 Linux核心》之處理器體系結構Linux
- 設計一個全域性異常處理器
- 分享一個無需定義結構體解析json的包結構體JSON
- JavaScript實現一個簡易的計算器JavaScript
- 一個不用定時器簡易51呼吸燈定時器
- FPGA數字訊號處理(24)數字相關器設計(簡化結構)FPGA
- CPU、指令集、體系結構以及作業系統作業系統
- 處理器核、Core、處理器、CPU區別&&指令集架構與微架構的區別&&32位與64位指令集架構說明架構
- 使用QT做一個簡易計算器QT
- 《計算機系統:系統架構與作業系統的高度整合》——第2章處理器體系結構計算機架構作業系統
- Platform SDK 中控制系統音量的另一個重要結構MIXERLINECONTROLS結構體定義 (轉)Platform結構體
- 如何定義一個自帶資料區的結構體:三種資料結構體的比較結構體資料結構
- 指令集架構、arm核心、SoC、處理器、CPU、GPU等的關係架構GPU
- 前端 JavaScript 實現一個簡易計算器前端JavaScript
- 編寫一個簡易計時器程式(edu)
- JS_實現一個簡易計算器JS
- 一個簡易郵件群發軟體設計與實現
- 簡易 NFS 伺服器設定(zt)NFS伺服器
- JavaScript的錯誤簡易處理JavaScript
- 安全體系結構與七個設計原則
- 躲過了ysyx沒躲過學校計算機體系結構課程設計risc-v處理器計算機
- 體系結構1
- python 的 Tkinter實現一個簡易計算器Python
- 處理器、指令集架構和作業系統——32-bit與64-bit架構作業系統
- iovec結構體定義及使用結構體
- Intel組合語言程式設計學習-第二章 IA-32處理器體系結構-上Intel組合語言程式設計
- 簡單的圖片處理器(設定色相,亮度,飽和度)