劉帥嵌入式系統 乘法指令

2021-09-22 02:11:38 字數 970 閱讀 8041

arm有兩類乘法指令:一類為32位的乘法指令,即乘法操作的結果為32位;另一類為64位的乘法指令,即乘法操作的結果為64位。兩類指令共有以下6條。

mul指令實現兩個32位的數(可以為無符號,也可以為有符號)的乘積,並將結果存放到乙個32位的暫存器中,同時可以根據運算結果設定cpsr暫存器中相應的條件標誌位。考慮指令執行的效率,指令中所有運算元都存放在暫存器中。

其中:

if conditionpass(cond)

then

rd=(rm * rs)

[31:0]

if s==1 then

n flag=rd[31]

z flag=if rd == 0 then 1 else 0

c flag=unaffected /*see "c flag" note*/

v flag=unaffected

由於兩個32位的數相乘的結果位64位,而mul指令僅僅儲存了64位結果的低32位,所以對於帶符號的和無符號的運算元來說,mul指令執行的結果相同。

對於armv5及以上的版本,muls指令不影響cpsr暫存器中的c條件標誌位。對於以前的版本,muls指令執行後,cpsr暫存器中的c條件標誌位數值是不確定的。

暫存器< rm >、< rn >及< rd >為 r15時,指令執行的結果不可預期。

mul r0, r1, r2  ;r0 = r1 * r2

muls r0, r1, r2 ;r0 = r1 * r2 同時設定cpsr中n位和z位

劉帥嵌入式系統 UMLAL指令

umlal指令實現兩個32位的無符號數的64位乘積結果與 rdhi 和 rdlo 中的64位無符號數相加,加法結果的高32位存放到乙個32位暫存器中,乘積結果的低32位存放到另乙個32位的暫存器 rdlo 中,同時可以根據運算結果設定cpsr暫存器中相應的條件標誌位。其中 if conditionp...

劉帥嵌入式系統 MSR指令

msr指令用於將通用暫存器的內容或乙個立即數傳送到狀態暫存器中。指令的源運算元為通用暫存器時,指令編碼格式如下 指令的源運算元為立即數時,指令編碼格式如下 其中 if conditionpassed cond then if opcode 25 1operand 8 bit immediate ro...

劉帥嵌入式系統 TEQ相等測試指令

teq指令將 shifter operand 表示的數值與暫存器 rn 的值按位做邏輯異或操作,根據操作的結果更新cpsr中相應的條件標誌位。其中 if conditionpassed then alu out rn eor shifter operand n flag alu out 31 z f...