Gnu arm 汇编求助
我最近刚学GNU arm 汇编, 但是遇到了很多问题,这个很难缠,麻烦大虾们帮助:
我写了一个程序叫test.s
.section .text
.globl _start
_start:
mov r0, #1
mov r1, #2
add r2, r0, r1
exit:
swi 0x11
使用
arm-linux-as -o test.o test.s
arm-linux-ld -o test test.o
生成test可执行文件,但是放在目标板里运行却报告illegal instruction ,我感觉没有指令错,况且指令也不多
,请大虾们指教这是什么原因?谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
环境都不说,我们怎么帮你?
什么叫作放进目标板?具体说清楚.
“放进目标板”,在我的认为里可是有无数种意思
不好意思,是这样的,我的开发主机是FC6,使用的交叉编译器是arm-linux-gcc-3.4.1,使用的是GNU arm汇编语法,开发板子使用的是linux 2.6.17的内核,处理器是at91rm9200含有arm920t的核
当板子引导启动起来,操作系统内核也工作了之后我把编译好的程序放到sdram中运行,执行中报告illegal instruction错,我猜测是swi软中断引起的,但是又不知道为什么
明白你的意思了,你是在调用exit系统调用是吧?
"把编译好的程序放到sdram中运行",是怎么放进去的?
ramdisk?
对,板子跑起来,ramdisk挂载了之后,放进去了,我觉得可能是调用SWI指令出的问题,但是不调用它,又无法调用exit系统调用,现在不知道该怎么办了!
复制代码
把这个编译出来对比一下
问题已经解决,原来我的ABI是OABI,SWI调用方式必须是swi(0x900000+ num)
多亏了大家的帮助,谢版主的妙招,给与我极大的帮助对了,通过使用
#include<linux/unistd.h>
#include<error.h>
_syscall1(void,exit,int,i);
int main()
{
exit(1);
}
命名为test.c
然后使用
arm-linux-gcc.3.4.1中的arm-linux-gcc -S test.c -o test.s
我发现里边退出程序的代码段中有一句
swi(0x900000+ 1)
再对比OABI的介绍,我发现我的编译器使用的是OABI,当我把程序改成
swi(0x900000+ 1)时,运行可以通过了
再次谢谢大家的热心帮助!
版主就是版主,当然不一样啊。