設計一個簡易的處理器(1)--定義指令集體系結構(ISA)
處理器的主要作用就是執行指令,那麼設計處理器的第一步就是要定義或者相容指令集體系結構(Instruction Set Architecture,ISA). 定義一個指令集體系結構,包括定義各種狀態元素,指令集及編碼,一組程式設計規範和異常事件處理.
傳統的指令集的設計理念主要分為CISC和RISC兩種設計理念.現代處理器比如IA32體系結構的指令集,已經不是單純的CISC,設計時候已經結合了RISC的精華.
本文介紹的Y86 ISA是IA32的一個簡化版本(子集),操作集較少,定址方式較少. (注*)
程式設計師的可見的狀態
————
Y86的每條指令都會讀取或修改處理器狀態的某些部分,稱為程式設計師可見狀態.如圖1所示.
![](https://i.iter01.com/images/779ca4cd012aa56a7bfb0377fab87c029d6324f30009d944635348d355ebb1a6.png)
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(可以功能擴充套件).
![](https://i.iter01.com/images/b46c712fbae8616b4054ffec558c135f940b45bd94b464977873b29cf7a1f771.png)
暫存器編碼
——
為了方便,每個程式暫存器使用4位編碼,其中F表示無暫存器.
![](https://i.iter01.com/images/55bd135c589c5d1c3071170b5e8c5eecda72ec10cad0bf3f74fc1b5bcaaa037e.png)
狀態碼和異常
————
狀態碼(Stat)是程式設計師可見的狀態之一,用來描述程式執行的總體狀態.詳見圖5.
![](https://i.iter01.com/images/daadff8f9823696fcbc933d784a3c493401b8aaba0eaa97f45c01f115bf22c8e.png)
一個適用的處理器,當處理器遇到異常,會呼叫一個異常處理程式.在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計算機
- (計算機體系結構)MIPS指令集結構計算機
- 指令集體系結構_計算機體系結構:指令程式碼計算機
- 處理器指令集架構的位數架構
- Runtime中的 isa 結構體結構體
- 《奔跑吧 Linux核心》之處理器體系結構Linux
- 計算機處理器結構計算機
- 一個簡易的渲染迴圈結構
- 分享一個無需定義結構體解析json的包結構體JSON
- 設計一個全域性異常處理器
- FPGA數字訊號處理(24)數字相關器設計(簡化結構)FPGA
- 處理器核、Core、處理器、CPU區別&&指令集架構與微架構的區別&&32位與64位指令集架構說明架構
- 如何定義一個自帶資料區的結構體:三種資料結構體的比較結構體資料結構
- 一個不用定時器簡易51呼吸燈定時器
- 躲過了ysyx沒躲過學校計算機體系結構課程設計risc-v處理器計算機
- 處理器、指令集架構和作業系統——32-bit與64-bit架構作業系統
- 使用QT做一個簡易計算器QT
- 計算機系統5-> 計組與體系結構2 | MIPS指令集(上)| 指令系統計算機
- 一個簡易郵件群發軟體設計與實現
- 黑馬程式設計師匠心之作|C++教程從0到1入門程式設計--結構體定義和使用程式設計師C++結構體
- Laravel深入學習6 – 應用體系結構:解耦事件處理器Laravel解耦事件
- LoongArch@微處理器體系結構專利技術研究方法@20241002
- 簡單設計一個onedata指標管理體系指標
- API的設計(1) - 錯誤處理API
- 編寫一個簡易計時器程式(edu)
- 前端 JavaScript 實現一個簡易計算器前端JavaScript
- 指令集結構
- 計算機體系結構 - 作業1計算機
- 計算機系統6-> 計組與體系結構3 | MIPS指令集(中)| MIPS彙編指令與機器表示計算機
- 1、JVM體系結構JVM
- 【PG體系結構】PG體系結構簡單說明
- 設計一個簡單的devops系統dev
- 程式設計體系結構(02):Java異常體系程式設計Java
- 第二章 處理器結構
- 機器視覺系統設計的基本結構視覺
- Intel 8086微處理器暫存器結構Intel
- 2_指令集、體系架構、微架構架構
- 程式設計體系結構(09):分散式系統架構程式設計分散式架構
- Sqlserver儲存引擎體系結構簡介_Part1SQLServer儲存引擎