我一直在尝试编译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
。
由于
答案 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)