arm汇编最大公约数
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作为返回值给调用者
2)纯粹用跳转指令
gcd:
cmp r0,r1
beq end //a==b相等则退出
blt less //a<b
subs r0,r0,r1 //if(a>b) a=a-b 同时指令执行之后置相应标志位 其实也可以用sub r0,r0,r1
b gcd
less:
subs r1,r1,r0 //b=b-a 其实也可以用sub r1,r1,r0
b gcd
end
页:
[1]