Assembly ARM程序集添加有符号半字

Assembly ARM程序集添加有符号半字,assembly,arm,Assembly,Arm,我正在做一个16声道的混音器。每个通道都是有符号半字(短) 我想把它们加在一起,然后除以16,结果就是一个有符号的半字。 我似乎不知道该怎么做才能保留这些标志。 如果我加上0x4fff和0x6fff,结果是负数,但我确实希望它是32位字中的正值,而不是负数半字。我很确定这里需要使用扩展标志,但欢迎提出任何建议。我尝试将每个输入值缩放到1/16,然后添加,这确实有效,但由于每个通道减少到12位,因此我失去了分辨率 如果我添加所有通道,并在添加之前对它们进行符号扩展,然后对添加的结果进行符号扩展,然

我正在做一个16声道的混音器。每个通道都是有符号半字(短) 我想把它们加在一起,然后除以16,结果就是一个有符号的半字。 我似乎不知道该怎么做才能保留这些标志。 如果我加上0x4fff和0x6fff,结果是负数,但我确实希望它是32位字中的正值,而不是负数半字。我很确定这里需要使用扩展标志,但欢迎提出任何建议。我尝试将每个输入值缩放到1/16,然后添加,这确实有效,但由于每个通道减少到12位,因此我失去了分辨率


如果我添加所有通道,并在添加之前对它们进行符号扩展,然后对添加的结果进行符号扩展,然后执行asr#4移位以返回到16位结果。这行吗?

一旦加载并添加了2个值,结果就已经在32位寄存器中了。对除法使用算术移位应该保留最终结果的有符号性
ldrsh
将为您将负值扩展为32位


ldrsh r0, [r2], #4
ldrsh r1, [r2], #4
add r0, r0, r1
mov r0, r0, asr #4

或者类似的东西。最后一个班次也可以很容易地与另一个操作代码组合。

请访问gbadev.org。若你们需要的话,汇编程序中有一个ARM混音器已经为你们编码好了。