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;
}
有人知道这个汇编指令的作用吗?
更新: PS我使用目标C,我应该理解来自程序集的一些代码。 这就是为什么我很难理解这个代码。
它通过带符号的16位乘法对32位进行签名,并返回48位结果的前32位。 b指定使用第三个操作数的底部16位。
所以,将它翻译成伪代码:
int_48 temp;
temp = i32*i16;
result = temp >> 16;
有关ARM SMUL和SMULW指令的说明,请参阅此处:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/CHDIABBH.html
通过使用asm
你可以给汇编命令。
并volatile
为理由使用volatile
,
volatile for the asm construct, to prevent GCC from deleting the asm statement as unused
看到这个链接更好的理解
命令里面的问问指令是指:
SMULWB R4, R5, R3 ; Multiplies R5 with the bottom halfword of R3,
; extracts top 32 bits and writes to R4.
链接地址: http://www.djcxy.com/p/87127.html