64位整数的除法中有这样的写法,如下
#define do_div(n,base) \
({ \
register unsigned int __base asm("r4") = base; \
register unsigned long long __n asm("r0") = n; \
register unsigned long long __res asm("r2"); \
register unsigned int __rem asm(__xh); \
asm( __asmeq("%0", __xh) \
__asmeq("%1", "r2") \
__asmeq("%2", "r0") \
__asmeq("%3", "r4") \
"bl __do_div64" \
: "=r" (__rem), "=r" (__res) \
: "r" (__n), "r" (__base) \
: "ip", "lr", "cc"); \
n = __res; \
__rem; \
})
其中n是64位整数,register unsigned long long __n asm("r0") = n; 这样赋值之后,n的低32位存到了r0中,高32位就存到r1了,这段代码我在mini2440的开发板上调试过,为什么高32位会存到r1里?