s3c6410学习——汇编语言学习

1.c语言中内嵌汇编语言:

例程:

   #include <stdio.h>    

    int main()

   {

       int ret = 0;

 

       __asm__ __volatile__(

     "mov r0, #12 \n"

     " mov %0,r0 \n"

     :"=r"(ret)  /此冒号表示输出, =表示只写, +号表示可读可写

     : :"r0","r1"  //此冒号告诉编译器不要分配这些寄存器给%0

)
     printf("ret = %d\n",ret);

     return 0;

  }

2.

#include <stdio.h>

int main(void)
{
 int ret = 88, num = 0;

 __asm__ __volatile__ (
#if 0
 "mov %1, %0 \n"
 :"+r"(ret), "=r"(num)
#endif

 "mov %0, %1\n"
 :"=r"(num)
 :"r"(ret)  //此冒号表示输入, r是表示在汇编里用寄存器代替相应的c语言变量
 );

 printf("num = %d\n", num);
 return 0;
}

3.

#include <stdio.h>

int main(void)
{
 __asm__ __volatile__ (
// "mov r0, #0x000ff00 \n"
 "ldr r0, =0x123456 \n"
 );

 return 0;
}

4.

#include <stdio.h>


int main(void)
{
 int ret = 0; 

 __asm__ __volatile__ (
 "ldr r2, = 0x12345678 \n"
 "add r5, r2, #0x11 \n"
 "mov %0, r5 \n"
 :"=r"(ret)
 ::"r2", "r5"
 );

 printf("ret = %p\n", ret);
 return 0;
}

5.


#include <stdio.h>

int main(void)
{
 int num = 0x7788, ret = 0;

 __asm__ __volatile__ (
 "sub %0, %1, #0x11 \n" 

 :"=r"(ret)
 :"r"(num)
 );

 printf("ret = %p\n", ret);
 return 0;
}

6.


#include <stdio.h>

int main(void)
{
 int ret = 0;

 __asm__ __volatile__ (
 "mov r2, #8 \n"
 "mov r3, #9 \n"
 "mul r3, r2, r3 \n"
 "mov %0, r3 \n"
 :"=r"(ret)
 ::"r2", "r3"
 );

 printf("ret = %d\n", ret);
 return 0;
}

7.


#include <stdio.h>

int main(void)
{
 int ret = 0;

 __asm__ __volatile__ (
 "mov r2, #5 \n"
 "cmp r2, #6 \n"
 "moveq %0, #99 \n"
 "movne %0, #88 \n"

 :"=r"(ret)
 ::"r2"
 );

 printf("ret = %d\n", ret);
 return 0;
}

8.


#include <stdio.h>

int main(void)
{
 int ret = 0;


 __asm__ __volatile__ (
 "movs r0, #1 \n"
 "ldreq %0, =0x345 \n"
 "ldrne %0, =0x0 \n"
 :"=r"(ret)
 ::"r0"
 );
 
 printf("ret = %p\n", ret);

 return 0;
}

9.


#include <stdio.h>

int main(void)
{
 __asm__ __volatile__ (
 "ldr r3, =0x8ffffff \n"
 "loop: \n"

#if 0
 "sub r3, r3, #1 \n"
 "cmp r3, #0 \n"
 "bne loop \n"
#endif
 
 "subs r3, r3, #1 \n"
 "bne loop \n"
 
 );

 printf("after delay \n");
 return 0;
}

10.

#include <stdio.h>

int main(void)
{
 __asm__ __volatile__ (
 "ldr r0, =0xffff \n"
 
 "loop: \n"
  "ldr r2, =0xfff \n"
  "loop2: \n"
   "subs r2, r2, #1 \n"
   "bne loop2 \n"
 "subs r0, r0, #1 \n" 
 "bne loop \n"
 );

 printf("after loop \n");
 return 0;
}

 

11.


#include <stdio.h>

int main(void)
{
 unsigned int ret;

 __asm__ __volatile__ (
 "mrs %0, cpsr \n"
 :"=r"(ret)
 );
 
 printf("%p\n", ret & 0x1f);
 return 0;
}

12.

#include <stdio.h>

int main(void)
{
 // lsl  lsr
 // asl  asr
 int ret = 0;

 __asm__ __volatile__ (
 "mov r0, #1 \n"
 "mov %0, r0, lsl #2 \n" 
 :"=r"(ret)
 ::"r0"
 );

 printf("ret = %d\n", ret);
 return 0;
}

13.

#include <stdio.h>

int main(void)
{
 int ret = 0;

 __asm__ __volatile__ (
 "mov r2, #7 \n"
// "and %0, r2, #12 \n" 
 "orr %0, r2, #8 \n"
 :"=r"(ret)
 ::"r2"
 );

 printf("ret = %d\n", ret);

 return 0;
}

 

 

 

 

 

 

      

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值