ubutun14.04安装mips编译器

Ubuntu是安装在x86上的,我想要mips的汇编,但是gcc编译的汇编文件默认是AT&T格式的汇编,于是需要安装交叉编译工具链,看了几篇blog结果发现各种问题,不是要自己编译,就是软件源配置有问题,还有版本问题。因为Ubuntu原本的镜像源(/etc/apt/source.list)速度特别慢,还会出mis hashmach问题,于是先更换了软件源,测试了Ubuntu官方给的14.04的几个教育网的源http://wiki.ubuntu.org.cn/Template:14.04source,发现清华的ip6挺快的,于是将/etc/apt/source.list备份,并新建了source.list

sudo mv /etc/apt/sources.list{,.back}
vim /etc/apt/sources.list

添加清华的ipv6源

deb http://mirrors.6.tuna.tsinghua.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb http://mirrors.6.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb http://mirrors.6.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb http://mirrors.6.tuna.tsinghua.edu.cn//ubuntu/ trusty-security main multiverse restricted universe
deb http://mirrors.6.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe
deb-src http://mirrors.6.tuna.tsinghua.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb-src http://mirrors.6.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb-src http://mirrors.6.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb-src http://mirrors.6.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main multiverse restricted universe
deb-src http://mirrors.6.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe

更新软件包列表并安装gcc-arm-linux-gnueabi

sudo apt-get update
sudo aptitude search arm-linux
sudo aptitude install gcc-arm-linux-gnueabi
whereis arm-linux-gnueabi-gcc

测试

arm-linux-gnueabi-gcc fibonacc.c -S

fibonacc.c 和 fibonacc.s内容如下:

int fib(int n)
{
    int a = 0; int b = 1;
    int c = a + b; 
    while(n > 1) {
    c = a + b;
    a =b; b = c;
    n--;
    }
    return c;
}
    .arch armv5t
    .fpu softvfp
    .eabi_attribute 20, 1
    .eabi_attribute 21, 1
    .eabi_attribute 23, 3
    .eabi_attribute 24, 1
    .eabi_attribute 25, 1
    .eabi_attribute 26, 2
    .eabi_attribute 30, 6
    .eabi_attribute 34, 0
    .eabi_attribute 18, 4
    .file   "fibonacc.c"
    .text
    .align  2
    .global fib
    .type   fib, %function
fib:
    @ args = 0, pretend = 0, frame = 24
    @ frame_needed = 1, uses_anonymous_args = 0
    @ link register save eliminated.
    str fp, [sp, #-4]!
    add fp, sp, #0
    sub sp, sp, #28
    str r0, [fp, #-24]
    mov r3, #0
    str r3, [fp, #-16]
    mov r3, #0
    str r3, [fp, #-12]
    ldr r2, [fp, #-16]
    ldr r3, [fp, #-12]
    add r3, r2, r3
    str r3, [fp, #-8]
    b   .L2
.L3:
    ldr r2, [fp, #-16]
    ldr r3, [fp, #-12]
    add r3, r2, r3
    str r3, [fp, #-8]
    ldr r3, [fp, #-12]
    str r3, [fp, #-16]
    ldr r3, [fp, #-8]
    str r3, [fp, #-12]
    ldr r3, [fp, #-24]
    sub r3, r3, #1
    str r3, [fp, #-24]
.L2:
    ldr r3, [fp, #-24]
    cmp r3, #1
    bgt .L3
    ldr r3, [fp, #-8]
    mov r0, r3
    add sp, fp, #0
    ldmfd   sp!, {fp}
    bx  lr
    .size   fib, .-fib
    .ident  "GCC: (Ubuntu/Linaro 4.7.3-12ubuntu1) 4.7.3"
    .section    .note.GNU-stack,"",%progbits

这里顺便介绍下常用的几种汇编格式:

GNU:维基百科上说:GNU,一个类UNIX的操作系统,由GNU计划推动,目标在于建立一个完全相容于UNIX的自由软件环境。这里GNU代表了一种平台,一类开发环境,更是一种汇编程序设计的语法格式。我们这里可以认为他代表一类组织,有自己的独特的程序设计规范,就是AT&T规范,一般称之为AT&T汇编,提到AT&T汇编,就应该知道这是另一种汇编语法格式,汇编指令是由处理器决定的。跟语法格式无关。

ARM:代表一类处理器,比如INTEL处理器,ARM处理器。不同公司设计的CPU核心,一般指令格式也不同。不同体系结构的CPU,指令集一般也不同,因为体系结构对应指令集。

汇编:指的是汇编语言。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。GNU有自己的一套独立的编译环境,所遵从的C语言、汇编语言等程序设计的语法格式也是不同的。
如,PC机上,对于x86系列处理器,有AT&T汇编和INTEL汇编两种语法格式。这两种格式的汇编,有指令大小写、操作数赋值方向、前缀、后缀、寻址方式等区别。因为是一类处理器,X86系列,指令是一样的。

详细可以看这篇blog:http://www.cnblogs.com/hicjiajia/archive/2012/05/22/2513999.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值