第1个实验:用汇编语言点亮一盏LED
-
1 /* 2 ** 时间 :2016年4月8日08:15:02 3 ** 地点 :宿舍。 4 ** 目的 :用汇编语言控制LED。 5 ** 功能 :点亮第一盏LED:led1。 6 ** 7 ** 附加信息: 8 ** 1、运行环境:JZ2440v2开发板。 9 ** 2、程序编译环境:Ubuntu9.10 + 交叉编译工具arm-linux-gcc。 10 ** 3、所用到的寄存器有:GPFCON、GPFDAT 11 ** 4、led1所接到的引脚是GPF4引脚。 12 */ 13 14 .text @声明代码段的开始。 15 16 .global _start @定义一个全局标号_start(_start是GNU ARM汇编第一个标号的默认标号,如果写为其他的编译时会出现警告) 17 18 _start : 19 ldr r0, = 0x56000050 @0x56000050是GPFCON寄存器的开始地址,将它赋给r0寄存器。 20 mov r1, #0x00000100 @将立即数0x00000100赋给r1寄存器。 21 str r1, [r0] @将r1寄存器的内容0x00000100写到地址0x56000000去,作用是配置led1所接的管脚为输出引脚。 22 23 ldr r0, = 0x56000054 @0x56000054是GPDAT寄存器的开始地址,将它赋给r0寄存器。 24 mov r1, #0x00 @将立即数0x00赋给r1寄存器。 25 str r1, [r0] @将r1寄存器的内容0x00写到地址0x56000054去,作用是配置led1所接的管脚输出低电平。 26 27 b halt_loop @调到标号halt_loop去执行。 28 29 halt_loop : @一个死循环。 30 b halt_loop
Makefile :#
# 时间 :2016年4月8日08:22:12
# 地点 :宿舍。
#led_on_S.bin : led_on_S.S
arm-linux-gcc -g -c led_on_S.S -o led_on_S.o
arm-linux-ld -Ttext 0x00000000 -g led_on_S.o -o led_on_S_elf
arm-linux-objcopy -O binary -S led_on_S_elf led_on_S.bin
arm-linux-objdump -D -m arm led_on_S_elf > led_on_S_elf.dis
arm-linux-objdump -D -b binary -m arm led_on_S.bin > led_on_S_bin.disclean :
rm -f *.o *.dis *.bin *elf