最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

匯編語言LDR指令和LDR偽指令詳解

 更新時間:2023年01月23日 10:08:35   作者:正在起飛的蝸牛  
這篇文章主要介紹了匯編語言LDR指令和LDR偽指令詳解,偽指令是用來自動拆分代碼值的,會把一條語句拆分成多條語句,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

LDR指令和LDR偽指令詳解

ARM32位指令的構(gòu)成

ARM是RISC結(jié)構(gòu),數(shù)據(jù)從內(nèi)存到CPU之間的移動只能通過LDR/STR指令來完成。 32bit = 指令碼 + 數(shù)據(jù)。所以32bit的一條指令不可能表示再帶一個32bit的數(shù)據(jù),實際只有其中的12bit來表示立即數(shù),其中4bit表示移位的位數(shù)(循環(huán)右移,且數(shù)值x2),8bit用來表示要移位的一個基數(shù)。這就產(chǎn)生了非法立即數(shù)和合法立即數(shù)的問題,經(jīng)過移位操作,不為零的部分不能用8bit表示的數(shù)就是非法立即數(shù)。ldr偽指令就是用來解決非法立即數(shù)問題的。

ldr指令和ldr偽指令的使用區(qū)別:

ldr r0, =0xFFF0 @偽指令
ldr r0, 0xFFFF @指令
直觀的區(qū)別就是ldr偽指令使用時,后面的數(shù)據(jù)前會有"=",實際使用時,大部分都使用偽指令,這樣就不用考慮合法和非法立即數(shù)的問題。在編譯的時候,編譯器會將ldr偽指令進(jìn)行替換,用文字池的方式來解決非法立即數(shù)的問題。文字池就是劃分出一段地址空間用來存放常量或者地址,需要時用基址+變址的方式去取數(shù)據(jù),這樣就不用受到合法立即數(shù)的限制,可以表示32bit的數(shù)據(jù)。例如:
匯編源代碼:
_start:
ldr r0, =0x11111111
經(jīng)過反匯編:
00000000 <_start>:
0: e59f009c ldr r0, [pc, #156] ; a4 <delay_loop+0x10>
·
·
·
98: e1520003 cmp r2, r3
9c: 1afffffc bne 94 <delay_loop>
a0: e1a0f00e mov pc, lr
a4: 11111111 tstne r1, r1, lsl r1
分析:
通過反匯編可以看到,ldr偽指令被一條寄存器基址變址指令給替代了。其中以pc為基址,偏移156個字節(jié)(16進(jìn)制是0x9c)。這條指令的作用是將內(nèi)存地址"pc + 156"開頭的4個字節(jié)讀取到r0中,此時pc的值等于當(dāng)前執(zhí)行指令的地址+8(因為流水線的原因),因此pc + 156 = 0xa4,而0xa4地址處存的值剛好是0x11111111。這樣就完成了將0x11111111加載到r0。

補(bǔ)充1:

RAM處理器存在流水線,目前已經(jīng)有十幾級流水線,但是ARM為了兼容,無論Soc有多少級流水線,PC的值都是等于當(dāng)前指令地址 + 8。PC = 當(dāng)前指令地址 + 8, 記住就行。

補(bǔ)充2:

匯編語言ldr偽指令

偽指令是用來自動拆分代碼值的,會把一條語句拆分成多條語句。

示例:

/* 匯編點亮一個 LED 燈 */

.text
.global _start

_start:
    ldr r1, =0x56000050
    ldr r0, =0x100  /* 相當(dāng)于 mov r0, #0x100 */
    str r0, [r1]

    ldr r1, =0x56000054
    ldr r0, =0 /* mov r0, #0 */
    str r0, [r1]

halt:
    b halt

ldr r1, =0x56000054就是一條偽指令,假設(shè)我們想把56000054值給r1寄存器,可以用 mov r1, #56000050 ,
但是長度超出了mov 能接收的長度,就要分為高低字節(jié)去發(fā)送,但是在某些時候我們還要去看開放文檔,才能知道
或者沒有開發(fā)文檔,那就讓偽指令自己去判斷。

到此這篇關(guān)于匯編語言LDR指令和LDR偽指令詳解的文章就介紹到這了,更多相關(guān)匯編語言ldr偽指令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 匯編語言編譯環(huán)境搭建過程

    匯編語言編譯環(huán)境搭建過程

    這篇文章主要介紹了匯編語言編譯環(huán)境搭建過程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Visual Studio-X64匯編編寫方法

    Visual Studio-X64匯編編寫方法

    本文介紹了在Visual Studio中配置64位匯編環(huán)境和C++與匯編的混合編程的方法,詳細(xì)說明了設(shè)置平臺工具集、生成依賴項、鏈接器等步驟,并提供了解決可能出現(xiàn)的編譯錯誤的方案,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 匯編 函數(shù)調(diào)用的實現(xiàn)

    匯編 函數(shù)調(diào)用的實現(xiàn)

    這篇文章主要介紹了匯編 函數(shù)調(diào)用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 匯編語言指令大全 X86和X87匯編指令大全(帶注釋)

    匯編語言指令大全 X86和X87匯編指令大全(帶注釋)

    匯編指令集太多,如果不用就會忘記,所以將i處理器官方的指令集大全寫到博客上,有需要的人可以參考一下
    2021-10-10
  • 王爽 匯編語言學(xué)習(xí)筆記(詳細(xì))

    王爽 匯編語言學(xué)習(xí)筆記(詳細(xì))

    王爽匯編語言第三版是一款高清完整版的專業(yè)編程圖書,該書結(jié)構(gòu)設(shè)計合理,內(nèi)容全面涵蓋知識點豐富,適合自學(xué)者使用,有需要者快來
    2020-01-01
  • 匯編語言有關(guān)在屏幕區(qū)顯示字符的四種方法(推薦)

    匯編語言有關(guān)在屏幕區(qū)顯示字符的四種方法(推薦)

    這篇文章主要介紹了匯編語言有關(guān)在屏幕區(qū)顯示字符的四種方法(推薦),每種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • DEBUG命令詳解教程

    DEBUG命令詳解教程

    DEBUG命令詳解教程...
    2007-03-03
  • UEFI開發(fā)實戰(zhàn)用戶交互界面基礎(chǔ)說明

    UEFI開發(fā)實戰(zhàn)用戶交互界面基礎(chǔ)說明

    這篇文章主要為大家介紹了UEFI開發(fā)實戰(zhàn)用戶交互界面的基礎(chǔ)說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 匯編語言lea指令使用方法解析

    匯編語言lea指令使用方法解析

    這篇文章主要介紹了匯編語言lea指令使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 匯編語言中debug命令使用小結(jié)

    匯編語言中debug命令使用小結(jié)

    Debug是DOS、Windows都提供的實模式(8086方式)程序的調(diào)試工具,本文主要介紹了匯編語言中debug命令使用小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03

最新評論

会理县| 宁河县| 鄱阳县| 衡阳县| 大宁县| 宜兰市| 彭泽县| 三明市| 龙江县| 福安市| 庄浪县| 神木县| 普格县| 天长市| 厦门市| 西乌| 沈丘县| 怀仁县| 通道| 麻栗坡县| 澜沧| 贵阳市| 东海县| 武功县| 沛县| 贵阳市| 邮箱| 将乐县| 高唐县| 贵阳市| 融水| 弋阳县| 乌恰县| 隆昌县| 会宁县| 钦州市| 台中市| 黄石市| 湖南省| 新泰市| 海原县|