彙編學習1 也是從hello開始

2022-07-26 01:54:09 字數 995 閱讀 8467

.section .rodata    

.align  2

.lc0:

.ascii "hello arm\000"

.text

.align 2

.global main

main:

push

ldr r0, .l3

bl puts

pop

mov pc,lr

.l3:

.word .lc0

執行的話也是arm-linux-gcc 1.s -o 1,生成機器可執行檔案 1

下面為段落做說明:

bss段:用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss段屬於靜態記憶體分配。

data段:用來存放程式中已初始化的全域性變數的一塊記憶體區域。資料段屬於靜態記憶體分配。

text段:用來存放程式執行**的一塊記憶體區域。這部分區域的大小在程式執行前就已經確定,並且記憶體區域通常屬於唯讀,某些架構也允許**段為可寫,即允許修改程式。在**段中,也有可能包含一些唯讀的常數變數,例如字串常量等。

rodata段:存放c中的字串和#define定義的常量

另外加上堆疊的說明:

heap堆:用於存放程序執行中被動態分配的記憶體段,它的大小並不固定,可動態擴張或縮減。當程序呼叫malloc等函式分配記憶體時,新分配的記憶體就被動態新增到堆上(堆被擴張);當利用free等函式釋放記憶體時,被釋放的記憶體從堆中被剔除(堆被縮減)

stack棧:是使用者存放程式臨時建立的區域性變數,也就是說我們函式括弧「{}」中定義的變數(但不包括static宣告的變數,static意味著在資料段中存放變數)。除此以外,在函式被呼叫時,其引數也會被壓入發起呼叫的程序棧中,並且待到呼叫結束後,函式的返回值也會被存放回棧中。由於棧的先進先出特點,所以棧特別方便用來儲存/恢復呼叫現場。從這個意義上講,我們可以把堆疊看成乙個寄存、交換臨時資料的記憶體區。

兩者的區別就是堆記憶體空間要人為分配,由malloc產生也要用free釋放,不是連續的。棧由系統自動分配的而且是連續的

ARM彙編 從內嵌彙編開始

對於基於arm的risc處理器,gnu c編譯器提供了在c 中內嵌彙編的功能。這種特性提供了c 沒有的功能,比如手動優化軟體關鍵部分的 使用相關的處理器指令。asm volatile hlt asm 表示後面的 為內嵌彙編,asm 是 asm 的別名。volatile 表示編譯器不要優化 後面的指令...

開始學習 彙編

並不是所有的arm指令可以用c程式實現。尤其是arm這種需要程式設計師完成入棧,出棧等操作。arm的啟動 必須用彙編編寫,雖然啟動 大同小異,但是一些細節的差異完全可以導致應用程式的不穩定甚至不能執行。如果是打算掌握arm,如果連彙編都省過去,那你又能夠學到什麼東西呢?站在c語言的角度,51,arm...

HELLO一 如何開始DSP的學習

by eys417 摘錄一些,分享下.以下為各學習dsp的一些經驗 fxw451 大家先大體上看一遍書,把大體的知識了解一下。其次就是看例子了,例子是關鍵,例子裡有你學的所有的東西,這次你再拿出一本書來看,這次是有針對性的看,比如你做的spi的,你就直接看spi那張,一邊看例子一邊看書,這樣你就可以...