思維導圖
指令(又稱機器指令)
是指示計算機執行某種操作的命令,是計算機運行的最小功能單位。
指令集、指令系統:一台計算機上的所有指令的集合
又叫架構——Intel上用X86、手機上用的是ARM架構
指令格式
一條指令就是機器語言的一個語句,是一組二進制代碼
有兩部分:操作碼(OP)、地址碼(A) //四種分類從此發散:OP、A、OP+A各自長度、OP的目的
操作碼:做什么? 地址碼:對誰動手?
分類
按地址碼數目
地址碼數目不同而分類:0-4地址指令
特別:停機指令是不需要地址碼的 檢測到操作數就ok了就停機
零地址指令
1、不需要操作數,如空操作、停機、關中斷等指令
2、堆棧計算機買兩個操作數隱含在棧頂、次棧頂,計算結果壓回棧頂。
就是基於數據結構中的后綴表達式形成的
例:
數據結構的“后綴表達式”
A + B - C * D //在一個棧中,遇到A、B等數據就存入,遇到運算符就運算,然后將運算結果再存入棧。零地址指令在這里就相當於“運算符”
一地址指令
1、只需要單操作數,如加1、減1,取反、求補
OP(A1) → A1 //完成一條指令需要三次訪存,,取指令、讀取A1、寫入A1
2、需要兩個操作數,但是其中一個操作數隱含在某個寄存器
A1是指某個主存的地址,(A1)表示這個地址中所指向的內容。
這里隱含在ACC
(ACC)OP(A1) → ACC //CPU取出一個操作數,然后操作再返回A1所指向的地址。ACC是累加寄存器,因為最后是存到ACC,所以不需要第二次訪存,所以只要兩次
完成一條指令需要訪問兩次內存:取值、讀取A1
二地址指令
OP|A1(目的操作數)|A2(源操作數)
常用於需要兩個操作數的算術運算、邏輯運算
(A1)OP(A2) → A1 //訪存次數4次:取指令、讀A1、讀A2、寫到A1
三地址指令
OP|A1|A2|A3(結果)
常常用於需要兩個操作數的算術運算、邏輯運算
(A1)OP(A2) → A3 //訪存次數4次:取指令、讀A1、讀A2、寫到A3
四地址指令
OP|A1|A2|A3(結果)|A4(下一條地址)
前面部分是跟三地址完全一樣。
(A1)OP(A2) → A3 A4=下一條要執行的指令的地址 //訪存次數4次:取指令、讀A1、讀A2、寫到A3
特殊之處
正常情況下:取指令后PC+1,就指向了下一條指令
四地址指令:取指令后,將PC的值修改為A4所指的地址。
按指令長度
指令字長:一條指令的總長度
機器字長:CPU進行一次整數運算所能處理的二進制數據的位數(通常與ALU相關)
存儲字長:一個存儲單元中二進制代碼的位數(通常和MDR位數相同)
一些通用叫法
半字長指令、單字長指令、雙字長指令 ——指令長度是機器字長的多少倍
指令字長會影響取指令所需要的時間。
例:
機器字長 = 存儲字長 = 16bit,取一條雙字長指令
——雙字長是32bit ,取一條雙字長指令就需要兩次訪存。
按照操作碼長度
顯然,操作碼的數量可以顯示這個系統的能夠操作多少個指令
定長操作碼:
指令系統中所有指令的操作碼長度相同。
n位 ——> 2^n條指令
特點:控制器的譯碼電路設計簡單,但是靈活性低。
另:地址碼的位數的影響——指令總長度不變,地址碼數量越多,尋址能力越差,太多了效率就下降了。
可變長操作碼:
指令系統中各指令的操作碼長度有變化
特點:設計復雜,靈活度高。
定長指令字結構 + 可變長操作碼 ——> 拓展操作碼指令格式
按照操作類型
其實移位操作也是邏輯操作的一部分
1、數據傳送【進行主存和CPU之間的數據傳送】
LOAD //把數據: 存儲器 ——> 寄存器
STORE //把數據: 寄存器 ——> 存儲器
2、算術邏輯操作【運算】
算術:加減乘除
邏輯:與或非
3、移位操作【運算】
算術移位、邏輯移位、循環移位
4、轉移操作【改變程序執行的順序】
無條件轉移 JMP
條件轉移 JZ:結果為0;JO:結果溢出;JC:結果有進位
調用和返回 CALL、RETURN
陷阱
為什么會有轉移操作?
一般程序是順序執行,但是有else if這種語句,所以要讓程序流改變,就出現了轉移指令,改變PC的值。
5、輸入輸出操作【CPU和I/O設備之間的數據傳送】
CPU寄存器與IO端口之間的數據傳送(端口即IO接口中的寄存器)