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

[复制链接]
2204|10
 楼主| crystal28 发表于 2007-10-29 19:01 | 显示全部楼层 |阅读模式
dofastdiv&nbsp;PROC<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;r2,r0<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r3,r1<br />&nbsp;&nbsp;&nbsp;&nbsp;umull&nbsp;r1,r0,r2,r3&nbsp;&nbsp;&nbsp;@r0返回结果<br />&nbsp;&nbsp;&nbsp;&nbsp;ENDP<br />我想实现这样一个函数:<br />uint&nbsp;dofastdiv(uint&nbsp;a,uint&nbsp;b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;*&nbsp;b&nbsp;/&nbsp;2^32;//2^32为2的32&nbsp;次方<br />}
xieqin 发表于 2007-10-30 11:58 | 显示全部楼层

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

  
 楼主| crystal28 发表于 2007-10-30 14:36 | 显示全部楼层

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

  
zssmcu 发表于 2007-10-30 16:14 | 显示全部楼层

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

MOV&nbsp;&nbsp;&nbsp;pc,lr
 楼主| crystal28 发表于 2007-10-31 10:45 | 显示全部楼层

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

  
xieqin 发表于 2007-10-31 11:59 | 显示全部楼层

不用与没有是不相关的

  
 楼主| crystal28 发表于 2007-10-31 12:04 | 显示全部楼层

楼上是说这一句还要有?

MOV&nbsp;&nbsp;&nbsp;pc,lr
wishcom 发表于 2007-10-31 21:36 | 显示全部楼层

对!

有了MOV&nbsp;&nbsp;&nbsp;pc,lr函数才能返回。<br />而返回值是由ATPCS来定义的。<br />MOV&nbsp;&nbsp;&nbsp;pc,lr与返回值没有关系,他的作用相当于C中函数实现中的反括号<br />uint&nbsp;dofastdiv(uint&nbsp;a,uint&nbsp;b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;*&nbsp;b&nbsp;/&nbsp;2^32;//2^32为2的32&nbsp;次方<br />}&nbsp;//反括号可以看作MOV&nbsp;&nbsp;&nbsp;pc,lr......<br />
 楼主| crystal28 发表于 2007-11-1 10:32 | 显示全部楼层

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

  
xieqin 发表于 2007-11-1 21:53 | 显示全部楼层

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

  
 楼主| crystal28 发表于 2007-11-2 09:43 | 显示全部楼层

那我找找

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

45

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部