Openwrt MT7688: 汇编实现hello world

本文介绍如何在OpenWrt-Widora环境下使用MIPS汇编语言编写HelloWorld程序。通过直接调用系统调用来实现打印和退出功能,使得最终生成的可执行文件体积更小。文章详细展示了从代码编写到文件剥离符号的整个过程。
摘要由CSDN通过智能技术生成

在openwrt-widora环境下用汇编实现hello world, 用syscall来调用print和exit,其特点就是编译出来的可执行文件比用C编译出的小了很多。

1. 代码:  asmhello.S

#include <asm/regdef.h>
#include <asm/unistd.h>

.data
msg:    .ascii  "Hello World!\n"
length: .word   . - msg

.text
.globl main
main:
	move a0,$0
	la a1,msg
	lw a2,length
	li v0,__NR_write
	syscall

	li v0,__NR_exit
	syscall

2. 编译:

./openwrt-gcc -c -fno-builtin asmhello.S

3. 链接:
./openwrt-ld -e main -static asmhello.o -o hello

4. 剥离符号:
./openwrt-strip hello -o hello

(openwrt-xx等是相应的openwrt环境下的交叉编译工具)

5. 查看编译出来的文件:

./openwrt-objdump -d /tmp/hello
   004000b0 <.text>:
  4000b0:       00002021        move    a0,zero
  4000b4:       3c050041        lui     a1,0x41
  4000b8:       24a500e0        addiu   a1,a1,224
  4000bc:       3c060041        lui     a2,0x41
  4000c0:       8cc600f0        lw      a2,240(a2)
  4000c4:       24020fa4        li      v0,4004
  4000c8:       0000000c        syscall
  4000cc:       24020fa1        li      v0,4001
  4000d0:       0000000c        syscall

./openwrt-objdump -s /tmp/hello
/tmp/hello:     file format elf32-tradlittlemips
Contents of section .reginfo:
 400094 74000000 00000000 00000000 00000000  t...............
 4000a4 00000000 f0804100                    ......A.
Contents of section .text:
 4000b0 21200000 4100053c e000a524 4100063c  ! ..A..<...$A..<
 4000c0 f000c68c a40f0224 0c000000 a10f0224  .......$.......$
 4000d0 0c000000 00000000 00000000 00000000  ................
Contents of section .data:
 4100e0 48656c6c 6f205769 646f7261 210a0000  Hello World!...
 4100f0 10000000 00000000 00000000 00000000  ................

参考资料:

  http://www.tldp.org/HOWTO/Assembly-HOWTO/mips.html

《程序员的自我修养--链接,装载库》(俞甲子等)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Midas-Zhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值