五、精簡指令集和復雜指令集指令格式


5.1 介紹

  • CISC:復雜指令集
  • RISC:精簡指令集

5.1.1 CPU 模型

  • 復雜指令集和精簡指令集取決於CPU 中的控制器的 N
  • N=111(8051) 復雜指令集
  • N=34 (ARM) 精簡指令集
  • SWAP(1) <---> MOV (3) 2/8 定律

5.1.2 編程語言

  • 編程語言分為編譯型和解釋行
    • 編譯型:即本地語言,直接生成機器碼
    • 解釋型:JAVA 語言,一次編譯到處運行(JVM 本身是一個進行,去分配內存空間,將字節碼轉成機器碼,用戶程序含在此進程中)
      • 源文件--》編譯器--》字節碼--》JVM(解釋)--》機器碼

5.1.3 RISC 架構的特點

  • 采用固定長度的指令格式
  • 使用單周期指令,便於流水線操作
  • 大量使用寄存器,采用 LS 結構訪問存儲器
  • 采用 CISC 架構的處理器具有相反的特征, 不過功能更強大。 采用 CISC 架構的處理器有 X8

5.2 指令格式

5.2.1 指令格式

  • <指令助記符>{<執行條件>}{S}    <目標寄存器>,<操作數 1 的寄存器>{,<第 2 操作數>}
  • 注意:
    • 指令助記符就是指令
    • 執行條件可以寫也可以不寫,不寫的話,系統會有個默認的執行條件添加
    • < >號內的項是必需的
    • { }號內的項是可選的
    • S: 是否影響 CPSR 寄存器的值,書寫時影響 CPSR,不寫的話不會影響 CPSR
      • 如下面的 SUBS,本身是 SUB 指令,加了 S 后就影響到 CPSR 的標志位了
    • CMP 不需要增加"S"就可改變相應的標志位
  • 例如:
  • SUBS PC,LR,#4
    MOV R0,#0x00
    LDR R0,[R1]
  • 所有指令都是 32bit,load/store 體系結構(對存儲器的訪問只能使用加載和存儲指令實現)

5.2.2 條件碼和機器碼

在 ARM 狀態,所有的指令都可以按照 CPSR 狀態碼和指令條件字段的狀態來有條件地執行。
此字段(位[31:28])確定了在什么情況下哪一個指令被執行。如果 C,N,Z 和 V 標志位的狀態符合字段的條件碼,將執行指令,否則忽略不執行。
有 16 種可能的條件,每種表示為在指令助記符后附加兩個字符后綴。例如,一個分支(匯編語言中的 B)跳轉指令變成 BEQ 為“如果相等則分支跳轉”,這意味着只有 Z 標志位被置位了才會執行分支跳轉。
在實際應用當中,將會使用到 15 種不同的條件:如下表所列,保留第 16 種(1111),並且一定不要使用。

  

使用指令條件碼可實現高效的邏輯操作, 提高代碼執行效率。 例如:

if(a > b) a++;     CMP R0,R1
else b++;          ADDHI R0,R0,#1
                   ADDLS R1,R1,#1

MOV R0,#0x00 <--> MOVAL R0,#0x00

               

機器碼: MOV R0,#0x00 <------> 1110 001 1101 0 0000....000 -->0xE3A00000
數據存儲指令的機器碼是 1110 001,1110 是條件碼,

MOV 指令的機器碼是 1101

0 為 S 的機器碼,0 為禁用,1 為啟動

0000...000 為R0,#0x00

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM