打印

帮忙看看这小段ARM汇编有什么问题,谢谢

[复制链接]
1387|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
crystal28|  楼主 | 2007-10-29 19:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
dofastdiv PROC
    MOV r2,r0
    mov r3,r1
    umull r1,r0,r2,r3   @r0返回结果
    ENDP
我想实现这样一个函数:
uint dofastdiv(uint a,uint b)
{
    return a * b / 2^32;//2^32为2的32 次方
}

相关帖子

沙发
xieqin| | 2007-10-30 11:58 | 只看该作者

最基本的返回语句都没有。

使用特权

评论回复
板凳
crystal28|  楼主 | 2007-10-30 14:36 | 只看该作者

to楼上:返回语句怎么写?加在哪儿?不是r0是返回值吗

使用特权

评论回复
地板
zssmcu| | 2007-10-30 16:14 | 只看该作者

r0是返回值,但是得有返回语句啊!

MOV   pc,lr

使用特权

评论回复
5
crystal28|  楼主 | 2007-10-31 10:45 | 只看该作者

我想确认一下,如何返回值是void,MOV pc,lr就不用了是吗?

使用特权

评论回复
6
xieqin| | 2007-10-31 11:59 | 只看该作者

不用与没有是不相关的

使用特权

评论回复
7
crystal28|  楼主 | 2007-10-31 12:04 | 只看该作者

楼上是说这一句还要有?

MOV   pc,lr

使用特权

评论回复
8
wishcom| | 2007-10-31 21:36 | 只看该作者

对!

有了MOV   pc,lr函数才能返回。
而返回值是由ATPCS来定义的。
MOV   pc,lr与返回值没有关系,他的作用相当于C中函数实现中的反括号
uint dofastdiv(uint a,uint b)
{
    return a * b / 2^32;//2^32为2的32 次方
} //反括号可以看作MOV   pc,lr......

使用特权

评论回复
9
crystal28|  楼主 | 2007-11-1 10:32 | 只看该作者

非常感谢,那进入函数也就是函数的左括号不需要另加语句

使用特权

评论回复
10
xieqin| | 2007-11-1 21:53 | 只看该作者

如果不研究ATPCS和汇编C文件,你的问题永远问不完

使用特权

评论回复
11
crystal28|  楼主 | 2007-11-2 09:43 | 只看该作者

那我找找

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

45

帖子

2

粉丝