免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3425 | 回复: 11
打印 上一主题 下一主题

GNU arm 汇编求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-26 17:05 |只看该作者 |倒序浏览
我最近刚学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 ,我把前面的指令都注释掉了,只留下swi 0x11,仍然报告illegal instruction ,我感觉没有指令错,况且指令也不多,请大虾们指教这是什么原因?谢谢

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
2 [报告]
发表于 2009-02-26 17:24 |只看该作者
[root@localhost floattest]# arm-vfp-linux-objdump -d a

a:     file format elf32-littlearm

Disassembly of section .text:

00008074 <_start>:
    8074:       e3a00001        mov     r0, #1  ; 0x1
    8078:       e3a01002        mov     r1, #2  ; 0x2
    807c:       e0802001        add     r2, r0, r1

00008080 <exit>:
    8080:       ef000011        swi     0x00000011

看代码和反汇编的代码没发现什么问题,小弟这边是段错误,我汇编超级垃圾

论坛徽章:
0
3 [报告]
发表于 2009-02-26 17:42 |只看该作者
我刚开始编的时候也是出现段错误,后来发现是程序执行完后,没有跳出,在程序段外还要执行,后来加了个swi 软中断0x11是说停止,这样是没有段错误了,又出现了个非法指令,我把前面的指令都注释掉了,只留下了:
.section .text
.globl _start
_start:
    swi 0x11

编译了以后还是出现illegal instruction,我觉得是swi的问题但又不知道为什么?

论坛徽章:
0
4 [报告]
发表于 2009-02-26 22:33 |只看该作者
工具链是用 crosstool 生成的么?没配置错吧?

论坛徽章:
0
5 [报告]
发表于 2009-02-27 08:55 |只看该作者
交叉编译器使用的是网上下的已编译好的工具,配置使用的是缺省的

论坛徽章:
0
6 [报告]
发表于 2009-02-27 13:08 |只看该作者
.section .text
.globl _start
_start:
mov r1, #1
mov r2, #2
add r3, r1, r2

_exit:
mov r7, #0x1
swi 0

运行没有问题。

我用的内核linux-2.6.21的arch/arm/kernel/calls.S 的sys_exit的编号是1,系统调用是用EABI。
给你个参考链接:http://www.unixresources.net/lin ... 0/67/92/679297.html

论坛徽章:
0
7 [报告]
发表于 2009-02-27 13:41 |只看该作者
可以看一下你的程序的ABI:
arm-linux-objdump  -p test

test:     file format elf32-littlearm

Program Header:
    LOAD off    0x00000000 vaddr 0x00008000 paddr 0x00008000 align 2**15
         filesz 0x00000068 memsz 0x00000068 flags r-x
private flags = 4000000: [Version4 EABI]

论坛徽章:
0
8 [报告]
发表于 2009-02-27 14:32 |只看该作者
我使用的编译器是arm-linux-gcc-3.4.1
我编译出来后使用
arm-linux-objdump -p test
结果是:
test:     file format elf32-littlearm

Program Header:
    LOAD off    0x00000000 vaddr 0x00008000 paddr 0x00008000 align 2**15
         filesz 0x00000088 memsz 0x00000088 flags r-x
    LOAD off    0x00000088 vaddr 0x00010088 paddr 0x00010088 align 2**15
         filesz 0x00000000 memsz 0x00000000 flags rw-
private flags = 0: [APCS-32] [FPA float format]
我的却不是EABI的,很奇怪

论坛徽章:
0
9 [报告]
发表于 2009-02-27 14:33 |只看该作者
请问你使用的是哪个编译器啊?具体的

[ 本帖最后由 zxz430 于 2009-2-27 14:39 编辑 ]

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
10 [报告]
发表于 2009-02-27 14:39 |只看该作者
楼上
莫非因为是带浮点的原因?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP