realview mdk3.05以上
在mdk中有如下内嵌汇编函数 __asm long division32(long dividend, long divisor) { sdiv r0,r1 } __asm long long mac64(long long l00, long l0, long l1) { smlal r0,r1,r2,r3 } 在主程序中分别调用他们 l00=mac64(100000000,1000,20000); l0=division32(10000000,3000); 当两个函数的调用位置交换之后,为什么l00和l0结果会不同?
主要的问题是内嵌汇编函数的最后没有bx lr,按照上面内嵌汇编函数的定义顺序:
如果先调用mac64,则在执行完mac64后它会自动执行接在它后面的程序而不会返回到调用它的地方。这样l00可以得到正确的结果,但是l0得不到,因为division32根本就没有被调用。
如果先调用division32,则在执行完division32后它会自动执行它后面的程序,也就是mac64。不过这个时候mac64并没有被调用,mac64里面r0,r1的值是执行完division32后的值。这样l0可以得到正确的结果但是l00却不行。
内嵌汇编程序调用顺序不同导致结果不同是怎么回事? -九游会网页
问题类别:arm 开发工具 > mdk-arm | 浏览次数:2329 |
发布日期:2012/4/23 17:05:16 | 文章来源:米尔科技 |
回复日期:2012/5/7 15:59:15 |