arm彙編檔案分析

2021-08-24 23:03:53 字數 3023 閱讀 7906

.text                                   @表示

.global _start

_start:

ldr r0, =0x53000000 @ watchdog暫存器位址

movr1, #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

@*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

***@ 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 @ 計算返回位址

s***b sp!, @儲存使用到的暫存器

@ 注意,此時的sp是中斷模式的sp

@ 初始值是上面設定的3072

ldr lr, =int_return @ 設定呼叫isr即eint_handle函式後的返回位址

ldr pc, =eint_handle @ 呼叫中斷服務函式,在interrupt.c中

int_return:

ldmia sp!, ^ @ 中斷返回, ^表示將spsr的值複製到cpsr

arm彙編 main函式分析

arm 彙編分析1.主要是為了搞清楚原子操作的實現原理。2.在 c語言環境下 變數賦值應該是可以被打斷。3.還有是在c語言中變數賦值操作對應的彙編 4.原子操作的主要流程 read modify write rwm 那麼接下來先看一下c 語言 include intfunc intmain 反彙編之...

ARM彙編和內嵌彙編

彙編指令 跳轉指令 b bl blxbx 資料處理指令 mov mvnadd adcsub rsbrsc andor eorbic cmncmp tstteq 狀態暫存器指令 mrs msrldr strldm stmmcr arm和協處理器之間資料交換 mrccond 可選的條件 rd 存放返回狀...

arm彙編相關

cmp rn rm operand tst logical and ldr用法 摘自arm嵌入式系統開發一書 資料 基址暫存器 示例 mem base offset 基址暫存器加上偏移 ldr r0,r1,offset mem base offset 不變 ldr r0,r1,offset mem ...