arm汇编学习(一)
之前断断续续看ARM,啥也没学到的感觉。开始系统学习arm,坚持下来,从arm开发环境,到arm模拟器实际运行。GNU AS汇编编译语法
摘自skyeye arm_hello的代码
start.S:
#define MODE_SVC 0x13 #define I_BIT 0x80 .text .align 4 .global begin .type begin, function begin: /*disable I-bit*/ mov r0, #I_BIT|MODE_SVC msr cpsr_c, r0 //设置状态寄存器,I位为1,禁止IRQ中断 ldr sp, =irq_stack @ set sp_irq = irq_stack bl hello //跳转到hello,子程序调用 b begin //又跳转到begin .data .align 4 irq_stack: .space 4096
hello.c:
#define BOGO_MIPS 1000000 void hello(void) { int i; char * hellostr="helloworld"; long* paddr=(long*)0xfffd001c; //因为AT91的UART0的基址为0xfffd0000,USART发送寄存器US_THR的偏移量是0x1c。所以向0xfffd001c地址写入字符就是向串口发送字符。Skyeye就会把字符打印到屏幕上 int timeout ; while(1){ timeout = 0; while(++timeout != BOGO_MIPS); for(i=0;i<10;i++) { * paddr=hellostr[i]; } } return; }
hello.lds:
OUTPUT_ARCH(arm) ENTRY(begin) //符号begin设置为入口地址 SECTIONS { . = 0x1000000; //当前地址为0x1000000 .text : { *(.text) *(.rodata) } . = ALIGN(8192); .data : {*(.data)} .bss : {*(.bss)} /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_info 0 : { *(.debug_info) } .debug_line 0 : { *(.debug_line) } .debug_pubnames 0 : { *(.debug_pubnames) } .debug_aranges 0 : { *(.debug_aranges) } }
Makefile:
CC=arm-elf-gcc LD=arm-elf-ld CFLAGS= -c -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -pipe -g -mapcs-32 -march=armv4 -mtune=arm7tdmi LDFLAGS= -N -p -X -Thello.lds LIB= all: hello hello: start.o hello.o $(LD) $(LDFLAGS) start.o hello.o -o hello arm-elf-objdump -xS hello > hello.s arm-elf-readelf -a hello > hello.r arm-elf-nm hello > hello.n start.o:start.S $(CC) $(CFLAGS) start.S hello.o:hello.c $(CC) $(CFLAGS) hello.c clean: rm -rf *.o *.elf *.gdb hello *.r *.n *.s
refer link:
skyeye安装文章
http://blog.csdn.net/keyboardota/article/details/6864155
http://jaist.dl.sourceforge.net/project/skyeye/skyeye-documentation/skyeye-1.3.2_rc1/skyeyev3_usermanual-v6.pdf
ARM汇编开发环境,不用IDE环境,使用arm-elf-tools交叉编译环境
http://opensrc.sec.samsung.com/download.html 下载arm-elf-tools-20040427.sh
http://www.360doc.com/content/10/1206/22/1378815_75660576.shtml
http://wenku.baidu.com/view/d14e7a791711cc7931b7165d.html
ARM汇编编写
http://blog.csdn.net/dndxhej/article/details/7487264
http://blog.csdn.net/tigerjb/article/details/6201716
http://blog.chinaunix.net/uid-22315114-id-99977.html ldr mov区别
http://wenku.baidu.com/view/19ba4b6f7e21af45b207a800.html skyeye实例解析