色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

學習GNU匯編語法

華仔的編程隨筆 ? 來源:華仔的編程隨筆 ? 作者:華仔的編程隨筆 ? 2023-04-30 08:42 ? 次閱讀

前言

最近在學習Cortex-A的linux編程,拿到的是《原子嵌入式Linux驅動開發說解》,文中說到,如果想要學習好Uboot和Linux內核,就必須要學會匯編

GNU匯編語法

我們在使用過的STM32中的MDK與IAR下啟動文件startup_stmp32f10x_hd.s中的匯編語法是有所不同的,所以不用將MDK下的匯編文件直接復制到IAR下去編譯,這是因為MDK和IAR的編譯器不同,因此匯編語法就有一些區別,ARM匯編使用的是GCC交叉編譯器,所以匯編代碼要符合GNU語法。

GNU匯編語法適用于所有的架構,并不是ARM獨享的,GNU匯編由一系列的語句組成,每行一條語句,每條語句有3個可選部分,解釋如下:

label:instruction @ comment

Lable : 即標號,表示地址位置,有些指令前面可能會有標號,這樣就可以通這個標號得到指令的地址,標號也可以用來表數據地址,注意label后面的“:",任何以":"結尾的標識符者會被識別為一個標號。

instruction : 即指令,也就是匯編指令的偽指令。

@符號:表示后面的是注釋,就跟C語言中的”/ “和” /“一樣的,其實在GNU匯編文件中我們也可以使用"/ "和" /”來注釋。

comment :就是注釋內容。

代碼如下所示

add:
MOVS R0, #0x123 @設置 R0=0x123

上面的代碼中"add:”就是標號,“MOVS R0,#0x123"就是指令,最后的"@設置 R0=0x123"就是注釋。

注意:ARM中的指令,偽指令、偽操作、寄存器名等可以全部使用大寫,也可以全部使用小寫,但是不能大小寫混用。

用戶可以使用.section偽操作來定義一個段,匯編系統預定義一些段名,解釋如下:

.tex :表示代碼段。

.data :初始化的數據段。

.bss :未初始化的數據段。

.rodata :只讀數據段。

我們當然可以使用.section來定義一個段,每個段以段名開始,以下一段名或者文件結尾結束。代碼如下:

.section .testsection @定義一個testsection段

匯編程序的黙認入口標號是_start,不過我們可以在鏈接腳本中使用ENTRY來指明其他的入口點,下面的代碼就是使用_start作為入口標號。

.gloabl _start

_start:
ldr r0, =0x12 @ 給r0移入0x123.

上面代碼中,global是偽操作,表示_start 是一個全局標號,類似C語言中的全局變量一樣,下面為常見的偽操作。

.byte :定義單字節數據,比如.byte 0x123。

.short :定義雙字節數據,比如.short 0x1234。

.long :定義一個4字節數據,比如.long 0x12345678。

.equ :賦值語句,格式為.equ變量名,表達式如.equ num,0x123 表示num = 0x123。

.align :數據字節對齊,如.align 4 表示4字節對齊。

.end :表示源文件結束。

.global :定義一個全局符號,格式為.global sysmbol,比如 .global _start。

GNU匯編還有其他的偽操作,最常見的如上所示。如果想詳細地了解全部的偽操作,可以參考《ARM Cortex-A(armV7)編程手冊V4.0》中的相關內容。

GNU匯編同樣也支持函數,函數格式如下:

函數名:
函數體
返回語句

GNU匯編函數返回語句不是必需要的,以下示例就是匯編寫的Cortex-A7中斷服務函數:

/* 未定義中斷 */
Undef ined_Handler:
    ldr r0, = Undefined_Handler
    bx r0

/*  SVC 中斷 */
    ldr r0, = SVC_Handler
    bx r0

/*  預取終止中斷 */
    ldr r0, = PrefAbort_Handler
    bx r0

上述代碼中定義了3個匯編函數:Unddefined_Handler、SVC_Handler和PrefAbort_Handler。以Undefined_Handler函數為來看匯編函數組成,"Undefined_Handler“就是函數名,"ldr r0, = Undefined_Handler”是函數體,“bx r0"是函數返回語句,"bx"指令是返回指令,函數返回語句不是秘需的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5082

    文章

    19104

    瀏覽量

    304809
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209328
  • GNU
    GNU
    +關注

    關注

    0

    文章

    143

    瀏覽量

    17492
  • Cortex-A
    +關注

    關注

    0

    文章

    20

    瀏覽量

    34266
  • 匯編語法
    +關注

    關注

    0

    文章

    2

    瀏覽量

    2096
收藏 人收藏

    評論

    相關推薦

    GNU-ARM匯編

    GNU-ARM匯編第一部分 Linux下ARM匯編語法盡管在Linux下使用C或C++編寫程序很方便,但匯編源程序用于系統最基本的初始化,如
    發表于 10-22 11:17

    請問u-boot start.S中條件編譯的語法是屬于ARM GNU匯編中內嵌C語言嗎?

    東山大哥,u-bootstart.S中那些條件編譯的語法是屬于ARM GNU匯編中內嵌C語言嗎?如下:#include #include /* turn off the watchdog
    發表于 06-21 05:45

    Linux內核中GNU C擴展的一些常用C語言語法分析

    13.1 總結前面12節的課程,主要針對 Linux 內核中 GNU C 擴展的一些常用 C 語言語法進行了分析。GNU C 的這些擴展語法,主要用來完善 C 語言標準和編譯優化。而通
    發表于 12-14 06:29

    GNU匯編語法

    ARM匯編基礎Cortex-A芯片上電后SP指針還沒初始化,C環境還沒準備好,不能運行C代碼。必須先用匯編語言設置好C環境,如初始化DDR、設置SP指針等。GNU匯編
    發表于 12-20 07:04

    GNU匯編哪些語句組成呢

    GNU 匯編語法適用于所有的架構,并不是 ARM 獨享的, GNU 匯編由一系列的語句組成,每行一條語句,每條語句有三個可選部分,如下:la
    發表于 12-20 07:08

    ARM匯編基礎之GNU匯編語法簡介

    ARM匯編基礎GNU 匯編語法Cortex-A7 常用匯編指令處理器內部數據傳輸指令存儲器訪問指令壓棧和出棧指令跳轉指令算術運算指令邏輯運算
    發表于 12-20 06:58

    ARM標準匯編GNU匯編大全

    ARM標準匯編GNU匯編 前段時間看arm的匯編,發現很多有一個小點,但是借來的書上的語法卻沒有,問同學也不知道,于是在網上查了一番
    發表于 03-03 16:24 ?100次下載

    GNU-ARM匯編

    GNU-ARM匯編 第一部分 Linux下ARM匯編語法盡管在Linux下使用C或C++編寫程序很方便,但匯編源程序用于系統最基本的初始化
    發表于 03-10 13:48 ?102次下載

    內嵌匯編語法大全

    內嵌匯編語法大全 內嵌匯編語法如下:        __asm__(匯編語句模
    發表于 03-11 14:54 ?46次下載

    匯編語言學習課件_深入Windows匯編編程

    第十一章 深入Windows匯編編程 11.1 匯編高級語法 11.2 程序優化 11.3 文件操作 11.4 結構化異常處理
    發表于 12-31 10:41 ?0次下載

    GNU_radio_和USRP_學習手冊

    GNU_radio_和USRP_學習手冊
    發表于 03-27 09:15 ?11次下載

    GNU ARM匯編入門教程的詳細資料免費下載

    注意的是,GNU匯編器遵循 AT&T 的匯編語法,可以從 GNU 的站點(www.gnu.o
    發表于 11-26 08:00 ?15次下載

    ATT格式匯編語法格式的詳細資料說明

    之前,編過51單片機的匯編程序。最近,在看《Linux內核完全注釋》,遇到很多AT&T格式的匯編程序,了解到AT&T格式和51單片機的匯編語法存在很多的不同。上網搜集到以下AT&T 格
    發表于 07-10 17:40 ?0次下載
    ATT格式<b class='flag-5'>匯編</b>的<b class='flag-5'>語法</b>格式的詳細資料說明

    GNU匯編入門教程免費下載

    以前用ARM的IDE工具,使用的是ARM標準的匯編語言。現在要使用GNU的工具,當然要了解一點GNU ARM匯編的不同之處。其實非常的簡單,瀏覽一下文檔然后再看看程序就完全可以搞定了,
    發表于 11-02 17:53 ?20次下載
    <b class='flag-5'>GNU</b><b class='flag-5'>匯編</b>入門教程免費下載

    學習STM32時為什么要學習匯編

    不同的平臺的匯編代碼是不一樣的,最早的匯編在50年代就發明了,比很多人的父母的年齡都大,老掉牙,不用學習怎么寫匯編。一個公司有一個人知道怎么寫匯編
    發表于 04-12 06:00 ?18次下載
    <b class='flag-5'>學習</b>STM32時為什么要<b class='flag-5'>學習</b><b class='flag-5'>匯編</b>?
    主站蜘蛛池模板: 亚洲一区二区影院| 国产成人免费在线观看| 久久永久视频| 亚洲精品国产自在在线观看| 儿子好妈妈的HD3中字抢劫| 女王羞辱丨vk| 91综合精品网站久久| 精子pk美女| 亚洲精品在线影院| 国产又湿又黄又硬又刺激视频 | 午夜特级毛片| 高h超辣bl文| 日韩在线中文字幕无码| 办公室的秘密2中文字幕| 暖暖视频在线高清播放| 中文字幕人成人乱码亚洲影视S | 免费人成视频19674不收费| 中国比基尼美女| 久久视频在线视频观看天天看视频| 草久久久久| 乱子伦在线观看中文字幕| 成人短片迅雷下载| 区一区二视频免费观看| 被两根巨大同时进去高H| 日本69xx 老师| 成 人 网 站毛片| 日韩av国产av欧美天堂社区 | 喜马拉雅听书免费版| 亚洲成色爱我久久| 抽插内射高潮呻吟V杜V| 日韩视频在线观看| 调教女M屁股撅虐调教| 少妇两个奶头喷出奶水了怎么办| 高清一区二区亚洲欧美日韩| 神马影院午夜伦理限级| 国产精品成人在线播放| 小雪奶水涨翁工帮吸的推荐语录| 国产永久免费高清在线观看| 伊人网综合在线观看| 麻豆国产精品AV色拍综合| 99国产精品成人免费视频 |