ARM裸機基礎學習 彙編語法和指令

2021-06-16 15:41:14 字數 1545 閱讀 9638

一直對彙編不感冒的我,為了學好arm

裸機開發,我再次學習組合語言和指令,值得高興的是今天看著資料自己編寫出了自己的第乙個匯程式設計序。用彙編實現1加到

100的和,源**如下:

;i為迴圈因子    

sum為總和變數  

; for(i=0; i<10; i++)

; {  sum+=i;

; 設sum為r0

,i為r1 (i

、sum

均為無符號整數)

area reset,code,readonly ; 宣告**段

sum

entry ; 標識程式入口

code32 ; 宣告32位

arm指令

start

mov r0,#0 ; 初始化

sum的值

mov r1,#0 ; 設定

i=0

my_for cmp r1,#100 ; 判斷

i<100?

bhs for_end ; r1>=100,退出迴圈

add r1,r1,#1 ; 迴圈體,

i++

add r0,r0,r1 ; sum+=i

b my_for

for_end nop

nopb for_end

end

area    

語法格式:    

area 段名 屬性

1 ,屬性2 ,

……    

area偽指令用於定義乙個**段或資料段

屬性字段表示該**段(或資料段)的相關屬性,多個屬性用逗號分隔。    — 

code 

屬性:用於定義**段,預設為

readonly 

。    

— data 

屬性:用於定義資料段,預設為

readwrite 

。    

— readonly 

屬性:指定本段為唯讀,**段預設為

readonly 

。    

— readwrite 

屬性:指定本段為可讀可寫,資料段的預設屬性為

readwrite 

。  

entry    

語法格式:    

entry    

entry偽指令用於指定匯程式設計序的入口點。

area init ,

code 

,readonly    

entry ; 指定應用程式的入口點

gbla test        ; 宣告乙個全域性的數學變數,變數名為

test1

test       seta    0x3           ; 將變數

test1

賦值為3,

注意書寫格式,需要頂格寫

; equ偽指令

count equ 0x30003100 ; 定義乙個變數,位址為

0x30003100

結束的時候一般讓程式停在這也就是死迴圈

outb out

nopend

keil和arm裸機開發及組合語言遇到的一些問題

原因是啟動檔案中棧設定的太小了,尤其是開大陣列的時候要注意。這個錯誤具體表現一種情況為,程式試圖對指定ram範圍之外的位址進行讀寫,sp暫存器的值也在ram範圍之外,那麼顯然是棧分配太小了。啟動 裡可以看到6種堆疊,一般修改usr stack size的值就可以了。同時也要注意堆設定的大小,程式設計...

ARM裸機從零開始的學習2 基礎概念

arm裸機從零開始的學習2 基礎概念 參考朱有鵬arm裸機全集 1 嵌入式的系統的構成特點和演進方向 1 專用,軟硬體可裁剪可配置 2 低功耗,高可靠性 高穩定性 3 軟體 短小精悍 4 可固化 可以燒錄到韌體裡面去 5 實時性 嵌入式系統的實時性是要求很高的,ucos 6 弱互動性,很多學生都喜歡...

彙編學習筆記001 基礎概念和知識

1.所有儲存器的每個儲存單元都從0開始 2.cpu對資料的讀寫,必須有三類資訊互動 器件的選擇,讀或寫的命令 控制資訊 讀或寫的資料 資料資訊 3.匯流排在邏輯上劃分為 位址匯流排,資料匯流排,控制匯流排 4.乙個字是兩個位元組 byty 乙個位元組是8bit,一bit乙個二進位制數 引言其實就是廢...