ARM 作业

1.请用汇编语言实现 以下C函数的功能。

int  test( int a, int b, int c, int d ){

     return (a*b+c-d);

}  

 

int main(int args)

{

  int nResult = 0;

  int nTemp = 0;

  int a = 2;

  int b = 3;

  int c = 4;

  int d = 5;

 

  __asm{

MUL nTemp,a,b

ADD nTemp,nTemp,c

  SUB nResult,nTemp,d

  }

  return nResult;

}

或者

test.c

void test(int a, int b, int c, int d);

int main(int args)

{

  test(2,3,4,5);

  return 0;

}

 

compute.s

EXPORT test 

test PROC

MUL r4,r0,r1

ADD r4,r4,r2

SUB r0,r4,r3

MOV pc,lr

ENDP

//结果保存在R0中,

 

 

2. 下面是一个汇编程序调用C程序的例

程,请问程序中有何错误? 如果没有错

误,输出结果是result = ?

int mycompute( int a, int b , int c )

{

   return ( a*(b+c));

}

 

IMPORT mycompute

test2 PROC

        PUSH    {r0-r10,lr}       

        MOV      r1,#2

        MOV      r0,#1     

        BL         mycompute

        MOV      r10,r0

        MOV      r1,r10

        ADR      r0,|L1.120|

        BL       __2printf

        MOV      r0,#0

        POP      {r0-r10,pc}

        ENDP

 

|L1.120|

        DCB      "result = 0x%x",0

        DCB      0

        DCB      0 

3. FIQ模式与IRQ模式相比,多了R8-R12这几个寄存器,

这么设计的意义在于什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值