为SPARC体系结构配置GCC

时间:2015-01-27 01:43:55

标签: gcc assembly sparc

我一直在尝试编译SPARC程序。只是一个简单的直接从书中取出:SPARC Architecture, Assembly Language Programming, and C: Second Edition。但是,我收到一个错误,导致我认为SPARC在我的计算机上配置不正确。这是在Windows机器上。

.global main
main:
    save    %sp,    96,    %sp
    mov     9,      %l0
    sub     %l0,    1,     %o0
    sub     %l0,    7,     %o1
    call    .mul        
    nop
    sub     %l0,    11,    %o1
    call    .div    
    mov     %o0,    %l1        

    mov     1,      %g1
    ta      0

我通过Cygwin 1.7.5安装了GCC 4.9.2。

尝试通过GCC编译时出现以下错误

C:\Users\Matt\Desktop>gcc expr.s -o expr
expr.s: Assembler messages:
expr.s: Warning: end of file not at end of a line; newline inserted
expr.s:3: Error: no such instruction: `save %sp,96,%sp'
expr.s:4: Error: bad register name `%l0'
expr.s:5: Error: bad register name `%l0'
expr.s:6: Error: bad register name `%l0'
expr.s:9: Error: bad register name `%l0'
expr.s:11: Error: bad register name `%o0'
expr.s:13: Error: bad register name `%g1'
expr.s:14: Error: no such instruction: `ta 0'

与其他架构相比,SPARC几乎所有的特色都是“错误”。

所以,我尝试专门为该程序设置架构:

gcc -march=sparc expr.s -o expr

这仍然会引发错误,这让我相信我的当​​前配置没有为SPARC设置。

我用来设置GCC的程序是:here

唯一的区别是我使用c,c++而不是为语言指定all

由于

2 个答案:

答案 0 :(得分:2)

你是对的,你的gcc没有为SPARC设置。如果您运行的是Windows,则运行的计算机上的ISA不是SPARC(很可能是x86)。您的ISA是硬件接口,无法通过软件升级进行更改。

要编译SPARC程序,您需要将gcc重建为SPARC交叉编译器(主机和目标ISA不同)。从源代码构建时,这是使用-target =标志完成的。为linux构建交叉编译器将类似于cygwin link

构建交叉编译器后,为了执行它,您需要一种模拟SPARC处理器的方法。使用诸如qemu之类的系统将起作用。

答案 1 :(得分:1)

Here's a small tutorial编译Sparc V8目标的简单程序并在Qemu上运行它们。本教程包括获取交叉编译器的步骤(假设您正在使用Linux)