女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

ARM指令:adr和ldr的用法區別

如意 ? 來源:CSDN ? 作者:孫曉明 ? 2020-06-20 10:20 ? 次閱讀

同學們在學習ARM指令時,多數都會對adr和ldr這兩個命令產生疑惑,那他們究竟有什么區別呢?

其實這兩個都是偽指令:adr是小范圍的地址讀取偽指令,ldr是大范圍的讀取地址偽指令。可實際上adr是將基于PC相對偏移的地址值或基于寄存器相對地址值讀取的為指令,而ldr用于加載32為立即數或一個地址到指定的寄存器中。到這兒就會看到其中的區別了。如果在程序中想加載某個函數或者某個在聯接時候指定的地址時請使用adr,例如在lds中需要重新定位的地址。當加載32為的立即數或外部地址時請用ldr。

我給大家先舉個例子:

AREA test,CODE,READONLY

ENTRY

ldr r0,_start

adr r0,_start

ldr r0,=_start

nop

_start

nop

END

這段代碼并無實際意義,只是為了方便說明。我們反匯編一下看看:

4: ldr r0,_start

0x00000000 E59F0008 LDR R0,[PC,#0x0008]

5: adr r0,_start

0x00000004 E28F0004 ADD R0,PC,#0x00000004

6: ldr r0,=_start

0x00000008 E59F0004 LDR R0,[PC,#0x0004]

7: nop

8:

9:

10: _start

0x0000000C E1A00000 NOP

11: nop

ldr r0, _start

從內存地址 _start 的地方把值讀入。執行這個后,r0 = 0xe1a00000

adr r0, _start

取得 _start 的地址到 r0,但是請看反編譯的結果,它是與位置無關的。其實取得的時相對的位置。例如這段代碼在 0x00000000 運行,那么 adr r0, _start 得到 r0 = 0x00000010;

ldr r0, =_start

這個取得標號 _start 的絕對地址。這個絕對地址是在 link 的時候確定的??瓷先ミ@只是一個指令,但是它要占用 2 個 32bit 的空間,一條是指令,另一條是 _start 的數據(因為在編譯的時候不能確定 _start 的值,而且也不能用 mov 指令來給 r0 賦一個 32bit 的常量,所以需要多出一個空間存放 _start 的真正數據,在這里就是 0x0000000c)。

因此可以看出,這個是絕對的尋址,不管這段代碼在什么地方運行,它的結果都是 r0 = 0x0000000c。

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

    關注

    134

    文章

    9304

    瀏覽量

    374897
  • adr
    adr
    +關注

    關注

    0

    文章

    9

    瀏覽量

    11609
  • LDR
    LDR
    +關注

    關注

    0

    文章

    100

    瀏覽量

    7818
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    ADR1001 adi

    電子發燒友網為你提供ADI(ADI)ADR1001相關產品參數、數據手冊,更有ADR1001的引腳圖、接線圖、封裝手冊、中文資料、英文資料,ADR1001真值表,ADR1001管腳等資
    發表于 03-12 18:55
    <b class='flag-5'>ADR</b>1001 adi

    你聽說過MIPS嗎?它和ARM有何區別?

    基于MIPS指令集的君正X2000處理器。有些工程師對于MIPS不怎么了解,究竟MIPS和ARM有何區別呢?本期文對MIPS做一個簡單介紹。MIPS和ARM都屬于
    的頭像 發表于 11-23 01:05 ?661次閱讀
    你聽說過MIPS嗎?它和<b class='flag-5'>ARM</b>有何<b class='flag-5'>區別</b>?

    數控車床m99指令用法

    我們將詳細介紹M99指令用法?! ∫?、M99指令的基本含義  M99指令是數控車床編程中的一個輔助功能代碼,其基本含義是“程序結束并返回到程序開始處”。在數控車床的程序中,M99
    的頭像 發表于 10-23 15:52 ?2457次閱讀

    指令集架構與微架構的區別

    指令集架構(Instruction Set Architecture,ISA)與微架構(Microarchitecture)是計算機體系結構中的兩個重要概念,它們在處理器的設計和實現中扮演著不同的角色。以下是對兩者區別的詳細闡述。
    的頭像 發表于 10-05 15:10 ?1045次閱讀

    RISC-V和arm指令集的對比分析

    RISC-V和ARM指令集是兩種不同的計算機指令集架構,它們在多個方面存在顯著的差異。以下是對這兩種指令集的詳細對比分析: 一、設計理念 RISC-V :RISC-V的設計理念是簡化
    發表于 09-28 11:05

    ARM處理器的指令集包括哪些

    ARM處理器的指令集是一個龐大而復雜的系統,它涵蓋了多種類型的指令,用于實現數據處理、程序控制、內存訪問等多種功能。
    的頭像 發表于 09-10 11:15 ?1301次閱讀

    ARM處理器和CISC處理器的區別

    ARM處理器和CISC(復雜指令集計算機)處理器在多個方面存在顯著的區別。這些區別主要體現在架構原理、性能與功耗、設計目標、應用領域以及市場生態等方面。
    的頭像 發表于 09-10 11:10 ?863次閱讀

    樹莓派和arm開發板的區別

    樹莓派(Raspberry Pi)和ARM開發板都是基于ARM架構的微型計算機,但它們之間存在一些關鍵區別。 一、歷史背景 樹莓派(Raspberry Pi) 樹莓派是由英國樹莓派基金會
    的頭像 發表于 08-30 15:36 ?1750次閱讀

    CISC(復雜指令集)與RISC(精簡指令集)的區別  

    的X86 CPU為代表,而RISC以ARM,MIPS,RISC-V,IBM POWER PC 為代表。RISC的設計初衷針對CISC CPU復雜的弊端,選擇一些可以在單個CPU周期完成的指令,以降低CPU
    發表于 07-30 17:21

    RV 和ARM有什么區別

    district RV 和ARM有什么區別
    發表于 06-26 12:41

    三菱PLC指令ZRST和RST的區別

    指令,它們都與復位操作有關,但具體的功能和應用場景有所不同。本文將詳細介紹ZRST和RST指令區別,以及它們在實際應用中的使用方法。 一、ZRST指令
    的頭像 發表于 06-20 10:48 ?1w次閱讀

    三菱PLC傳送指令用法

    三菱PLC(可編程邏輯控制器)在工業自動化領域中扮演著至關重要的角色。其中,傳送指令(MOV)作為PLC編程中的基礎指令之一,其正確使用對于實現數據的準確、高效傳輸至關重要。本文將詳細講解三菱PLC傳送指令(MOV)的
    的頭像 發表于 06-18 09:41 ?6014次閱讀

    PLC中ALT和ALTP指令區別

    在PLC(可編程邏輯控制器)編程中,ALT和ALTP是兩個重要的指令,它們各自具有獨特的功能和應用場景。本文將從多個方面對這兩個指令進行詳細的分析和比較,以便讀者能夠更深入地理解它們之間的區別。
    的頭像 發表于 06-17 16:42 ?5821次閱讀

    PLC中SFTL指令用法

    Left Logical)指令是PLC指令集中的一種重要指令,用于處理數據的左移操作。本文將詳細闡述PLC指令SFTL的用法,包括其定義、
    的頭像 發表于 06-15 17:48 ?4830次閱讀

    數控車床m99指令用法

    詳細介紹M99指令用法。 一、M99指令的基本含義 M99指令是數控車床編程中的一個輔助功能代碼,其基本含義是“程序結束并返回到程序開始處”。在數控車床的程序中,M99
    的頭像 發表于 06-14 15:52 ?6423次閱讀