指令字(簡稱指令)即表示一條指令的機器字。
指令格式則是指令字用二進制代碼表示的結構形式,由操作碼字段和地址碼字段組成。操作碼字段表征指令的操作特性與功能;地址碼字段通常指定參與操作的操作數的地址。
操作碼字段 | 地址碼字段 |
指令系統的每一條指令都有一個操作碼,它表示該指令應進行什么性質的操作。不同的指令用操作碼字段的不同編碼來表示,每一種編碼代表一種指令。組成操作碼字段的位數一般取決於計算機指令系統的規模。例如,一個指令系統只有8條指令,則有3位操作碼就夠;如果有32條指令,那么就需要5位操作碼。
對於一個機器的指令系統,在指令字中操作碼字段和地址字段產讀通常是固定的。在單片機中,由於指令字較短,為了充分利用指令字長度,指令字的操作碼字段和地址碼字段是不固定的,即不同類型的指令有不同的划分,以便盡可能用較短的指令字長來表示越來越多的操作種類,並在越來越多的存儲空間中尋址。
地址碼
根據一條指令中有幾個操作數地址,可將該指令稱為幾操作數指令或幾地址指令。
一般的操作數有被操作數、操作數及操作結果這三種數,因而就形成了三地址指令格式。在此基礎上,后來又發展成二地址格式、一地址格式和零地址格式
操作碼 | A1 | A2 | A3 |
三地址指令
操作碼 | A1 | A2 |
二地址指令
操作碼 | A1 |
一地址指令
操作碼 |
零地址指令
注意(1)零地址指令的指令字中只有操作碼,而沒有地址碼。
(2)一地址指令常稱為單操作數指令。通常這種指令以運算器中累加寄存器AC中的數據為被操作數,指令字的地址碼字段所指明的數為操作數,操作結果又放回累加寄存器AC中。
(AC) OP (A) -> AC
OP表示操作性質;(AC)表示累加寄存器AC中的數;(A)表示內存中地址為A的存儲單元中的數或運算器中地址為A的通用寄存器中的數; →表示把操作(運算)結果傳送到指定的地方。
(3)二地址指令常稱為雙操作數指令,它的兩個地址碼字段分別指明參與操作的兩個數在內存中或運算器中通用寄存器的地址,A1作存放操作結果的地址。
(A1) OP (A2) -> A1
(4)三地址指令字中有三個操作數地址。
(A1) OP (A2) -> A3
A1為被操作數地址,也稱源操作數地址; A2為操作數地址,也稱終點操作數地址; A3為存放結果的地址。 同樣,A1,A2,A3以是內存中的單元地址,也可以是運算器中通用寄存器的地址。
二地址指令格式中,從操作數的物理位置來說,又可歸結為三種類型。
存儲器-存儲器(SS)型指令:操作時都是涉及內存單元,參與操作的數都放在內存里,從內存某單元中取操作數,操作結果存放至內存另一單元中,因此機器執行這種指令需要多次訪問內存。
寄存器-寄存器(RR)型指令:需要多個通用寄存器或個別專用寄存器,從寄存器中取操作數,把操作結果放到另一寄存器。機器執行寄存器-寄存器型指令的速度很快,因為執行這類指令,不需要訪問內存。
寄存器-寄存器(RS)型指令:執行此類指令時,既要訪問內存單元,又要訪問寄存器。
在設計擴展操作碼指令格式時,必須注意以下兩點:
1、不允許短碼是長碼的前綴,即短操作碼不能與長操作碼的前面部分的代碼相同。
2、各指令的操作碼一定不能重復