<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > ARM裸機開發(fā)bootloader匯編語言

          ARM裸機開發(fā)bootloader匯編語言

          作者: 時間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
          一、匯編語言概述

          1、為什么要使用匯編

          本文引用地址:http://www.ex-cimer.com/article/201611/318213.htm

          一般情況下我們不會用到匯編,但有兩種情況下,我們要用到匯編。

          1、啟動代碼。編寫bootloader和內(nèi)核時使用,主要是對cpu和內(nèi)存進行初始化時使用,因為這個時候還沒有c語言的環(huán)境(堆棧還沒有建立),所以不能用c語言。

          2、高效率的特殊需求。因為匯編語言的執(zhí)行效率要高于c語言,所以對某些對效率要求高的程序要用到匯編,可以是匯編與c語言的混合編程。

          2、匯編分類

          1、ARM標準匯編,適用于windows平臺下ARM公司開發(fā)的匯編器ADS。

          2、GNU匯編,linux平臺下GNU交叉編譯工具鏈中的匯編器。它與ARM標準的一點不同是GNU匯編要在段標記符前加點,例如 .text。而ARM標準則不需要這個點。

          3、匯編程序框架

          (.section).text.global _start_start:<匯編代碼>例子start.Sstart.S.text.global _start_start:mov r1 #1mov r2 #2mov r3 #3
          makefile文件all:start.oarm-linux-ld -Ttext 0x50000000 -o start.elf $^start.o:start.Sarm-linux-gcc -g -c -o $@ $^clean:rm *.o *.elf

          4、eclipse匯編和調(diào)試

          調(diào)試之前要對調(diào)試進行設(shè)置,調(diào)試的對象是elf文件。還要輸入初始化腳本,目的是對處理器進行初始化。

          終止用Run-Terminate

          二、匯編指令分類學習

          1、算術(shù)與邏輯指令mov mvn add sub and bic

          2、比較指令cmp tst

          3、跳轉(zhuǎn)指令b bl

          4、移位指令lsl ror

          5、程序狀態(tài)字訪問指令msr mrs

          6、存儲器訪問指令ldr str

          http://blog.csdn.net/quyang0602/article/details/7527496

          http://yxmyifeng.blog.163.com/blog/static/12978978220100194272529/

          .text.global _start_start:@存儲器訪問指令mov r0, #0xfmov r1, #0xff@str r0, [r1]@ldr r2, [r1]@ 程序狀態(tài)字訪問指令mrs r0, cpsrorr r0, r0, #0b100msr cpsr, r0@移位指令mov r1, #0b110000mov r1, r1, lsl#2mov r1, r1, ror#4@跳轉(zhuǎn)指令mov r1, #6mov r2, #5cmp r1, r2bgt branch1b endbranch1:sub r3, r1, r2end:nopbl func1mov r1, r2func1:mov r1, r2mov pc, lr@比較指令mov r1, #2cmp r1, #1mov r1, #1cmp r1, #2mov r1, #1cmp r1, #1mov r1, #0b1011tst r1, #0b01mov r1, #0b1011tst r1, #0b100@算術(shù)與邏輯指令mov r1, #8mov r2, r1mov r3, #10mvn r1, #0b11mvn r2, #5mvn r3, r1mov r1, #9sub r2, r1, #4sub r3, r1, r2mov r1, #1mov r2, #2add r3, r1, #44add r3, r1, r2mov r1, #0b1011and r2, r1, #0b11mov r1, #0b1011bic r2, r1, #0b101

          三、偽指令

          1、ARM偽指令怎么定義

          ARM偽指令沒有對應的機器碼,只有在編譯過程中起作用,或者轉(zhuǎn)化成其他實際執(zhí)行的指令來進行操作。

          任何的CPU執(zhí)行的都是機器碼,也就是二進制映像文件。

          2、偽指令的學習方法

          對elf文件進行反匯編,查看反匯編文件中偽指令是如何轉(zhuǎn)化為其他指令執(zhí)行的。

          arm-linux-objdump -D -S

          ARM的機器碼是32位的整數(shù),被分為幾個段,每個段都有自己的意義。機器碼與每條指令是一一對應的。

          3、偽指令定義

          .global全局

          .data數(shù)據(jù)

          .ascii字符串

          .byte字節(jié)

          .word字

          .align對齊

          .equ

          .equ DA,0x89mov r0,#DA.align 4

          4、操作類偽指令

          nop 空指令,等效于 mov ro, ro 可以用于延時,保證時序要求。

          ldr

          mov ro, 0x1ff 這樣定義就會出錯,因為mov的操作數(shù)最多只有8位,另外4位是左右移動表示位。

          解決方案:

          ldr ro, =0x1ff 等效于ldr r0, [pc, #-4]

          四、ARM協(xié)處理器訪問指令

          1、什么是協(xié)處理器

          協(xié)處理器顧名思義就是助手的意思,協(xié)處理器可以幫助中央處理器處理一些特定的事務,例如數(shù)學協(xié)處理器,就可以處理一些數(shù)學方面的運算。協(xié)處理器有自己的寄存器,cpu通過訪問協(xié)處理器的寄存器實現(xiàn)與協(xié)處理器的協(xié)同工作。

          2、ARM的CP15

          ARM最多達16個協(xié)處理器,CP15共提供了16組寄存器,下面是一段來自ARM11手冊的CP15的原文介紹

          The purpose of the system control coprocessor, CP15, is to control and provide status information for the functions implemented in the ARM1176JZF-S processor. The main functions of the system control coprocessor are:

          1、overall system control and configuration

          2、cache configuration and management

          3、Tightly-Coupled Memory(TCM)緊耦合內(nèi)存,性能類似cache

          4、Memory Management Unit(MMU) configuration and management

          5、DMA control

          6、system performance monitoring.

          3、協(xié)處理器的訪問指令

          mcr和mrc,mcr實現(xiàn)通用寄存器數(shù)據(jù)向協(xié)處理器傳送。mrc實現(xiàn)了協(xié)寄存器向通用寄存器的傳送。

          下面是一個例子(參考ARM11手冊編寫)

          .text.global _start_start:mrc p15, 0, r0, c0, c0, 0nop


          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();