一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ARM指令:adr和ldr的用法區(qū)別

如意 ? 來源:CSDN ? 作者:孫曉明 ? 2020-06-20 10:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

同學(xué)們在學(xué)習(xí)ARM指令時,多數(shù)都會對adr和ldr這兩個命令產(chǎn)生疑惑,那他們究竟有什么區(qū)別呢?

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

我給大家先舉個例子:

AREA test,CODE,READONLY

ENTRY

ldr r0,_start

adr r0,_start

ldr r0,=_start

nop

_start

nop

END

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

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

從內(nèi)存地址 _start 的地方把值讀入。執(zhí)行這個后,r0 = 0xe1a00000

adr r0, _start

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

ldr r0, =_start

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9353

    瀏覽量

    377648
  • adr
    adr
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    11639
  • LDR
    LDR
    +關(guān)注

    關(guān)注

    0

    文章

    100

    瀏覽量

    7898
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Analog Devices Inc. ADR1399H-EBZ評估板特性/示意圖

    Analog Devices Inc. ADR1399H-EBZ評估板設(shè)計(jì)用于評估ADR1399超穩(wěn)定7.05V分壓基準(zhǔn),采用4引腳TO-46封裝。
    的頭像 發(fā)表于 06-25 10:38 ?162次閱讀
    Analog Devices Inc. <b class='flag-5'>ADR</b>1399H-EBZ評估板特性/示意圖

    RISC-V和ARM有何區(qū)別?

    與RISC-VARM是一種精簡指令集(RISC),以該指令集為基礎(chǔ)的處理器通常被稱為ARM芯片,它在全球范圍內(nèi)得到了極為廣泛的應(yīng)用。而RISC-V也是精簡指令集,是美國加
    的頭像 發(fā)表于 06-24 11:38 ?908次閱讀
    RISC-V和<b class='flag-5'>ARM</b>有何<b class='flag-5'>區(qū)別</b>?

    步進(jìn)電機(jī)控制指令詳解

    這些指令主要是針對用 PLC 直接聯(lián)動伺服放大器,目的是可以不借助其他擴(kuò)展設(shè)備(例如1GM 模塊)來進(jìn)行簡單的點(diǎn)位控制, 使用這些指令時最好配合三菱的伺服放大器 (如 MR-J2)。然而,我們也可以用這些指令來控制步進(jìn)電機(jī)的運(yùn)行
    的頭像 發(fā)表于 06-12 10:33 ?745次閱讀
    步進(jìn)電機(jī)控制<b class='flag-5'>指令</b>詳解

    ADR1001 adi

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

    你聽說過MIPS嗎?它和ARM有何區(qū)別?

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

    什么是RISC-V?以及RISC-V和ARM、X86的區(qū)別

    指令集架構(gòu),為學(xué)生和研究人員提供一個更加友好和易于理解的指令集,以便他們更好地學(xué)習(xí)和研究計(jì)算機(jī)處理器的設(shè)計(jì)和開發(fā)。 RISC-V與ARM、X86指令集架構(gòu)的
    發(fā)表于 11-16 16:14

    數(shù)控車床m99指令用法

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

    指令集架構(gòu)與微架構(gòu)的區(qū)別

    指令集架構(gòu)(Instruction Set Architecture,ISA)與微架構(gòu)(Microarchitecture)是計(jì)算機(jī)體系結(jié)構(gòu)中的兩個重要概念,它們在處理器的設(shè)計(jì)和實(shí)現(xiàn)中扮演著不同的角色。以下是對兩者區(qū)別的詳細(xì)闡述。
    的頭像 發(fā)表于 10-05 15:10 ?1199次閱讀

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

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

    ARM處理器和CPU有什么區(qū)別

    ARM處理器和CPU(中央處理器)之間的關(guān)系及區(qū)別,可以從多個維度進(jìn)行深入探討。首先,需要明確的是,ARM處理器并非一種獨(dú)立的CPU類型,而是指由ARM公司設(shè)計(jì)的一系列處理器架構(gòu),這些
    的頭像 發(fā)表于 09-10 11:24 ?3321次閱讀

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

    ARM處理器的指令集是一個龐大而復(fù)雜的系統(tǒng),它涵蓋了多種類型的指令,用于實(shí)現(xiàn)數(shù)據(jù)處理、程序控制、內(nèi)存訪問等多種功能。
    的頭像 發(fā)表于 09-10 11:15 ?1549次閱讀

    ARM處理器和CISC處理器的區(qū)別

    ARM處理器和CISC(復(fù)雜指令集計(jì)算機(jī))處理器在多個方面存在顯著的區(qū)別。這些區(qū)別主要體現(xiàn)在架構(gòu)原理、性能與功耗、設(shè)計(jì)目標(biāo)、應(yīng)用領(lǐng)域以及市場生態(tài)等方面。
    的頭像 發(fā)表于 09-10 11:10 ?976次閱讀

    riscv架構(gòu)和arm區(qū)別是什么

    RISC-V和ARM都是流行的指令集架構(gòu)(ISA),它們在設(shè)計(jì)、生態(tài)系統(tǒng)、應(yīng)用領(lǐng)域和許可模式等方面有所不同。 RISC-V 1. 開源和免費(fèi): RISC-V是一個開源的指令集架構(gòu),這意味著任何人
    的頭像 發(fā)表于 09-07 09:37 ?3284次閱讀

    樹莓派和arm開發(fā)板的區(qū)別

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

    CISC(復(fù)雜指令集)與RISC(精簡指令集)的區(qū)別  

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