四、計算機組成原理——第4章:指令系統

目錄

4.1指令系統

4.1.1指令集體系結構

4.1.2指令的基本格式

1.零地址指令

2.一地址指令

3.二地址指令

4.三地址指令

5.四地址指令

4.1.3定長操作碼指令格式

4.1.4擴展操作碼指令格式

4.1.5指令的操作類型

1.數據傳送

2.算術和邏輯運算

3.移位操作

4.轉移操作

5.輸入輸出操作

4.2指令的尋址方式

4.2.1指令尋址和數據尋址

1.指令尋址

(1)順序尋址

(2)跳躍尋址

2.數據尋址

4.2.2常見的數據尋址方式

1.隱含尋址

2.立即(數)尋址

3.直接尋址

4.間接尋址

5.寄存器尋址

6.寄存器間接尋址

7.相對尋址

8.基址尋址

9.變址尋址

10.堆棧尋址

4.3程序的機器級代碼表示

4.3.1常用匯編指令介紹

1.相關寄存器

2.匯編指令格式

3.常用指令

(1)數據傳送指令

(2)算術和邏輯運算指令

4.3.2選擇語句的機器級表示

4.3.3循環語句的機器級表示

4.3.4過程調用的機器級表示

4.4 CISC和RISC的基本概念

4.4.1復雜指令系統計算機(CISC)

4.4.2精簡指令系統計算機(RISC)

4.4.3CISC和RISC的比較

4.5本章小結



4.1指令系統

4.1.1指令集體系結構

機器指令(簡稱指令)是指示計算機執行某種操作的命令。一臺計算機的所有指令的集合構成該機的指令系統,也稱指令集。指令系統是指令集體系結構(ISA)中最核心的部分,ISA完整定義了軟件和硬件之間的接口,是機器語言或匯編語言程序員所應熟悉的。

ISA規定的內容主要包括:

1)指令格式,指令尋址方式,操作類型,以及每種操作對應的操作數的相應規定。

2)操作數的類型,操作數尋址方式,以及是按大端方式還是按小端方式存放。

3)程序可訪問的寄存器編號、個數和位數,存儲空間的大小和編址方式。

4)指令執行過程的控制方式等,包括程序計數器、條件碼定義等。

ISA規定了機器級程序的格式,機器語言或匯編語言程序員必須對機器的ISA非常熟悉。不過,大多數程序員不會用匯編語言或機器語言編寫程序,通常用高級語言(如C/C++/Java)編寫程序,這樣開發效率更高,也不易出錯。但是,高級語言抽象層太高,隱藏了許多機器級程序的細節,使得高級語言程序員不能很好地利用與機器結構相關的一些優化方法來提升程序的性能。若程序員對ISA和底層硬件實現細節有充分的了解,則可以更好地編制高性能程序。


4.1.2指令的基本格式

一條指令就是機器語言的一個語句,它是一組有意義的二進制代碼。一條指令通常包括操作碼字段和地址碼字段兩部分:

操作碼字段

地址碼字段

其中,操作碼指出該指令應執行什么操作以及具有何種功能。操作碼是識別指令、了解指令功能及區分操作數地址內容等的關鍵信息。例如,指出是算術加運算還是算術減運算,是程序轉移還是返回操作。地址碼給出被操作的信息(指令或數據)的地址,包括參加運算的一個或多個操作數的地址、運算結果的保存地址、程序的轉移地址、被調用子程序的入口地址等。

指令字長是指一條指令所包含的二進制代碼的位數,其取決于操作碼的長度、地址碼的長度和地址碼的個數。指令字長與機器字長沒有固定的關系,它既可以等于機器字長,又可以大于或小于機器字長。通常,把指令長度等于機器字長的指令稱為單字長指令,指令長度等于半個機器字長的指令稱為半字長指令,指令長度等于兩個機器字長的指令稱為雙字長指令。

指令長度的不同會導致取指令時間開銷的不同,單字長指令只需訪存1次就能將指令完整取出;而雙字長指令則需訪存2次才能完整取出,耗費2個存取周期。

在一個指令系統中,若所有指令的長度都是相等的,則稱為定長指令字結構。定字長指令的執行速度快,控制簡單。若各種指令的長度隨指令功能而異,則稱為變長指令字結構。然而,因為主存一般是按字節編址的,所以指令字長通常為字節的整數倍。

根據指令中操作數地址碼的數目的不同,可將指令分成以下幾種格式。

◆根據指令格式及相關編碼條件組合成機器代碼

1.零地址指令

只給出操作碼OP,沒有顯式地址。這種指令有兩種可能:

1)不需要操作數的指令,如空操作指令、停機指令、關中斷指令等。

2)零地址的運算類指令僅用在堆棧計算機中。通常參與運算的兩個操作數隱含地從棧頂和次棧頂彈出,送到運算器進行運算,運算結果再隱含地壓入堆棧。

2.一地址指令

這種指令也有兩種常見的形態,要根據操作碼的含義確定究竟是哪一種。

1)只有目的操作數的單操作數指令,按A?地址讀取操作數,進行OP操作后,結果存回原地址。

指令含義:OP(A?)→A?

如操作碼含義是加1、減1、求反、求補、移位等。

2)隱含約定目的地址的雙操作數指令,按指令地址A?可讀取源操作數,指令可隱含約定另一個操作數由ACC(累加器)提供,運算結果也將存放在ACC中。

指令含義:(ACC)OP(A?)→ACC

◆地址位數與尋址范圍的關系

若指令字長為32位,操作碼占8位,1個地址碼字段占24位,則指令操作數的直接尋址范圍為22?=16M。若地址碼字段均為主存地址,則完成一條一地址指令需要3次訪存(取指令1次,取操作數1次,存結果1次)。

3.二地址指令

指令含義:(A?)OP(A?)→A?

對于常用的算術和邏輯運算指令,往往要求使用兩個操作數,需分別給出目的操作數和源操作數的地址,其中目的操作數地址還用于保存本次的運算結果。若指令字長為32位,操作碼占8位,兩個地址碼字段各占12位,則每個操作數的直接尋址范圍為212=4K。若地址碼字段均為主存地址,則完成一條二地址指令需要4次訪存(取指令1次,取兩個操作數2次,存結果1次)。

4.三地址指令

指令含義:(A?)OP(A?)→A?

若指令字長為32位,操作碼占8位,3個地址碼字段各占8位,則每個操作數的直接尋址范圍為2?=256。若地址碼字段均為主存地址,則完成一條三地址需要4次訪問存儲器(取指令1次,取兩個操作數2次,存結果1次)。

5.四地址指令

指令含義:(A?)OP(A?)→A?,A?=下一條將要執行指令的地址。

若指令字長為32位,操作碼占8位,4個地址碼字段各占6位,則每個操作數的直接尋址范圍為2?=64。若地址碼字段均為主存地址,則完成一條四地址指令需要4次訪存(取指令1次,取兩個操作數2次,存結果1次)。


4.1.3定長操作碼指令格式

命題追定長操作碼的指令條數(2015)

定長操作碼指令在指令字的最高位部分分配固定的若干位(定長)表示操作碼。一般n位操作碼字段的指令系統最大能夠表示2”條指令。定長操作碼對于簡化計算機硬件設計,提高指令譯碼和識別速度很有利。當計算機字長為32位或更長時,這是常規用法。


4.1.4擴展操作碼指令格式

◆擴展操作碼的設計與分析

為了在指令字長有限的前提下仍保持比較豐富的指令種類,可采取可變長度操作碼,即全部指令的操作碼字段的位數不固定,且分散地放在指令字的不同位置上。顯然,這將增加指令譯碼和分析的難度,使控制器的設計復雜化。最常見的變長操作碼方法是擴展操作碼,它使操作碼的長度隨地址碼的減少而增加,不同地址數的指令可具有不同長度的操作碼,從而在滿足需要的前提下,有效地縮短指令字長。圖4.1所示即為一種擴展操作碼的安排方式。

在圖4.1中,指令字長為16位,其中4位為基本操作碼字段OP,另有3個4位長的地址字段A?、A?和A?。4位基本操作碼若全部用于三地址指令,則有16條。圖4.1中所示的三地址指令為15條,1111留作擴展操作碼之用;二地址指令為15條,11111111留作擴展操作碼之用;一地址指令為15條,111111111111留作擴展操作碼之用;零地址指令為16條。

除這種安排外,還有其他多種擴展方法,如形成15條三地址指令、12條二地址指令、63條一地址指令和16條零地址指令,共106條指令,請讀者自行分析。在設計擴展操作碼指令格式時,必須注意以下兩點:

1)不允許短碼是長碼的前綴,即短操作碼不能與長操作碼的前面部分的代碼相同。

2)各指令的操作碼一定不能重復。

通常情況下,對使用頻率較高的指令分配較短的操作碼,對使用頻率較低的指令分配較長的操作碼,從而盡可能減少指令譯碼和分析的時間。


4.1.5指令的操作類型

設計指令系統時必須考慮應提供哪些操作類型,指令操作類型按功能可分為以下幾種。

1.數據傳送

傳送指令通常有寄存器之間的傳送(MOV)、從內存單元讀取數據到CPU寄存器(LOAD)、從CPU寄存器寫數據到內存單元(STORE)、進棧操作(PUSH)、出棧操作(POP)等。

2.算術和邏輯運算

這類指令主要有加(ADD)、減(SUB)、乘(MUL)、除(DIV)、加1(INC)、減1(DEC)、與(AND)、或(OR)、取反(NOT)、異或(XOR)等。

3.移位操作

移位指令主要有算術移位、邏輯移位、循環移位等。

4.轉移操作

◆轉跳指令、調用和返回指令、條件轉移指令的區分

轉移指令主要有無條件轉移(JMP)、條件轉移(BRANCH)、調用(CALL)、返回(RET)、陷阱(TRAP)等。無條件轉移指令在任何情況下都執行轉移操作,而條件轉移指令僅在特定條件滿足時才執行轉移操作,轉移條件一般是某個標志位的值,或幾個標志位的組合。調用指令和轉移指令的區別:執行調用指令時必須保存下一條指令的地址(返回地址),當子程序執行結束時,根據返回地址返回到主程序繼續執行;而轉移指令則不返回執行。

5.輸入輸出操作

這類指令用于完成CPU與外部設備交換數據或傳送控制命令及狀態信息。




本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91023.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91023.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91023.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RAG面試內容整理-檢索器與生成器的解耦架構

在RAG系統中,檢索器(Retriever)與生成器(Generator)的解耦架構是實現靈活高效的關鍵設計。所謂解耦,即將檢索相關文檔和生成答案兩個步驟分開,由不同的模塊或模型負責。這種架構帶來的直接好處是模塊獨立優化:我們可以針對檢索任務微調或更換檢索模型,而不必影響生成模…

【2026畢業論文鴻蒙系統畢設選題】最新穎的基于HarmonyOS鴻蒙畢業設計選題匯總易過的精品畢設項目分享(建議收藏)?

文章目錄前言最新畢設選題(建議收藏起來)最新穎的鴻蒙畢業設計選題匯總100套易過的精品畢設項目分享畢設作品推薦👇👇👇文未可免費咨詢畢設相關問題,點贊留言可送系統源碼👇👇&#…

超全!Linux 面試 100 題精選解析:網絡篇|16 個 Linux 網絡排查與配置必考題詳解

網絡,是 Linux 系統的神經系統。 一臺服務器再強大,沒有網絡連接也如孤島。尤其在實際運維與面試場景中,“網絡相關的問題”是高頻重災區,比如: IP 配置錯亂,連不上公網DNS 無響應,域名解析失敗…

在 CentOS 上安裝 FFmpeg

在 CentOS 上安裝 FFmpeg 可以通過以下兩種推薦方法實現(以 CentOS 7/8 為例): 方法一:通過 RPM Fusion 倉庫安裝(推薦) # 1. 安裝 EPEL 倉庫 sudo yum install epel-release# 2. 啟用 RPM Fusion 倉庫 # C…

數據結構——圖(一、圖的定義)

一、圖的定義1、什么是圖?圖G(V,E) 如圖,無向圖G頂點集V{,,...,},用|V|表示圖G的頂點個數如:V{A,B,C,D} ,|V|4邊集E{(u,v)|uV, vV}, 用|E|表示圖G的邊的條數如:E{(u,v)|(A,B),(A,D),(A,C),(C,D)}&#xf…

Python 列表推導式與生成器表達式

Python 列表推導式與生成器表達式在 Python 中,列表推導式(List Comprehension)和生成器表達式(Generator Expression)是處理序列數據的高效工具。它們不僅能簡化代碼,還能提升數據處理的效率。本文將詳細介…

XCF32PVOG48C Xilinx Platform Flash PROM

XCF32PVOG48C 是 Xilinx 公司推出的一款高容量、低功耗的 Platform Flash PROM(平臺閃存配置芯片),專為 Xilinx FPGA 和 CPLD 系列產品提供非易失性配置存儲支持。憑借其 32 Mbit 的大容量與出色的系統兼容性,該芯片成為中高端 FP…

重復文件清理工具,附免費鏈接

鏈接:https://pan.baidu.com/s/1s_Zx1eHp5Y-XnbbGldIgvw?pwdkjex 提取碼:kjex 復制這段內容后打開百度網盤手機App,操作更方便哦

【Spring Boot 快速入門】二、請求與響應

目錄請求響應請求Postman 工具簡單參數請求實體參數請求數組集合參數日期參數JSON 參數路徑參數響應請求響應 請求 Postman 工具 Postman 是一款功能強大的網頁調試與發送網頁 HTTP 請求的 Chrome 插件 作用:常用于進行接口測試 簡單參數請求 原始方式 在原始的…

高并發系統技術架構

(點個贊,算法會給你推薦更多類似干貨 ~) 口訣: CDN 扛靜態,WAF 防惡意;驗證碼攔機器; Nginx 先限流,Sentinel 再熔斷; Redis 扣庫存,MQ 異步寫; 對…

python任意模塊間采用全局字典來實現借用其他類對象的方法函數來完成任務或數據通信的功能

我們在編寫pthon代碼時,模塊間的數據通信主要采用以下幾種方法:1、采用全局變量。所有模塊都通過引用全局變量,通過本模塊對此全局變量數據的修改值,其他模塊也能訪問并得到此全局變量的當前值,由于全局變量的不可控性…

linux 部署 flink 1.15.1 并提交作業

下載 1.15.1 https://flink.apache.org/downloads.html#apache-flink-1151 部署模式分類 會話模式應用模式單作業模式 1、會話模式 先啟動一個集群,保持一個會話,然后通過客戶端提交作業,所有作業都在一個會話執行; 會話模式適合規…

Redis數據量過大的隱患:查詢會變慢嗎?如何避免?

一、Redis數據過多引發的五大隱患(附系統交互圖) #mermaid-svg-X83bpHUu830QXKUt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-X83bpHUu830QXKUt .error-icon{fill:#552222;}#mermaid-svg-…

網絡與信息安全有哪些崗位:(3)安全運維工程師

安全運維工程師是企業安全防線的 “日常守護者”,既要確保安全設備與系統的穩定運行,又要實時監控潛在威脅,快速響應并處置安全事件,是連接安全技術與業務運營的關鍵角色。其核心價值在于通過常態化運維,將安全風險控制…

魚皮項目簡易版 RPC 框架開發(三)

本文為筆者閱讀魚皮的項目 《簡易版 RPC 框架開發》的筆記,如果有時間可以直接去看原文, 1. 簡易版 RPC 框架開發 前面的內容可以筆者的前面兩個篇筆記 魚皮項目簡易版 RPC 框架開發(一) 魚皮項目簡易版 RPC 框架開發(…

嵌入式Linux:注冊線程清理處理函數

在 Linux 多線程編程中,線程終止時可以執行特定的清理操作,通過注冊線程清理函數(thread cleanup handler)來實現。這類似于使用 atexit() 注冊進程終止處理函數。線程清理函數用于在線程退出時執行一些資源釋放或清理工作&#x…

【Git】Linux-ubuntu 22.04 初步認識 -> 安裝 -> 基礎操作

文章目錄Git 初識Git 安裝Linux-centosLinux-ubuntuWindowsGit 基本操作配置 Git認識工作區、暫存區、版本庫添加文件 -- 場景一查看 .git 文件添加文件 -- 場景二修改文件版本回退撤銷修改情況一:對于工作區的代碼,還沒有 add情況二:已經 ad…

輕量級音樂元數據編輯器Metadata Remote

簡介 什么是 Metadata Remote (mdrm) ? Metadata Remote 是一個基于 Web 的音頻元數據編輯工具,旨在簡化在無頭服務器(即沒有圖形用戶界面的服務器)上編輯音頻文件的元數據。用戶只需使用 Docker 和瀏覽器,無需復雜的…

免費使用|共享服務器上線RTX3080(20GB顯存)

共享服務器也上架GPU啦 生物信息學中有很多用到GPU的場景,例如我們分享過的:利用GPU加速TensorFlow、部署本地DeepSeek,空間轉錄組學習手冊合輯加速。因此多種GPU供大家選擇:RTX5090、4080S、5070顯卡上機。為了讓此前的CPU服務器…

搭建DM數據守護集群

1環境與規劃準備3個kylin 10操作系統的虛擬機,規劃IP、端口、安裝目錄等。說明搭建REALTIME歸檔模式、事務一致性的數據守護名稱項初始主庫機器dm1初始備庫機器dm2監視器機器dmmon外部業務IP192.168.23.129192.168.23.130192.168.23.131內部心跳IP192.168.23.129192…