热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

arm平台x86平台内嵌汇编

来源: 作者: 时间:2008-03-06 Tag: 点击:
//x86平台 x86指令集,intel风格test.c
#include <stdio.h>
int add(void) {
    long eax=4;
    long ebx=2;
   __asm__ __volatile__ ("addl %1, %0"
            : "=b"((long)ebx)
            : "a"((long)eax), "b"((long)ebx)
            : "1"
            );
 
   printf("ebx=%d\n", ebx);
   return 0;
  
}
int main(){
    int a=12;
    char *hello="hello,world\n";
    __asm__(
            ".intel_syntax noprefix\n"
            "mov eax,4\n"
            "mov ebx,1\n"
            "mov ecx,%0\n"
            "mov edx,%1\n"
            "int 0x80\n"
            ".att_syntax\n"
            :
            :"r"(hello),"r"(a)
            :"eax","ebx","ecx","edx"
    );
    add();
    exit(0);
}
-------------------------------------------------
//x86平台 x86指令集 ,at&t风格test.c
#include<stdio.h>
int sum(int a, int b)                                
{                                             
 int r;
        __asm__(
 "sub $0x4, %%esp\n"
 "movl 0xc(%%ebp), %%eax\n"
 "addl 0x8(%%ebp),%%eax\n"
 " movl %%eax, 0xfffffffc(%%ebp)\n"
 " movl 0xfffffffc(%%ebp), %%eax\n"
 " movl %%eax, %%eax\n"
  : "=a"(r)
  );                         
      return r;                             
}
int main()
{
        int x = sum(10,2);
        printf("x = %d\n", x);
        return 0;
}

gcc -o test test.c
-------------------------------------------------
//arm 平台,用arm平台的指令集 ,test.c

int main()
{
 //printf("starting...\n");
 //直接内嵌汇编
     __asm__(
            "ldr r0,  =0x30000000\n"//别忘记加个等号
            "mov r1,#1\n"
            "str    r1,[r0]\n"
            );

}
arm-linux-gcc -o test test.c

最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册