韦东山Linux嵌入式学习——硬件复习

Linux嵌入式学习——点个灯(四)


本文是基于韦东山视频的学习笔记

汇总点这

勘误

在前一篇的博文中,代码有一个地方敲错了。

.text
.golbal _start

_start:
	
	LDR R1, =0x56000050

	LDR R0, =0x0100
	STR R0, [R1]

	LDR R1, =0x56000054

	LDR R0, =0x0010    ;此处应为LDR R0, =0
	STR R0, [R1]	

halt:
	b halt

汇编分解

LDR R1, =0x56000050

这种都是伪指令,意思是实际上,这句话包含了两种指令。想仔细研究汇编,我们先把bin文件反编译一下,得到机器码看一看。
首先在Makefile文件添加上这句脚本
arm-linux-objdump -D nLED1.elf > nLED1.dis
执行后得到nLED1.dis

nLED1.dis

nLED1.elf:     file format elf32-littlearm


Disassembly of section .text:

00000000 <_start>:
   0:	e59f1014 	ldr	r1, [pc, #20]	; 1c <halt+0x4>
   4:	e3a00c01 	mov	r0, #256	; 0x100
   8:	e5810000 	str	r0, [r1]
   c:	e59f100c 	ldr	r1, [pc, #12]	; 20 <halt+0x8>
  10:	e3a00000 	mov	r0, #0
  14:	e5810000 	str	r0, [r1]

00000018 <halt>:
  18:	eafffffe 	b	18 <halt>
  1c:	56000050 	undefined instruction 0x56000050
  20:	56000054 	undefined instruction 0x56000054

Disassembly of section .ARM.attributes:

00000000 <.ARM.attributes>:
   0:	00001941 	andeq	r1, r0, r1, asr #18
   4:	61656100 	cmnvs	r5, r0, lsl #2
   8:	01006962 	tsteq	r0, r2, ror #18
   c:	0000000f 	andeq	r0, r0, pc
  10:	00543405 	subseq	r3, r4, r5, lsl #8
  14:	01080206 	tsteq	r8, r6, lsl #4
  18:	Address 0x00000018 is out of bounds.

可以看到 LDR R1, =0x56000050 这一句指令分成了 ldr r1, [pc, #20]
其中,pc是程序寄存器。

具体详细的汇编不打算详写,具体可以看韦东山视频新一期的第八课第四节。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值