1. 编译运行环境见
http://www.cnblogs.com/linucos/archive/2013/03/01/2938517.htm
2. 汇编例子
.data
msg: .asciz "hello, world\n"
.text
.global main
main:
push {r0,r1,r2,lr}
ldr r1, =msg @ address
mov r0, #1 @ stdout
mov r2, #13 @ length
swi #0x900004 @ sys_write
pop {r0,r1,r2,pc}
msg: .asciz "hello, world\n"
.text
.global main
main:
push {r0,r1,r2,lr}
ldr r1, =msg @ address
mov r0, #1 @ stdout
mov r2, #13 @ length
swi #0x900004 @ sys_write
pop {r0,r1,r2,pc}
3. 编译运行
arm-linux-gnueabi-gcc asmhello.s -o asmhello
qemu上运行./asmhello 即可
4. C例子
#include <stdio.h>
int main(void)
{
fprintf(stderr, "%s\n", __FILE__);
return 0;
}
int main(void)
{
fprintf(stderr, "%s\n", __FILE__);
return 0;
}
5. 编译运行
arm-linux-gnueabi-gcc hello.c -o hello
6. C例子反汇编
arm-linux-gnueabi-objdump -d hello > hello.dis
发现:main函数返回用 pop {r7,pc}实际对应的是push {r7,lr}