发布网友 发布时间:2022-04-21 17:52
共1个回答
热心网友 时间:2023-07-22 14:28
半年没接触汇编了,答得不标准。。 不过大体就是这个意思
R0 = 0 的时候 执行 R1+R2结果存到R0
R0 = 1 的时候执行R1-R2结果存到R0
START
MOV R0, #0 @r0 = 0
MOV R1, #3 @ r1=3
MOV R2, #2 @ r2=2
BL ARITHFUNC @ 调用子程序跳到ARITHFUNC
ARITHFUNC
CMP R0, #num @ R0*在小于等于num的范围
MOVHS PC, LR @大于不执行加减直接返回
ADR R3, JUMPTABLE @把 JUMPTABLE的地址放到R3
LDR PC, [R3,R0,LSL #2] @ 跳转到R3+R0x4的地址
JUMPTABLE @把加减两个子程序标签排列放两个32位地址
DCD DoAdd
DCD DoSub
DoAdd
ADD R0, R1, R2 @ R1加R2放到R0
MOV PC, LR @返回
DoSub
SUB R0, R1, R2 @R1减R2放到R0
MOV PC, LR @ 返回追问你回答很好,你把这段程序改成c语言,我就采纳你的答案,并追加分,谢谢
追答勉强写个。。我真不会C语言啊。。 aa必须是0或者1 , num 是1
hanshu(aa,bb,cc,num)
if (aa <= num)
{
return;
}
if (bb == 0)
{
aa = bb + cc;
return aa;
}
if (bb == 1)
{
aa = bb - cc;
return aa;
}