bittgl.c r4, r5, 10 // 將 r5 暫存器的 bit10 位取反,並將結果保存至 r4
4. 資料傳送指令
mv{cond}——條件資料傳輸
指令格式:mv{cond} rD, rA
mv 指令根據對條件旗標位元的測試結果將 rA 暫存器的內容傳送至 rD 暫存器。
其中,cond 尾碼為 EC(EXECUTE CONDITION)欄位的條件旗標位元測試條件(如表 2-7 所示),如果測試條件為真,則執行資料傳輸操作,否則 rD 暫存器的內容不作改變。
指令舉例:
ldi r4, 0x100
cmp r2, r4 // 比較 r2 與 0x100 的大小
mvge r4, r2 // 若 r2>=0x100,則將 r2 的內容傳輸到 r4
mtcr——傳輸資料到控制暫存器
指令格式:mtcr rD, Crn
mtcr 指令可以將通用暫存器 rD 的內容傳輸給控制暫存器 Crn,n 表示控制暫存器編號。通常 該指令只能用於核心模式,但如果將 PSR 暫存器中的 cra 位置 1,則可以在用戶模式下使用 該指令。
指令舉例:
mtcr r4, Cr16 // 將 r4 的內容傳輸給 LDM 實體框數暫存器 Cr16
mfcr——從控制暫存器傳輸資料
指令格式:mfcr rD, Crn
mfcr 指令可以將控制暫存器 Crn 的內容傳輸給通用暫存器 rD,n 表示控制暫存器編號。與 mtcr 類似,通常該指令只能用於核心模式,但如果將 PSR 暫存器中的 cra 位置 1,則可以在 用戶模式下使用該指令。
指令舉例:
mfcr r4, Cr16 // 將 LDM 實體框數暫存器 Cr16 的內容傳輸給通用暫存器 r4
嵌入式微處理器 SPCE3200 原理及應用
© Sunplus Technology Co., Ltd. PAGE 58 V1.1 - Agu 29, 2007
5. 移位運算指令 rol——迴圈左移
指令格式:rol{i}{c}{.c} rD, rA, operand2
rol 指令將 rA 暫存器的內容向左迴圈移動 operand2 指定的位數,並存放在 rD 暫存器內。其 中,帶尾碼“i"表示移動的位數 operand2 由一個 5 位的立即數指定,否則由一個通用暫存 器的最低 5 位指定;帶尾碼“c"表示帶進位的迴圈移位,否則為不帶進位的迴圈移位。
需要注意的是,帶進位元的迴圈移位指令必須帶有.c 尾碼,因為此時 C 旗標位元將受到影響。
rA << operand2 C
圖 2-5 不帶進位的迴圈左移
rA << operand2 C
圖 2-6 帶進位的迴圈左移
指令舉例:
rol r4, r2, r3 // 不帶進位的迴圈左移,移動位數由暫存器 r3 決定 rolc.c r4, r2, r3 // 帶進位的迴圈左移,移動位數由暫存器 r3 決定,
// 影響條件旗標位元
roli r4, r2, 0x0a // 不帶進位的迴圈左移,移動位數由立即數 0x0a 決定 rolic.c r4, r2, 0x03 // 帶進位的迴圈左移,移動位數由立即數 0x03 決定
ror——迴圈右移
指令格式:ror{i}{c}{.c} rD, rA, operand2
ror 指令將 rA 暫存器的內容向右迴圈移動 operand2 指定的位數,並存放在 rD 暫存器內。其 中,帶尾碼“i"表示移動的位數 operand2 由一個 5 位的立即數指定,否則由一個通用暫存 器的最低 5 位指定;帶尾碼“c"表示帶進位的迴圈移位,否則為不帶進位的迴圈移位。
需要注意的是,帶進位元的迴圈移位指令必須帶有.c 尾碼,因為此時 C 旗標位元將受到影響。
rA >> operand2 C
圖 2-7 不帶進位的迴圈右移
嵌入式微處理器 SPCE3200 原理及應用
© Sunplus Technology Co., Ltd. PAGE 59 V1.1 - Agu 29, 2007
rA >> operand2 C
圖 2-8 帶進位的迴圈右移
指令舉例:
ror r4, r2, r3 // 不帶進位的迴圈右移,移動位數由暫存器 r3 決定 rorc.c r4, r2, r3 // 帶進位的迴圈右移,移動位數由暫存器 r3 決定,
// 影響條件旗標位元
rori r4, r2, 0x0a // 不帶進位的迴圈右移,移動位數由立即數 0x0a 決定 roric.c r4, r2, 0x03 // 帶進位的迴圈右移,移動位數由立即數 0x03 決定
sll——邏輯左移
指令格式:sll{i}{.c} rD, rA, operand2
sll 指令將 rA 暫存器的內容向左移動 operand2 指定的位數,並存放在 rD 暫存器內。其中,
帶尾碼“i"表示移動的位數 operand2 由一個 5 位的立即數指定,否則由一個通用暫存器的 最低 5 位指定。
指令舉例:
sll r4, r2, r3 // 邏輯左移,移動位元數由暫存器 r3 決定 slli r4, r2, 0x0a // 邏輯左移,移動位元數由立即數 0x0a 決定
srl——邏輯右移
指令格式:srl{i}{.c} rD, rA, operand2
srl 指令將 rA 暫存器的內容向右移動 operand2 指定的位數,並存放在 rD 暫存器內。其中,
帶尾碼“i"表示移動的位數 operand2 由一個 5 位的立即數指定,否則由一個通用暫存器的 最低 5 位指定。
指令舉例:
srl r4, r2, r3 // 邏輯右移,移動位元數由暫存器 r3 決定 srli r4, r2, 0x0a // 邏輯右移,移動位元數由立即數 0x0a 決定
sra——算術右移
指令格式:sra{i}{.c} rD, rA, operand2
sra 指令將 rA 暫存器的內容向右移動 operand2 指定的位元數,同時用符號位元填充左端的 空缺,然後存放在 rD 暫存器內。其中,帶尾碼“i"表示移動的位數 operand2 由一個 5 位的 立即數指定,否則由一個通用暫存器的最低 5 位指定。
指令舉例:
sra r4, r2, r3 // 算術右移,移動位數由暫存器 r3 決定 srai r4, r2, 0x0a // 算術右移,移動位數由立即數 0x0a 決定
嵌入式微處理器 SPCE3200 原理及應用
© Sunplus Technology Co., Ltd. PAGE 60 V1.1 - Agu 29, 2007
6. 擴展操作指令
擴展操作指令可以將位元組資料或半字資料的高位元組進行符號填充或零填充而形成字資 料。
extsb——擴展有符號位元組資料