嵌入式linux编程arm初步接触之汇编、Makefile

    近日,买了一块韦东山的JZS3C2440开发板用来学习linux开发,经过几天时间的摆弄,今天,终于实现了usb烧写裸机程序。
    还是从经典的点灯开始,首先新建一个名为led.S的汇编文件,然后代码如下所示

.text
.global _start
_start:
	LDR R0,=0x56000050		;取地址0x56000050存放到R0寄存器
	MOV R1,#0x00000100		;赋值0x000000100给R1寄存器
	STR R1,[R0]				;R1寄存器内容加载到R0寄存器存储的地址处
	LDR R0,=0X56000054		;取地址0x56000054存放到R0寄存器
	MOV R1,#0X00000000		;赋值0x000000000给R1寄存器
	STR R1,[R0]				;R1寄存器内容加载到R0寄存器存储的地址处
MAIN_LOOP:					;无限循环
	B	MAIN_LOOP

Mkaefile如下

led.bin:led.S
	arm-linux-gcc -g -c -o led.o led.S
	arm-linux-ld -Ttext 0x0000000 -g led.o -o led_elf
	arm-linux-objcopy -O binary -S led_elf led.bin
	arm-linux-objdump -D -m arm led_elf > led.dis
/*************************************************************************************
led.bin:led.S 表明led.bin文件依赖led.S文件
arm-linux-gcc -g -c -o led.o led.S  表示led.o依赖led.S文件生成
arm-linux-ld -Ttext 0x0000000 -g led.o -o led_elf 表示elf格式的文件通过led.o生成,Ttext指明链接生成的代码加载地址
arm-linux-objcopy -O binary -S led_elf led.bin表示把els格式的文件转化成bin文件
arm-linux-objdump -D -m arm led_elf > led.dis 表示生成反汇编代码
**************************************************************************************/

生成的反汇编代码如下

led_elf:     file format elf32-littlearm

Disassembly of section .text:

00000000 <_start>:
   0:	e59f0014 	ldr	r0, [pc, #20]	; 1c <.text+0x1c>
   4:	e3a01c01 	mov	r1, #256	; 0x100
   8:	e5801000 	str	r1, [r0]
   c:	e59f000c 	ldr	r0, [pc, #12]	; 20 <.text+0x20>
  10:	e3a01000 	mov	r1, #0	; 0x0
  14:	e5801000 	str	r1, [r0]

00000018 <MAIN_LOOP>:
  18:	eafffffe 	b	18 <MAIN_LOOP>
  1c:	56000050 	undefined
  20:	56000054 	undefined
Disassembly of section .debug_aranges:

分析了一下代码,我编写的汇编代码里指定的地址,编译以后都给我存放到数据区了,在地址的0x1c和0x20处,这样的话,是通过寻址得到的一个地址,跟intel8086系列指令是有点不一样的,如果是8086系列的cpu,基本上这个地址数据直接就在代码段里面,不会放到数据段里面间接寻址得到。



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值