1. 程式人生 > >ARM彙編.global .extern 和.text

ARM彙編.global .extern 和.text

在ARM彙編中,常搞不清.global和.extern的區別,下面就簡要闡述一下這兩個的區別。

1>.global

.global關鍵字用來讓一個符號對連結器可見,可以供其他連結物件模組使用。
.global _start 讓_start符號成為可見的標示符,這樣連結器就知道跳轉到程式中的什麼地方並開始執行。linux尋找這個 _start標籤作為程式的預設進入點。

在彙編和C混合程式設計中,在GNU ARM編譯環境下,彙編程式中要使用.global偽操作宣告彙編程式為全域性的函式,意即可被外部函式呼叫,同時C程式中要使用extern宣告要呼叫的組合語言程式。

2>.extern

.extern XXXX 說明xxxx為外部函式,呼叫的時候可以遍訪所有檔案找到該函式並且使用它。

作者:messi1111
來源:CSDN
原文:https://blog.csdn.net/u014250462/article/details/78169654
版權宣告:本文為博主原創文章,轉載請附上博文連結!

3>
.section .data
彙編程式中以.開頭的名稱並不是指令的助記符,不會被翻譯成機器指令,而是給彙編器一些特殊指示,稱為彙編指示(Assembler Directive)或偽操作(Pseudo-operation),由於它不是真正的指令所以加個“偽”字。.section指示把程式碼劃分成若干個段(Section),程式被作業系統載入執行時,每個段被載入到不同的地址,作業系統對不同的頁面設定不同的讀、寫、執行許可權。.data段儲存程式的資料,是可讀可寫的,相當於C程式的全域性變數。本程式中沒有定義資料,所以.data段是空的。

.section .text
.text段儲存程式碼,是隻讀和可執行的,後面那些指令都屬於.text段。