请教arm汇编程序转换为c程序,谢谢!

zxk860611 2008-05-05 11:00:10
mulsr:
; ------
; Fractional multiply with single bit left shift and rounding.
export |mulsr|
|mulsr|
stmfd sp!,{v1,v2,v3,lr}
; strip signs
cmps a1, #0 ; check sign of input
rsbmi a1, a1, #0 ; create abs of input
mvnmi a3, #0 ; save sign,
movpl a3, #0 ; of input
cmps a2, #0 ; check sign of other input
rsbmi a2, a2, #0 ; create abs of other input
mvnmi a4, #0 ; save sign,
movpl a4, #0 ; of other input
eor v3, a3, a4 ; combine signs and save
; unsigned long multiply
mov a3, a1, lsr #16 ; Split input ,
eor v1, a1, a3, lsl #16 ; into two halves.
mov a4, a2, lsr #16 ; Split other input,
eor v2, a2, a4, lsl #16 ; into two halves.
mul a1, a3, a4 ; Produce,
mul a2, v1, v2 ; the,
mul a3, v2, a3 ; partial,
mul a4, v1, a4 ; products.
adds a2, a2, a4, lsl #16 ; Combine,
adc a1, a1, a4, lsr #16 ; the,
adds a2, a2, a3, lsl #16 ; partial,
adc a1, a1, a3, lsr #16 ; products.
; make result signed
cmps v3, #0 ; check result sign
beq |exit_d| ; don't negate result if positive
rsbs a2, a2, #0 ; else negate,
rsc a1, a1, #0 ; the result.
|exit_d|
; shift and round
movs a2, a2, lsl #1 ; shift lsw 1 bit left,
adc a1, a1, a1 ; and msw, for fractional result.
adds a2, a2, #0x80000000 ; add 1 to the bit below,
adc a1, a1, #0 ; the msw for rounding.
ldmfd sp!,{v1,v2,v3,pc}^ ; return, a1 = msw of result.

end
...全文
328 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxk860611 2008-05-06
  • 打赏
  • 举报
回复
是自己看不太懂啊,我知道些线性汇编的指令,但跟arm汇编的指令还是有些差别的,从网上也没能下下来,请高手指点,谢谢!
Treazy 2008-05-05
  • 打赏
  • 举报
回复
这个是楼主自己不愿做呢?还是自己本身就看不懂?

如果是前者,这点难度的汇编还是很容易的,自己花点时间就搞定了

如果是后者,看下对应的arm汇编!
qmm161 2008-05-05
  • 打赏
  • 举报
回复
汇编转c?有点难度...
但是这段汇编很简单啊,这么几行

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧