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