2012-07-11 201 views
1

我试图理解这个代码:smulwb汇编指令

inline SInt32 smul32by16(SInt32 i32, SInt16 i16) 
{ 
    register SInt32 r; 
    asm volatile("smulwb %0, %1, %2" : "=r"(r) : "r"(i32), "r"(i16)); 
    return r; 
} 

有谁知道这个汇编指令做什么?

更新: P.S.我使用目标C,我应该理解来自程序集的一些代码。这就是为什么我很难理解这个代码。

+0

架构?臂? – 2012-07-11 12:21:42

+0

请看我的更新。我真的不知道,什么是ARM。我只是分析苹果示例代码。我没有装配知识。 – 2012-07-11 12:23:30

+0

我问里面的命令。 “smulwb%0,%1,%2”:“= r”(r):“r”(i32),“r”(i16) – 2012-07-11 12:25:53

回答

4

它由符号16位乘法符号32位和返回前32位的48位结果。 b指定使用第三个操作数的底部16位。通过使用asm你可以给汇编指令

int_48 temp; 
temp = i32*i16; 
result = temp >> 16; 
+0

非常感谢 – 2012-07-11 12:29:36

4

因此,将其转化为伪代码。

,并使用volatile的原因,

volatile for the asm construct, to prevent GCC from deleting the asm statement as unused 

看到这个link更好地理解

命令里面问指令是指:

SMULWB  R4, R5, R3  ; Multiplies R5 with the bottom halfword of R3, 
           ; extracts top 32 bits and writes to R4. 
+0

不,我只询问命令“smulwb% 0,%1,%2“:”= r“(r):”r“(i32),”r“(i16) – 2012-07-11 12:27:17