rtems start s中一些彙編字元的學習

2021-08-14 19:41:12 字數 1544 閱讀 2354

在看start.s時有些彙編不理解,

1:  .arm是什麼意思?

2:.globl

_start 的作用?

3:.section

".bsp_start_text", "ax"  的意思?

通過下面的解釋就一目了然了。

一、彙編一般使用的場合:

(1)、組合語言在arm中一般用在啟動**中,比如bootloader 初始化時對 cpu 和 協處理器 等進行初始化, 此時沒有建立起 c 語言執行環境, 這個時候使用組合語言執行初始化操作;

(2)、彙編效率比較高, 在linux 核心中對效率有特殊要求的地方也會使用組合語言來編寫. 

二、arm彙編的分類:組合語言可以分為arm標準組合語言和gnu組合語言兩種;

他們使用的地方是不同的,一般來說arm標準組合語言適用於arm公司的彙編器, 適合在 windows 平台使用, 如ads

而gnu組合語言適用於 linux 平台交叉編譯工具鏈的彙編器。

補充: arm標準組合語言和gnu組合語言的區別: arm彙編**是大寫,後者是小寫;前者的偽指令前不加點,後者要加點。

gnu arm彙編特殊字元和語法

**行中的注釋符號: 『@』

整行注釋符號: 『#』

語句分離符號: 『;』

直接運算元字首: 『#』 或 『$』

.arm 以arm格式編譯,同code32 

.thumb 以thumb格式編譯,同code16

.code16 以thumb格式編譯

.code32 以arm格式編譯

三、arm組合語言有個固定的模板:

[html]view plain

copy

.section .data  

<

初始化的資料

>

.section .bss  

<

未初始化的資料

>

.section .text  

.global _start  

_start:......  

程式入口 : "_start:" 是匯程式設計序的入口, 相當於 main();

標註入口 : 使用 ".global _start" 標註程式入口, 外部才可以識別這是程式入口;

標明**段 : ".section .text" 標明這是乙個**段;

標明 bss 段 : 使用 ".section .bss" 標明bss段, 如果沒有 bss 段 和 資料段, 直接從 .text 開始;

下面我們來搭建彙編開發除錯環境

程式** :

定義**段 : .text ;

定義程式入口 : .globl _start;

**示例 :

[html]view plain

copy

.text  

.globl _start  

_start:  

mov r1,#1  

mov r2,#2  

mov r3,#3  

PB中一些技巧

取資料視窗中可列新的表名。string ls table ls table dw 1.describe datawindow.updatetable.table 22.取資料視窗物件中列的名稱及型別 string ls cols,ls types intli count,i li count int...

php中一些知識

file 的路徑是當前 所在檔案 dirname dirname file 得到的是檔案上一層目錄名 dirname file 得到的是檔案所在層目錄名 require其實是乙個直譯器解釋的過程,比如當我們在乙個檔案中require另乙個檔案的時候,其實是先解釋另乙個檔案。php中的檔案a的過程中假...

PB中一些技巧

取資料視窗中可列新的表名。string ls table ls table dw 1.describe datawindow.updatetable.table 22.取資料視窗物件中列的名稱及型別 string ls cols,ls types intli count,i li count int...