Gnu arm 汇编求助

发布于 2022-09-18 19:20:02 字数 436 浏览 11 评论 0

我最近刚学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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

所有深爱都是秘密 2022-09-25 19:20:02

环境都不说,我们怎么帮你?
什么叫作放进目标板?具体说清楚.
“放进目标板”,在我的认为里可是有无数种意思

暖树树初阳… 2022-09-25 19:20:02

不好意思,是这样的,我的开发主机是FC6,使用的交叉编译器是arm-linux-gcc-3.4.1,使用的是GNU arm汇编语法,开发板子使用的是linux 2.6.17的内核,处理器是at91rm9200含有arm920t的核
当板子引导启动起来,操作系统内核也工作了之后我把编译好的程序放到sdram中运行,执行中报告illegal instruction错,我猜测是swi软中断引起的,但是又不知道为什么

月竹挽风 2022-09-25 19:20:02

明白你的意思了,你是在调用exit系统调用是吧?
"把编译好的程序放到sdram中运行",是怎么放进去的?
ramdisk?

盛夏已如深秋| 2022-09-25 19:20:02

对,板子跑起来,ramdisk挂载了之后,放进去了,我觉得可能是调用SWI指令出的问题,但是不调用它,又无法调用exit系统调用,现在不知道该怎么办了!

沉鱼一梦 2022-09-25 19:20:02
  1. #include <errno.h>
  2. #include <linux/unistd.h>
  3. _syscall1(void,exit,int,i);
  4. int main()
  5. {
  6.       exit(1);
  7. }

复制代码
把这个编译出来对比一下

叶落知秋 2022-09-25 19:20:02

问题已经解决,原来我的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)时,运行可以通过了
再次谢谢大家的热心帮助!

意犹 2022-09-25 19:20:02

版主就是版主,当然不一样啊。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文