Pau*_* T. 1 c assembly arm objective-c inline-assembly
我正在尝试理解以下代码:
inline SInt32 smul32by16(SInt32 i32, SInt16 i16)
{
register SInt32 r;
asm volatile("smulwb %0, %1, %2" : "=r"(r) : "r"(i32), "r"(i16));
return r;
}
Run Code Online (Sandbox Code Playgroud)
有人知道这个汇编指令做什么吗?
更新: PS我使用目标C。我应该从汇编中了解一些代码。这就是为什么我很难理解这段代码的原因。
它确实以有符号的16位乘法乘以32位,并返回48位结果的前32位。b指定使用第三个操作数的低16位。
因此,将其转换为伪代码:
int_48 temp;
temp = i32*i16;
result = temp >> 16;
Run Code Online (Sandbox Code Playgroud)