|
C语言最大公约数算法:
int gcd(int a, int b)
{
while (a != b)
{
if (a > b)
a = a - b;
else
b = b - a;
}
return a;
}
在ARM架构中如何用汇编语言实现算法:有二种想法,一种是纯粹用跳转指令,一种是用条件执行指令
根据ATPCS规范,gcd函数中接收参数时:r0=a,r1=b
1)条件执行指令
gcd:
cmp r0,r1 //r0-r1
subgt r0,r0,r1 //gt带符号数大于则执行减法 如果a>b则a=a-b
suble r1,r1,r0 //a<=b时b=b-a,算术逻辑运算指令执行之后还更新CPSR中相应的条件标志位
bne gcd
b lr //只有r1==r0时才会到此句,并且寄存器r0作为返回值给调用者
|
|