smulwb组装说明

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。我应该从汇编中了解一些代码。这就是为什么我很难理解这段代码的原因。

Nic*_*rth 5

它确实以有符号的16位乘法乘以32位,并返回48位结果的前32位。b指定使用第三个操作数的低16位。

因此,将其转换为伪代码:

int_48 temp;
temp = i32*i16;
result = temp >> 16;
Run Code Online (Sandbox Code Playgroud)