链接地址学习笔记

发布者:EnchantedMelody最新更新时间:2024-10-15 来源: cnblogs关键字:链接地址  学习笔记  启动过程 手机看文章 扫描二维码
随时随地手机看文章

链接地址

启动过程

 

 

示例代码如下:

 

start.S 文件

.globl _start

_start:

/*硬件相关设置*/

ldr r0,=0x70000000

orr r0,r0,#0x13

mcr p15,0,r0,c15,c2,4

/*关看门狗*/

        

    bl test  /*位置无关*/

ldr pc, =test /*位置相关*/

 

ldr r0,=0x7E00400

mov r1,#0

str r1,[r0]

 

/*设置栈*/

ldr sp,=8*1024

bl main

halt:

b halt

test:

mov pc,lr

 

 

 

 

Led.c文件

void delay(){

volatile int i=0x1000;

while (i--);

}

 

volatile int i=0;

volatile int j=0x12345678;

volatile int k=0;

volatile int g;

 

int main(){

volatile unsigned long *gpkcon=(volatile unsigned long *)0x7F008800;

volatile unsigned long *gpkdat=(volatile unsigned long *)0x7F008808;

*gpkcon=0x1111;

while(1){

*gpkdat=i;

i++;

if(i==16)

i=0;

delay();

}

return 0;

}

 

 

Leds.lds文件

SECTIONS

{

. = 0x50000000;

.text : {

start.o

* (.text)

}

    

.data : {

* (.data)

}

 

bss_start = .;

.bss : {

* (.bss)

}

bss_end  = .;

}

 

Makefile 文件

led.bin: start.o led.o

arm-linux-ld -T leds.lds -o led.elf start.o led.o

arm-linux-objcopy -O binary led.elf led.bin

arm-linux-objdump -D led.elf > led.dis

 

start.o : start.S

arm-linux-gcc -o start.o start.S -c

led.o:led.c

arm-linux-gcc -o led.o led.c -c

 

clean:

rm *.o led.elf led.bin led.dis

 

 

Led.dis文件

 

led.elf:     file format elf32-littlearm

 

 

 

首地址为0x50000000;

 

Disassembly of section .text:

 

50000000 <_start>:

50000000: e3a00207  mov r0, #1879048192 ; 0x70000000

50000004: e3800013  orr r0, r0, #19

50000008: ee0f0f92  mcr 15, 0, r0, cr15, cr2, {4}

5000000c: e59f0014  ldr r0, [pc, #20] ; 50000028 

50000010: e3a01000  mov r1, #0

50000014: e5801000  str r1, [r0]

50000018: e3a0da02  mov sp, #8192 ; 0x2000

5000001c: eb00001e  bl 5000009c 

 

50000020 :

50000020: eafffffe  b 50000020 

 

50000024 :

50000024: e1a0f00e  mov pc, lr

50000028: 07e00400  strbeq r0, [r0, r0, lsl #8]!

5000002c: 00002541  andeq r2, r0, r1, asr #10

50000030: 61656100  cmnvs r5, r0, lsl #2

50000034: 01006962  tsteq r0, r2, ror #18

50000038: 0000001b  andeq r0, r0, fp, lsl r0

5000003c: 4d524105  ldfmie f4, [r2, #-20] ; 0xffffffec

50000040: 36373131  undefined instruction 0x36373131

50000044: 2d465a4a  vstrcs s11, [r6, #-296] ; 0xfffffed8

50000048: 09060053  stmdbeq r6, {r0, r1, r4, r6}

5000004c: 01090108  tsteq r9, r8, lsl #2

50000050: 0000020a  andeq r0, r0, sl, lsl #4

 

50000054 :

50000054: e52db004  push {fp} ; (str fp, [sp, #-4]!)

50000058: e28db000  add fp, sp, #0

5000005c: e24dd00c  sub sp, sp, #12

50000060: e3a03a01  mov r3, #4096 ; 0x1000

50000064: e50b3008  str r3, [fp, #-8]

50000068: e1a00000  nop ; (mov r0, r0)

5000006c: e51b3008  ldr r3, [fp, #-8]

50000070: e3530000  cmp r3, #0

50000074: 03a02000  moveq r2, #0

50000078: 13a02001  movne r2, #1

5000007c: e6ef2072  uxtb r2, r2

50000080: e2433001  sub r3, r3, #1

50000084: e50b3008  str r3, [fp, #-8]

50000088: e3520000  cmp r2, #0

5000008c: 1afffff6  bne 5000006c 

50000090: e28bd000  add sp, fp, #0

50000094: e8bd0800  pop {fp}

50000098: e12fff1e  bx lr

 

5000009c 

:

5000009c: e92d4800  push {fp, lr}

500000a0: e28db004  add fp, sp, #4

500000a4: e24dd008  sub sp, sp, #8

500000a8: e59f3060  ldr r3, [pc, #96] ; 50000110 

500000ac: e50b3008  str r3, [fp, #-8]

500000b0: e59f305c  ldr r3, [pc, #92] ; 50000114 

500000b4: e50b300c  str r3, [fp, #-12]

500000b8: e51b3008  ldr r3, [fp, #-8]

500000bc: e59f2054  ldr r2, [pc, #84] ; 50000118 

500000c0: e5832000  str r2, [r3]

500000c4: e59f3050  ldr r3, [pc, #80] ; 5000011c 

500000c8: e5933000  ldr r3, [r3]

500000cc: e1a02003  mov r2, r3

500000d0: e51b300c  ldr r3, [fp, #-12]

500000d4: e5832000  str r2, [r3]

500000d8: e59f303c  ldr r3, [pc, #60] ; 5000011c 

500000dc: e5933000  ldr r3, [r3]

500000e0: e2832001  add r2, r3, #1

500000e4: e59f3030  ldr r3, [pc, #48] ; 5000011c 

500000e8: e5832000  str r2, [r3]

500000ec: e59f3028  ldr r3, [pc, #40] ; 5000011c 

500000f0: e5933000  ldr r3, [r3]

500000f4: e3530010  cmp r3, #16

500000f8: 1a000002  bne 50000108 

500000fc: e59f3018  ldr r3, [pc, #24] ; 5000011c 

50000100: e3a02000  mov r2, #0

50000104: e5832000  str r2, [r3]

50000108: ebffffd1  bl 50000054 

5000010c: eaffffec  b 500000c4 

50000110: 7f008800  svcvc 0x00008800

50000114: 7f008808  svcvc 0x00008808

50000118: 00001111  andeq r1, r0, r1, lsl r1

5000011c: 50000124  andpl r0, r0, r4, lsr #2

 

Disassembly of section .data:

 

50000120 :

50000120: 12345678  eorsne r5, r4, #125829120 ; 0x7800000

 

Disassembly of section .bss:

 

50000124 :

50000124: 00000000  andeq r0, r0, r0

 

50000128 :

50000128: 00000000  andeq r0, r0, r0

 

5000012c :

5000012c: 00000000  andeq r0, r0, r0

 

Disassembly of section .comment:

 

00000000 <.comment>:

   0: 3a434347  bcc 10d0d24 <_start-0x4ef2f2dc>

   4: 74632820  strbtvc r2, [r3], #-2080 ; 0x820

   8: 312d676e  teqcc sp, lr, ror #14

   c: 312e382e  teqcc lr, lr, lsr #16

  10: 2941462d  stmdbcs r1, {r0, r2, r3, r5, r9, sl, lr}^

  14: 352e3420  strcc r3, [lr, #-1056]! ; 0x420

  18: Address 0x00000018 is out of bounds.

 

 

首地址为0

Disassembly of section .ARM.attributes:

 

00000000 <.ARM.attributes>:

   0: 00003341  andeq r3, r0, r1, asr #6

   4: 61656100  cmnvs r5, r0, lsl #2

   8: 01006962  tsteq r0, r2, ror #18

   c: 00000029  andeq r0, r0, r9, lsr #32

  10: 4d524105  ldfmie f4, [r2, #-20] ; 0xffffffec

  14: 36373131  undefined instruction 0x36373131

  18: 2d465a4a  vstrcs s11, [r6, #-296] ; 0xfffffed8

  1c: 09060053  stmdbeq r6, {r0, r1, r4, r6}

  20: 01090108  tsteq r9, r8, lsl #2

  24: 0412020a  ldreq r0, [r2], #-522 ; 0x20a

  28: 01150114  tsteq r5, r4, lsl r1

  2c: 01180317  tsteq r8, r7, lsl r3

  30: 031b021a  tsteq fp, #-1610612735 ; 0xa0000001

 

 

 

led.elf:     file format elf32-littlearm

 

 

Disassembly of section .text:

 

00000000 <_start>:

   0:   e3a00207        mov     r0, #1879048192 ; 0x70000000

   4:   e3800013        orr     r0, r0, #19

   8:   ee0f0f92        mcr     15, 0, r0, cr15, cr2, {4}

  /*

  Bl  test 的机器码   eb00,0006

                     1110, 1011,0000 0000 0000 0000 0000  0110   

                     --------------------------------------------------------------

                     1确定b/bl

                      剩余为偏移量

Branch instruction contains a signed 2's complement 24 bit offset. This is shifted left two bits, sign extended to 32

[1] [2]
关键字:链接地址  学习笔记  启动过程 引用地址:链接地址学习笔记

上一篇:DDR学习笔记
下一篇:arm学习笔记一(arm概述及其基本编程模型)

推荐阅读最新更新时间:2024-11-12 22:20

stm32学习笔记(二)按键实验
#include key.h #include delay.h ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK Mini STM32开发板 //按键输入 驱动代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2014/3/06 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2009-2019 //All
[单片机]
stm32<font color='red'>学习</font><font color='red'>笔记</font>(二)按键实验
MSP430学习笔记2-ADC12
开发版型号:SEED—MSP430F5529A 开发工具 :CCS 5.4v 以下内容是CCS中ADC12操作的一些简单的demo,现整理如下: 有关MSP430F5529芯片ADC12相关资料,可参考《MSP430x5xx and MSP430x6xx Family User's Guide (Rev. M)——Chapter 28 ADC12_A》 1:demo描述 Description: A single sample is made on A0 with reference to AVcc. Software sets ADC12SC to start sample and conver
[单片机]
MSP430<font color='red'>学习</font><font color='red'>笔记</font>2-ADC12
MSP430学习笔记——头文件解析之看门狗
MSP430设定的方法方便,但前提是看懂头文件定义,只有这样才能更好的运用。 #define __MSP430_HAS_WDT__ #define WDTCTL_ (0x0120u) DEFW( WDTCTL , WDTCTL_) 这一段中让人费解的就是DEFW,百度可以知道它代表新版本对寄存器的定义。 #define DEFCW(name, address) __no_init union { struct { volatile unsigned char name##_L; volatile unsigned char n
[单片机]
s3c2440 内存管理单元MMU学习笔记
学习了S3C2440内存管理单元MMU,主要参考了《嵌入式Linux应用开发完全手册》 (下载见 http://www.linuxidc.com/Linux/2011-01/31114.htm )。有两篇文章也说得很详细,分别是 http://www.linuxidc.com/Linux/2011-09/43526.htm 与 http://www.linuxidc.com/Linux/2011-09/43525.htm 感兴趣的可以参考一下,我就不重复内容了。但是它们在MMU地址变换过程这一块说得不太好理解。在此,我就按照我的理解将《嵌入式Linux应用开发完全手册》的相关内容解释一下,图片加点注释。如有错误,请大家不吝赐教,我
[单片机]
s3c2440 内存管理单元MMU<font color='red'>学习</font><font color='red'>笔记</font>
LPC11U35 SSP/SPI学习笔记
SSP (synchronous Seril Port)同步串行端口控制器,可支持SPI、TI和Microwire协议,一条总线允许有多个从机,但某一个时刻只允许有一个主机和一个从机进行通信。多应用于EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间(而I2C多用于同一单片机不同芯片之间的短距离通信)。 SPI支持全双工通信,而I2C仅支持半双工,Uart也支持全双工通信。 SPI通信是数据交换的过程,数据通过移位寄存器进行交换。 主机发送时,将一位数据写入TxFIFO移入移位寄存器,数据通过MOSI移出主机,从机通过MOSI移入从机,从机同时会从移位寄存器中移出一位数据到主机,如果是
[单片机]
LPC11U35 SSP/SPI<font color='red'>学习</font><font color='red'>笔记</font>
STM32学习笔记:【008】IIC通信协议详解
什么是IIC(I2C)?   IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司设计出来的一种简单、双向、二线制、同步串行总线。它是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。   那么也就是说,只要收发双方同时接入SDA(双向数据线)、SCL(同步时钟线)便可以进行通信。   I2C总线的工作速度分为 3 种模式(实际上,IIC的通信速率由SCL决定):     S(标准模式),测量与控制场合;     F(快速模式),速率为 400kb/s;(默认)     Hs(高速模
[单片机]
STM32<font color='red'>学习</font><font color='red'>笔记</font>:【008】IIC通信协议详解
STM32F103学习笔记(一):简单的按键程序
通过几个按键,来控制LED灯的开关状态。没有涉及到中断,只是简单的按键程序 程序包括key.c,key.h;led.c,led.h;以及main函数 一、LED程序 led.h #ifndef __LED__H #define __LED__H #include stm32f10x.h #include sys.h #define LED1 PBout(8)// PB8 #define LED2 PBout(9)// PB9 void LED_Init(void); #endif led.c #include stm32f10x.h #include led.h void LED_Init
[单片机]
嵌入式学习笔记之GPIO详解
GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独
[网络通信]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved