arm汇编文件分析

.text                                   @表示
.global _start
_start:
            ldr     r0, =0x53000000     @ WATCHDOG寄存器地址
            mov     r1, #0x0                     
            str     r1, [r0]            @ 写入0,禁止WATCHDOG,否则CPU会不断重启

            ldr     sp, =1024*4         @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                        @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      main                @ 调用C程序中的main函数
halt_loop:
            b       halt_loop

.text .global 是arm-gcc编译器的关键词。
.text 指定了后续编译出来的内容放在代码段【可执行】;
.global 告诉编译器后续跟的是一个全局可见的名字【可能是变量,也可以是函数名】;
在本例中,_start是一个函数的起始地址,也是编译、链接后程序的起始地址。由于程序是通过加载器来加载的,必须要找到 _start名字的函数,因此_start必须定义成全局的,以便存在于编译后的全局符合表中,供其它程序【如加载器】寻找到。

@******************************************************************************
@ File:head.S
@ 功能:初始化,设置中断模式、管理模式的栈,设置好中断处理函数
@******************************************************************************       

.extern     main
.text 
.global _start 
_start:
@******************************************************************************       
@ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
@******************************************************************************       
    b   Reset

@ 0x04: 未定义指令中止模式的向量地址
HandleUndef:
    b   HandleUndef 

@ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
    b   HandleSWI

@ 0x0c: 指令预取终止导致的异常的向量地址
HandlePrefetchAbort:
    b   HandlePrefetchAbort

@ 0x10: 数据访问终止导致的异常的向量地址
HandleDataAbort:
    b   HandleDataAbort

@ 0x14: 保留
HandleNotUsed:
    b   HandleNotUsed

@ 0x18: 中断模式的向量地址
    b   HandleIRQ

@ 0x1c: 快中断模式的向量地址
HandleFIQ:
    b   HandleFIQ

Reset:                  
    ldr sp, =4096           @ 设置栈指针,以下都是C函数,调用前需要设好栈
    bl  disable_watch_dog   @ 关闭WATCHDOG,否则CPU会不断重启

    msr cpsr_c, #0xd2       @ 进入中断模式
    ldr sp, =3072           @ 设置中断模式栈指针

    msr cpsr_c, #0xd3       @ 进入管理模式
    ldr sp, =4096           @ 设置管理模式栈指针,
                            @ 其实复位之后,CPU就处于管理模式,
                            @ 前面的“ldr sp, =4096”完成同样的功能,此句可省略

    bl  init_led            @ 初始化LED的GPIO管脚
    bl  init_irq            @ 调用中断初始化函数,在init.c中
    msr cpsr_c, #0x5f       @ 设置I-bit=0,开IRQ中断

    ldr lr, =halt_loop      @ 设置返回地址
    ldr pc, =main           @ 调用main函数
halt_loop:
    b   halt_loop

HandleIRQ:
    sub lr, lr, #4                  @ 计算返回地址
    stmdb   sp!,    { r0-r12,lr }   @保存使用到的寄存器
                                    @ 注意,此时的sp是中断模式的sp
                                    @ 初始值是上面设置的3072

    ldr lr, =int_return             @ 设置调用ISR即EINT_Handle函数后的返回地址  
    ldr pc, =EINT_Handle            @ 调用中断服务函数,在interrupt.c中
int_return:
    ldmia   sp!,    { r0-r12,pc }^  @ 中断返回, ^表示将spsr的值复制到cpsr

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习ARM汇编指令的经典资料。 对ARM的各种汇编指令进行了深入全面的讲解,并给出了各种示例和详细注解,并且还对一些值得注意的点或是容易犯错误的地方进行了总结。 目录 前言................................................................................................................................................................i 目录................................................................................................................................................................I ARM7TDMI(-S)指令集及汇编....................................................................................................................1 ARM处理器寻址方式..........................................................................................................................2 寄存器寻址....................................................................................................................................2 立即寻址........................................................................................................................................2 寄存器偏移寻址............................................................................................................................2 寄存器间接寻址............................................................................................................................3 基址寻址........................................................................................................................................3 多寄存器寻址................................................................................................................................4 堆栈寻址........................................................................................................................................4 块拷贝寻址....................................................................................................................................5 相对寻址........................................................................................................................................5 指令集介绍............................................................................................................................................7 ARM指令集..................................................................................................................................7 指令格式................................................................................................................................7 第2个操作数................................................................................................................7 #immed_8r...........................................................................................................7 Rm..........................................................................................................................8 Rm,shift..................................................................................................................8 条件码............................................................................................................................9 ARM存储器访问指令........................................................................................................11   LDR和STR........................................................................................................11   LDM和STM.......................................................................................................14   SWP.....................................................................................................................17 ARM数据处理指令............................................................................................................19 数据传送指令..............................................................................................................20   MOV............................................................................................................20   MVN............................................................................................................20 算术逻辑运算指令......................................................................................................20   ADD.............................................................................................................20   SUB..............................................................................................................21   RSB..............................................................................................................21   ADC.............................................................................................................21   SBC..............................................................................................................21   RSC..............................................................................................................22   AND.............................................................................................................22   ORR..............................................................................................................22   EOR..............................................................................................................22   BIC...............................................................................................................23 比较指令......................................................................................................................23   CMP.............................................................................................................23   CMN.............................................................................................................23   TST...............................................................................................................24   TEQ..............................................................................................................24 乘法指令......................................................................................................................25   MUL.............................................................................................................25   MLA.............................................................................................................25   UMULL........................................................................................................25   UMLAL........................................................................................................26   SMULL........................................................................................................26   SMLAL........................................................................................................26 ARM跳转指令....................................................................................................................27   B...........................................................................................................................27   BL.........................................................................................................................27   BX........................................................................................................................27 ARM协处理器指令............................................................................................................28   CDP......................................................................................................................28   LDC......................................................................................................................29   STC......................................................................................................................29   MCR.....................................................................................................................30   MRC.....................................................................................................................30 ARM杂项指令....................................................................................................................31   SWI......................................................................................................................31   MRS.....................................................................................................................32   MSR.....................................................................................................................33 ARM伪指令........................................................................................................................34   ADR.....................................................................................................................35   ADRL...................................................................................................................35   LDR......................................................................................................................36   NOP......................................................................................................................37 Thumb指令集.............................................................................................................................39 Thumb指令集与ARM指令集的区别..............................................................................39 Thumb存储器访问指令.....................................................................................................40   LDR和STR........................................................................................................41   PUSH和POP......................................................................................................43   LDMIA和STMIA..............................................................................................43 Thumb数据处理指令.........................................................................................................45 数据传送指令..............................................................................................................46   MOV............................................................................................................46   MVN............................................................................................................46   NEG..............................................................................................................47 算术逻辑运算指令......................................................................................................47   ADD.............................................................................................................47   SUB..............................................................................................................48   ADC.............................................................................................................49   SBC..............................................................................................................49   MUL.............................................................................................................50   AND.............................................................................................................50   ORR..............................................................................................................50   EOR..............................................................................................................51   BIC...............................................................................................................51   ASR..............................................................................................................51   LSL...............................................................................................................52   LSR..............................................................................................................52   ROR..............................................................................................................53 比较指令......................................................................................................................53   CMP.............................................................................................................53   CMN.............................................................................................................54   TST...............................................................................................................54 Thumb跳转指令.........................................................................................................55   B...................................................................................................................55   BL.................................................................................................................55   BX................................................................................................................55 Thumb杂项指令.........................................................................................................56   SWI..............................................................................................................56 Thumb伪指令.............................................................................................................57   ADR.............................................................................................................57   LDR..............................................................................................................57   NOP..............................................................................................................58 伪指令..................................................................................................................................................59 符号定义伪指令..........................................................................................................................59   GBLA、GBLL、GBLS..............................................................................................59   LCLA、LCLL、LCLS................................................................................................60   SETA、SETL、SETS.................................................................................................61   RLIST...........................................................................................................................61   CN................................................................................................................................62   CP.................................................................................................................................62   DN、SN.......................................................................................................................62   FN.................................................................................................................................63 数据定义伪指令..........................................................................................................................63   LTORG.........................................................................................................................64   MAP.............................................................................................................................64   FIELD..........................................................................................................................65   SPACE..........................................................................................................................66   DCB.............................................................................................................................66   DCD和DCDU............................................................................................................67   DCDO..........................................................................................................................67   DCFD和DCFDU........................................................................................................68   DCFS和DCFSU.........................................................................................................68   DCI...............................................................................................................................69   DCQ和DCQU............................................................................................................69   DCW和DCWU..........................................................................................................70 报告伪指令..................................................................................................................................70   ASSERT.......................................................................................................................70   INFO............................................................................................................................71   OPT..............................................................................................................................71   TTL和SUBT..............................................................................................................72 汇编控制伪指令..........................................................................................................................73   IF、ELSE和ENDIF...................................................................................................73   MACRO和MEND.....................................................................................................74   WHIL和WEND.........................................................................................................75 杂项伪指令..................................................................................................................................76   ALIGN.........................................................................................................................77   AREA...........................................................................................................................78   CODE16和CODE32..................................................................................................79   END.............................................................................................................................80   ENTRY.........................................................................................................................80   EQU.............................................................................................................................81   EXPORT和GLOBAL................................................................................................81   IMPORT和EXTERN.................................................................................................82   GET和INCLUDE......................................................................................................83   INCBIN........................................................................................................................83   KEEP............................................................................................................................83   NOFP...........................................................................................................................84   REQUIRE....................................................................................................................84   PEQUIRE8和PRESERVE8.......................................................................................84   RN................................................................................................................................84   ROUT...........................................................................................................................85 ARM伪指令................................................................................................................................86   ADR.............................................................................................................................86   ADRL...........................................................................................................................86   LDR..............................................................................................................................86   NOP..............................................................................................................................86   LDFD...........................................................................................................................86   LDFS............................................................................................................................87 Thumb伪指令.............................................................................................................................87   ADR.............................................................................................................................87   LDR..............................................................................................................................87   NOP..............................................................................................................................88 ARM汇编程序设计............................................................................................................................88 文件格式......................................................................................................................................88 ARM汇编的一些规范................................................................................................................88 汇编语句格式......................................................................................................................88 标号......................................................................................................................................89   基于PC的标号...................................................................................................89   基于寄存器的标号..............................................................................................90   绝对地址..............................................................................................................90 局部标号..............................................................................................................................90 符号......................................................................................................................................91 常量......................................................................................................................................91   数字常数..............................................................................................................91   字符常量..............................................................................................................92   布尔常量..............................................................................................................92 段定义..................................................................................................................................92 宏定义及其作用..................................................................................................................93 子程序的调用..............................................................................................................................94 数据比较跳转..............................................................................................................................95 循环..............................................................................................................................................95 数据块复制..................................................................................................................................95 栈操作..........................................................................................................................................96 特殊寄存器定义及应用..............................................................................................................96 散转功能......................................................................................................................................97 查表操作......................................................................................................................................97 长跳转..........................................................................................................................................97 对信号量的支持..........................................................................................................................98 伪指令使用..................................................................................................................................98 一个完整的例子..........................................................................................................................98 外围部件控制..............................................................................................................................99 三级流水线介绍..........................................................................................................................99 C与汇编混合编程............................................................................................................................100 内嵌汇编....................................................................................................................................100 内嵌汇编的指令用法........................................................................................................103 内嵌汇编器与armasm汇编器的差异.............................................................................104 内嵌汇编注意事项............................................................................................................104 访问全局变量............................................................................................................................106 C与汇编相互调用....................................................................................................................107 寄存器的使用规则............................................................................................................108 堆栈使用规则....................................................................................................................108 参数传递规则....................................................................................................................109 C程序调用汇编程序........................................................................................................110 汇编程序调用C程序.......................................................................................................111 ARM指令集列表..............................................................................................................................113 ARM存储器访问指令表列表..................................................................................................113 ARM数据处理指令列表..........................................................................................................114 ARM乘法指令列表..................................................................................................................115 ARM跳转指令列表..................................................................................................................116 ARM协处理器指令列表..........................................................................................................117 ARM杂项指令列表..................................................................................................................118 ARM伪指令列表......................................................................................................................119 Thumb指令集列表...........................................................................................................................120 Thumb存储器访问指令列表...................................................................................................120 Thumb数据处理指令列表.......................................................................................................121 Thumb跳转指令及软中断指令列表.......................................................................................122 Thumb伪指令列表...................................................................................................................123 汇编预定义变量及伪指令................................................................................................................124 预定义的寄存器和协处理器名................................................................................................124 通用寄存器........................................................................................................................124 程序状态寄存器................................................................................................................124 浮点数寄存器....................................................................................................................124 协处理器及协处理器寄存器............................................................................................125 内置变量列表............................................................................................................................125 伪指令列表................................................................................................................................126 指令条件码列表........................................................................................................................128 CPSR和SPSR分配图.............................................................................................................................129
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值