計算機組成原理筆記(十四)——3.4指令類型

一臺計算機的指令系統可以有上百條指令,這些指令按其功能可以分成幾種類型,下面分別介紹。

3.4.1數據傳送類指令

一、核心概念與功能定位

數據傳送類指令是計算機指令系統中最基礎的指令類型,負責在 寄存器、主存、I/O設備 之間高效復制數據。這類指令的特點是 不改變數據本身的值,僅實現數據的物理或邏輯傳遞。

二、分類與典型指令

根據數據源與目標的物理位置不同,數據傳送類指令可細分為以下4類:

類型功能典型指令匯編示例
通用傳送寄存器/主存間的數據復制MOV, LDA (Load), STA (Store)MOV R1, R2
STA [2000H], R0
堆棧操作基于堆棧結構實現數據壓入和彈出PUSH, POPPUSH AX
POP BX
I/O操作CPU與I/O設備間的數據交互IN, OUTIN AL, 60H
OUT 80H, AL
數據交換直接交換兩個數據源的值XCHG, XCHXCHG AX, BX

三、執行流程與硬件支持

1. 通用傳送指令(如MOV)

功能:將源操作數復制到目標位置,源數據保留。
核心步驟

  1. 取指令:從內存取出指令并譯碼。
  2. 獲取源數據:根據尋址方式讀取源地址數據。
  3. 寫入目標:將數據寫入目標地址。

在這里插入圖片描述

硬件協作

  • 寄存器傳輸:通過內部總線直接傳遞數據。
  • 主存訪問:需要 MAR(內存地址寄存器)保存地址,MDR(內存數據寄存器)暫存數據。

2. 堆棧操作指令(PUSH/POP)

核心流程(基于自底向上生成的內存堆棧):

  • PUSH流程
    1. SP指針下移:SP ← SP - 1(x86架構相反,上移)。
    2. 數據寫入棧頂:將數據存入SP指向的內存單元。

在這里插入圖片描述

  • POP流程
    1. 讀取棧頂數據。
    2. SP指針上移:SP ← SP + 1(x86架構相反,下移)。

在這里插入圖片描述

示例(x86架構):

PUSH EAX    ; 將EAX內容壓入棧頂,SP-4
POP EBX     ; 將棧頂數據彈出到EBX,SP+4

3. I/O傳送指令(IN/OUT)

工作原理

  • 獨立編址:I/O端口與內存地址分開,通過專用IN/OUT指令訪問(如x86)。
  • 統一編址:I/O設備映射到內存地址空間(如ARM的MMIO)。

IN指令流程(獨立編址):

在這里插入圖片描述

四、關鍵硬件支持與總線信號

  1. 關鍵寄存器
    • MAR(地址寄存器):保存目標內存地址。
    • MDR(數據寄存器):臨時存儲待寫入的數據。
  2. 總線控制信號
    • MIO信號:區分內存與I/O操作(1=內存,0=IO)。
    • REQ信號:請求總線使用權。
    • WE信號:寫使能(1=寫,0=讀)。

五、典型應用場景

  1. 函數調用上下文保存
    • PUSH保存返回地址、參數和寄存器值。
    • POP恢復現場,繼續執行主程序。
  2. 中斷處理
    • 通過PUSH保存程序狀態(PC、標志寄存器)。
  3. 動態內存管理
    • MOV指令在內存和寄存器間頻繁交換臨時數據。

六、聯合尋址方式

數據傳送指令支持的 尋址方式決定效率

  • 直接尋址:指令直接包含有效地址(如MOV AX, [2000H])。
  • 寄存器間接尋址:地址存放在寄存器(如MOV AX, [BX])。
  • 基址/變址尋址:組合基址寄存器和偏移量(如MOV AX, [SI+10H])。

七、高級應用與優化

  • DMA控制:繞過CPU實現內存與外設直接數據傳輸。
  • 原子操作:通過XCHG實現鎖機制(如自旋鎖)。
  • 零地址指令優化:利用堆棧隱式尋址減少指令長度(如PUSH/POP)。

示例總結:寄存器與內存數據傳輸模型

在這里插入圖片描述

3.4.2運算類指令

一、運算類指令的類別

運算類指令主要分為 算術運算指令邏輯運算指令,具體分類如下:

1. 算術運算指令

  • 加法(ADD/ADC):完成加法操作,ADC 是帶進位的加法。

  • 減法(SUB/SBB):完成減法操作,SBB 是帶借位的減法。

  • 乘法(MUL/IMUL):無符號乘法(MUL)和有符號乘法(IMUL)。

  • 除法(DIV/IDIV):無符號除法(DIV)和有符號除法(IDIV)。

  • 增量/減量(INC/DEC):對操作數加1或減1。

  • 比較(CMP):計算兩數的差值,但不保存結果,僅更新標志位。

2. 邏輯運算指令

  • 按位與(AND)

  • 按位或(OR)

  • 按位異或(XOR)

  • 按位取反(NOT)

  • 移位操作

  • 算術移位:保留符號位(SAR、SAL)。

  • 邏輯移位:不保留符號位(SHL、SHR)。

  • 循環移位:帶進位或不帶進位(ROR、ROL)。

二、運算指令的執行流程

運算指令分為以下階段(以加法指令為例):

1. 取指階段(Fetch)

  • 動作:從程序計數器(PC)指示的地址中取出指令。

  • 數據流
    在這里插入圖片描述

2. 譯碼階段(Decode)

  • 動作:解析指令,確定操作碼(ADD)和操作數類型(寄存器或內存)。

  • 關鍵:控制單元(CU)生成控制信號。

3. 執行階段(Execute)

  • 數據通路
  1. 取操作數:從寄存器或內存讀取操作數。

  2. ALU運算:執行具體的算術或邏輯操作。

  3. 更新標志位:溢出(OF)、進位(CF)、零(ZF)、符號(SF)等。

4. 寫回階段(Write Back)

  • 動作:將結果存入目標寄存器或內存。

  • 關鍵:影響后續指令的條件分支(如JNZ)。

三、標志位的作用

運算指令執行后會影響以下標志位:

  • ZF(Zero Flag):結果為0時置1。

  • OF(Overflow Flag):有符號運算溢出時置1。

  • CF(Carry Flag):無符號運算進位或借位時置1。

  • SF(Sign Flag):結果的符號位(最高位)為1時置1。

四、示例:ADD指令的完整流程

假設執行指令 ADD R1, R2, R3(將 R2 和 R3 的值相加,結果存到 R1):

流程圖

在這里插入圖片描述

步驟詳解

  1. 取指令:從當前 PC 指向的內存地址讀取指令。

  2. 譯碼:識別是 ADD 指令,提取操作數地址 R2 和 R3。

  3. 讀取操作數:從寄存器 R2、R3 中取出數據。

  4. ALU運算:ALU 執行加法運算,生成結果。

  5. 更新標志

  • 若結果為零,置 ZF=1。

  • 若結果溢出,置 OF=1。

  1. 寫回結果:將結果存入目標寄存器 R1,PC 自增指向下一指令。

五、典型運算類指令對比

指令類型操作符功能示例(匯編)
加法ADD寄存器或立即數加法ADD AX, 10
邏輯運算AND按位與操作AND AX, 0xFF
移位SHL左移(邏輯或算術)SHL AX, 1
比較CMP比較兩數并更新標志位CMP AX, BX

六、核心概念總結

  • 數據通路:涉及寄存器、ALU、內存的協同操作。

  • 控制信號:CU 通過解析操作碼發出信號,控制數據流動。

  • 標志位:影響條件分支指令(如 JEJNE 等)的執行。

通過以上內容,可以全面理解運算類指令在計算機中的執行機制和關鍵流程。

3.4.3程序控制類指令

程序控制類指令用于改變程序的執行順序,實現分支、循環、子程序調用等功能。

一、核心分類及功能

  1. 無條件轉移指令(JMP)

    • 功能:直接修改程序計數器(PC),跳轉到指定地址執行。
    • 示例JMP LABEL
    • 流程圖
      在這里插入圖片描述
  2. 條件轉移指令(Jump Conditional)

    • 功能:根據條件碼(狀態寄存器標志)決定是否跳轉。

常見類型

指令條件說明
JE/JZZF=1結果為零
JNE/JNZZF=0結果不為零
JG(SF=OF)&ZF=0有符號大于
JLSF≠OF有符號小于

在這里插入圖片描述

  1. 子程序調用與返回

    • CALL:保存返回地址(PC+1壓棧),跳轉到子程序入口。
    • RET:彈出返回地址到PC,恢復主程序執行。
    • 流程示例
      在這里插入圖片描述

二、關鍵機制詳解

  1. 返回地址保存

    • 方法:大多數架構使用堆棧保存返回地址(CALL時壓棧,RET時彈棧)。
    • 示例CALL 0x1000的執行步驟:
      1. 將當前PC(下一條指令地址)壓入棧
      2. PC ← 0x1000
  2. 條件判斷邏輯

    • 依賴標志位:ZF(零標志)、CF(進位)、SF(符號)、OF(溢出)。
    • 跳轉電路:CPU內部通過狀態寄存器和組合邏輯決定是否跳轉。
  3. 尋址模式的影響

    • 相對跳轉JMP +25(當前PC+25)。
    • 絕對跳轉JMP 0xFF00(直接跳轉到目標地址)。

三、綜合執行流程

  1. 無條件轉移(JMP)

在這里插入圖片描述

  1. 條件轉移(JE)

在這里插入圖片描述

  1. 子程序調用(CALL/RET)
    在這里插入圖片描述

四、典型應用場景

  1. 循環控制

    • 示例:通過LOOP遞減計數器并判斷是否為0。

      MOV CX, 5
      LOOP_START:; 循環體...LOOP LOOP_START  ; CX-1, if CX≠0跳轉
      
  2. 分支選擇

    • 多路分支:通過嵌套條件跳轉實現if-elseswitch
  3. 中斷處理

    • 隱式調用:硬件中斷自動觸發類似CALL的操作,保存上下文后跳轉中斷服務程序。

五、注意事項

  • 性能影響:跳轉指令可能導致流水線停頓,需謹慎優化。
  • 棧平衡:子程序中需確保RET前棧指針與CALL時一致。
  • 標志位安全:子程序執行期間需保存和恢復相關寄存器避免破壞主程序狀態。

3.4.4輸入輸出類指令

一、I/O類指令的核心功能

I/O類指令用于CPU與外部設備之間的數據交換和控制,主要包括:

  1. 數據傳輸:CPU與I/O設備之間交換數據(如鍵盤輸入、屏幕輸出)。
  2. 設備控制:發送指令控制外設(如啟動磁盤讀取)。
  3. 狀態查詢:讀取外設狀態(如判斷設備是否就緒)。

典型I/O指令:

  • IN:從外設讀取數據到CPU寄存器(輸入)。
  • OUT:向外部設備發送數據(輸出)。
  • START:啟動外設操作(如開始打印)。
  • HALT:停止外設操作。

二、I/O指令的兩種編址方式

1. 獨立編址(I/O-Mapped I/O)

  • 特點:外設地址與內存地址完全獨立,需專用IN/OUT指令操作。
  • 優點:I/O設備與內存地址空間不沖突。
  • 缺點:需要額外的控制邏輯。
  • 示例
    • IN AL, 60h:從I/O端口60h讀取數據到寄存器AL
    • OUT 80h, AL:將AL的內容輸出到I/O端口80h

在這里插入圖片描述

2. 統一編址(Memory-Mapped I/O)

  • 特點:外設寄存器映射到內存地址空間,可通過普通訪存指令訪問。
  • 優點:簡化指令設計,兼容通用指令。
  • 缺點:占用內存地址空間。
  • 示例
    • MOV AX, [0f000h]:讀取外設0F000h的輸入數據。
    • MOV [0f001h], AX:向0F001h端口寫入數據。

三、典型I/O指令的執行流程

1. 輸入指令(IN)執行流程

在這里插入圖片描述

2. 輸出指令(OUT)執行流程

在這里插入圖片描述

四、關鍵硬件部件與流程圖

1. 典型I/O系統結構

在這里插入圖片描述

2. I/O指令執行的控制信號流程

在這里插入圖片描述

五、設計案例分析

案例:從鍵盤輸入字符并顯示

在這里插入圖片描述

六、關鍵問題與答案

  1. Q:獨立編址和統一編址有何區別?

    • 獨立編址需專用指令(如IN/OUT),外設端口獨立;統一編址通過普通訪存指令操作外設。
  2. Q:I/O指令為何需要狀態寄存器?

    • 為了解決外設速度與CPU不匹配的問題。例如:CPU通過狀態寄存器查詢設備是否就緒(如“就緒位”是否為1)。
  3. Q:什么是輪詢與中斷?

    • 輪詢:CPU持續查詢外設狀態(效率低,適用于簡單設備)。
    • 中斷:外設通過中斷控制器主動通知CPU(效率高,復雜系統常用)。

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

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

相關文章

各開源協議一覽

在 GitHub 上,開源項目通常會使用一些常見的開源協議來定義項目的使用、修改和分發規則。以下是目前 GitHub 上最常見的幾種開源協議及其差異和示例說明: TL;DR 協議寬松程度是否強制開源專利保護適用場景MIT最寬松否無希望代碼被廣泛使用Apache 2.0寬松…

51c自動駕駛~合集17

我自己的原文哦~ https://blog.51cto.com/whaosoft/13793157 #匯聚感知、定位、規劃控制的自動駕駛系統 自動駕駛技術在應用到車輛上之后可以通過提高吞吐量來緩解道路擁堵,通過消除人為錯誤來提高道路安全性,并減輕駕駛員的駕駛負擔,從…

小程序開發指南

小程序開發指南 目錄 1. 小程序開發概述 1.1 什么是小程序1.2 小程序的優勢1.3 小程序的發展歷程 2. 開發準備工作 2.1 選擇開發平臺2.2 開發環境搭建2.3 開發模式選擇 3. 小程序開發流程 3.1 項目規劃3.2 界面設計3.3 代碼開發3.4 基本開發示例3.5 數據存儲3.6 網絡請求3.7 …

Day15:關于MySQL的編程技術——基礎知識

前言:先創建一個練習的數據庫和數據 1.創建數據庫并創建數據表的基本結構 -- 創建練習數據庫 CREATE DATABASE db_programming; USE db_programming;-- 創建員工表(包含各種數據類型) CREATE TABLE employees (emp_id INT PRIMARY KEY AUTO…

批處理腳本bat丨遍歷一個包含項目名稱的數組,并對每個文件中的項目執行 git pull 操作 (一鍵拉很多文件的代碼)

文章目錄 前言一、操作方式二、文件展示三、分析代碼結構四、代碼五、需要注意的潛在問題六、改進后的代碼七、改進說明八、感謝 前言 由于之前git服務部署在本地服務器,處于代碼安全角度考慮。領導讓我將所有的項目代碼手動物理備份一份并且發給他。 這種傻傻的操…

【C++】C與C++、C++內存空間、堆與棧

C嘎嘎嘎嘎嘎~ C與C的區別與聯系 C內存空間 int global_var; // 未初始化全局變量,BSS段 const char* str "Hello"; // 字符串常量text段 in數據段void func() {static int static_var; // 未初始化的靜態變量,數據段int local_var; …

舵機:機器人領域的“關節革命者”

機器人的技術,每一個細微的進步都可能引領一場行業變革。而在這場變革中,舵機作為機器人關節的核心部件,正悄然上演著一場革命性的應用風暴。從簡單的關節運動到復雜的姿態控制,舵機以其卓越的性能和無限的可能,重新定…

微前端的不斷探索之路—— qiankun 實戰與思考!

全文目錄: 開篇語📝 前言🛠? 微前端是什么?為什么需要它?💡 先從“前端痛點”說起🧐 微前端的優勢 🤹?♀? qiankun 簡介與核心概念🌟 為什么選擇 qiankun?…

拆解加密黑盒

在Web安全與數據爬取領域,JavaScript加密黑盒的逆向工程是核心技術之一。本文基于行業通用方法論與實戰案例,提煉出一套標準化的五步逆向流程,涵蓋目標定位、代碼提取、邏輯分析、算法復現到自動化集成的全鏈路解決方案,幫助開發者…

IntelliJ IDEA 中安裝和使用通義靈碼 AI 編程助手教程

隨著人工智能技術的發展,AI 編程助手逐漸成為提升開發效率的強大工具。通義靈碼是阿里云推出的一款 AI 編程助手,它能夠幫助開發者實現智能代碼補全、代碼解釋、生成單元測試等功能,極大地提升了編程效率和代碼質量。 IntelliJ IDEA 是一款廣…

Redis 特性和應用場景

1. Redis特性 1)In-memory data structures Redis 在內存中存儲數據,key 是 String, value 可以是 hash, list, set, sorted set, stream ... MySQL主要是通過 “表” 的方式來存儲組織數據的 “關系型數據庫” Redis主要是通過 “鍵值對”…

每天五分鐘深度學習:非線性激活函數的導數

本文重點 本文探討了神經網絡中幾種常見非線性激活函數(Sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Softmax)的導數特性。通過對各激活函數導數的數學推導與實際應用分析,揭示了不同激活函數在梯度傳播、收斂速度及模型表達能力方面的差異。研究發現,ReLU及其變體在計算效率與…

redis哨兵機制 和集群有什么區別:

主從: 包括一個master節點 和多個slave節點: master節點負責數據的讀寫,slave節點負責數據的讀取,master節點收到數據變更,會同步到slave節點 去實現數據的同步。通過這樣一個架構可以去實現redis的一個讀寫分離。提升…

關于讀完《毛澤東選集》的一些思考迭代

看完毛選前四卷,從革命初期一直講到抗戰勝利,共75.8W字,花費67個小時讀完。從1925年發表的“中國社會各階級的分析”,跨越100年,通過67個小時向主席學習到: 實事求是 從實踐中來再到實踐中去 用辯證與發展…

MySQL——MVCC(多版本并發控制)

目錄 1.MVCC多版本并發控制的一些基本概念 MVCC實現原理 記錄中的隱藏字段 undo log undo log 版本鏈 ReadView 數據訪問規則 具體實現邏輯 總結 1.MVCC多版本并發控制的一些基本概念 當前讀:該取的是記錄的最新版本,讀取時還要保證其他并發事務…

【Linux篇】深入理解文件系統:從基礎概念到 ext2 文件系統的應用與解析

文件系統的魔法:讓計算機理解并存儲你的數據 一. 文件系統1.1 塊1.2 分區1.3 inode(索引節點) 二. ext2文件系統2.1 認識文件系統2.2 Block Group (塊組)2.2.1 Block Group 的基本概念2.2.2 Block Group 的作用 2.3 塊組內部結構2.3.1 超級塊(Super Bloc…

3 VS Code 配置優化與實用插件推薦:settings.json 詳解、CodeGeeX 智能編程助手及插件離線安裝方法

1 優化 settings.json 文件 1.1 settings.json 簡介 settings.json 是 VS Code 的核心配置文件,用于存儲用戶的個性化設置和偏好。通過該文件,用戶可以自定義和覆蓋 VS Code 的默認行為,包括但不限于以下方面: 編輯器外觀&#…

【Java面試系列】Spring Cloud微服務架構中的分布式事務處理與Seata框架實現原理詳解 - 3-5年Java開發必備知識

【Java面試系列】Spring Cloud微服務架構中的分布式事務處理與Seata框架實現原理詳解 - 3-5年Java開發必備知識 1. 引言 在微服務架構中,分布式事務處理是一個復雜且常見的問題。隨著業務規模的擴大,單體應用逐漸拆分為多個微服務,每個服務…

力扣面試150題--有效的數獨

Day 19 題目描述 思路 其實還挺簡單的&#xff0c;主要的難點在于如何判斷每個小數獨是否滿足要求 詳細見代碼 class Solution {public boolean isValidSudoku(char[][] board) {HashSet<Character> set new HashSet<>();//處理行HashSet<Character> set1…

達夢數據庫-學習-15-大內存SQL相關視圖介紹

目錄 一、環境信息 二、介紹 三、數據字典表 1、V$MEM_POOL 2、V$SQL_STAT 3、V$SQL_STAT_HISTORY 4、V$LARGE_MEM_SQLS 5、V$SYSTEM_LARGE_MEM_SQLS 四、總結 一、環境信息 名稱值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系統CentOS Linux release 7.9.2009 (Co…