指令系統1

2021-08-15 16:59:58 字數 2769 閱讀 1142

指令的一般格式

操作碼

長度固定操作碼:便於硬體設計,指令解碼時間短

長度變化操作碼:採用擴充套件操作碼技術(

位址碼

用一些硬體資源(如pc,acc)承擔指令字中需指明的位址碼可在不改變指令字長的前提下擴大指令運算元的直接定址範圍

指令字長

取決於操作碼的長度,運算元位址的長度,運算元位址的個數。不同的機器字長也不相同

早期計算機指令字長,機器字長,儲存字長都相同,這類機器控制方式簡單

現代計算機儲存容量增大,處理的資料型別增多,指令字長可變如單字長指令,多字長指令

運算元型別和操作型別

運算元型別

數字:定點數,浮點數,十進位制數

字元:ascii碼等

邏輯資料:作邏輯運算

操作型別

資料傳送:暫存器與暫存器,暫存器與儲存單元,儲存單元與儲存單元之間的傳送

算術邏輯運算:完成算術運算和邏輯運算

移位:分為算術移位,邏輯移位和迴圈移位。算術移位和邏輯移位可實現*2(左移)或/2(右移)

轉移:無條件轉移,條件轉移,呼叫與返回(呼叫:呼叫具有特定功能的子程式,實現從乙個程式轉移到另乙個程式的操作),

當呼叫子程式時可將返回位址放入專用暫存器內,子程式的入口位址內,棧內。

陷阱與陷阱指令:機器執行中出現故障,發出陷阱訊號,暫停當前程式的執行轉入故障處理程式進行相應的故障處理。陷阱指令分為隱指令(指令系統不提供),出現故障時,由cpu自動產生並執行,還有直接提供給使用者的使用的陷阱指令,執行系統呼叫

輸入輸出:略

其他:等待指令,停機指令,空操作指令,開中斷指令,關中斷指令,置條件碼指令等

定址方式

資料定址

1 立即定址

形式位址裡既是運算元本身,立即定址特徵+立即數

2 直接定址

形式位址儲存運算元的位址,形式位址(a)就是有效位址(ea)直接定址特徵+運算元位址

3 隱含定址

指令字中不明顯給出運算元的位址,運算元的位址隱含在操作碼或某個暫存器中,有利於縮短指令字長

4 間接定址

指出內容為運算元有效位址的儲存單元的位址,有效位址是由形式位址間接提供的,分為一次或多次間接定址,擴大了運算元的定址範圍,方便編制程式,可以很方便的完成呼叫子程式時子程式的返回。缺點是執行階段需要多次訪存,使指令執行時間延長

5 暫存器定址

將cpu中的暫存器編號,形式位址的內容即為暫存器的編號,暫存器內儲存的既是運算元。執行指令階段無需訪存,但暫存器數量有限。

6 暫存器相對定址

暫存器中的內容不是運算元而是運算元在記憶體中的位址

7 基址定址

設有基址暫存器br,有效位址ea=形式位址a+基址暫存器br中的內容,基址暫存器可由系統預設(隱式)或由使用者指定(顯式)。可擴大運算元的定址範圍,在多道程式中極為有用,使用者不必考慮自己的程式位於記憶體的哪一塊區域,而是由系統根據記憶體使用情況賦予基址暫存器內乙個初始值。

8 變址定址

設有變址暫存器br,有效位址ea=形式位址a+變址暫存器br中的內容

與基址定址相比,兩者的應用場合不同,基址定址主要為程式或資料分配儲存空間,基址暫存器中的內容由系統設定在程式執行過程中不能改變,形式位址a中的內容可以改變。變址定址暫存器中的內容由使用者設定,程式執行過程中可以改變,形式位址a中的內容無法改變。變址定址主要用於處理陣列問題,比如保持指令「add x,d」(x為變址暫存器,d為形式位址)不變,只要改變x中的內容即可將陣列中的內容迴圈相加。

9 相對定址

ea = (pc)+a

有效位址 = pc中的內容+形式位址

相對定址常用於轉移指令,a也可稱為相對位移量

10 堆疊定址

運算元的位址儲存在棧頂sp(stack point)指標變數中。可視為一種隱含定址,進棧出棧sp都會移動乙個儲存單元的位置

指令和指令系統

第一部分,是指令的操作碼。操作碼用於指明本條指令的操作功能,例如,是算術加運算 減運算還是邏輯與 或運算功能,是否是讀 寫記憶體或讀 寫外設操作功能,是否是程式轉移和子程式呼叫或返回操作功能等,計算機需要為每條指令分配乙個確定的操作碼。第二部分,是指令的運算元位址,用於給出被操作的資訊 指令或資料 ...

微控制器指令系統 1

本篇部落格主要列出了微控制器的主要指令,供開發人員參考。作為乙個微控制器初學者,記住指令特別的痛苦,不過主要還是要理解,多練習指令,寫多了就記住了,這是乙個很自然的過程。目錄 一 定址方式 二 指令分類 1 資料傳送類指令 2 算術運算類指令 定址方式有七種 1.立即定址 如 mov a,3ah 2...

SSE的指令系統

sse的指令系統 sse2和sse的指令系統非常相似,僅僅多了少量額外的浮點運算,64位浮點 整數運算支援 sse比傳統浮點運算要快,因為它使用128位儲存單元。在windows使用 include 在linux下使用 include 1.變數定義和使用 m128 s1 s1.m128 f32 2 ...