女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

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

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

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

深度剖析ARM內(nèi)核寄存器及基本匯編語(yǔ)言2

jf_78858299 ? 來(lái)源:矜辰所致 ? 作者:矜辰所致 ? 2023-04-24 10:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

2.2 匯編偽指令

匯編語(yǔ)言分成兩塊:標(biāo)準(zhǔn)指令集和非標(biāo)準(zhǔn)指令集。偽指令屬于非標(biāo)準(zhǔn)指令集。

什么是偽指令?

類似于宏的東西,把復(fù)雜的有好幾天指令進(jìn)行跳轉(zhuǎn)的完成的小功能級(jí)進(jìn)行新的標(biāo)簽設(shè)定,這就是偽指令。

類似于學(xué)c語(yǔ)言的時(shí)候的預(yù)處理,在預(yù)處理的時(shí)候把它定義于一堆的宏轉(zhuǎn)化為真正的c語(yǔ)言的代碼。同樣,偽指令是在定義好之后的匯編,匯編的時(shí)候會(huì)把它翻譯成標(biāo)準(zhǔn)指令,也許一條簡(jiǎn)單的偽指令可以翻譯成很多條標(biāo)準(zhǔn)的匯編指令集,所以這就是偽指令最重要的作用。

我們前面說(shuō)的 CODE16 CODE32也是偽指令,用來(lái)指定其后的代碼格式。

偽指令的作用?

基本的指令可以做各類操作了,但操作起來(lái)太麻煩了。偽指令定義了一些類似于帶參數(shù)的宏,能夠更好的實(shí)現(xiàn)匯編程序邏輯。(比如我現(xiàn)在要設(shè)置一個(gè)值給寄存器R0,但下次我修改了寄存器R0之后又需要讀出來(lái)剛才的值,那我們就要先臨時(shí)保存值到SPSR,CPSR,然后不斷切換。)

偽指令只是在匯編器之前作用,匯編以后翻譯為標(biāo)準(zhǔn)的匯編令集。

偽指令的類別偽指令可分為ARM匯編偽指令和GNU匯編偽指令

ARM匯編偽指令是ARM公司的,GNU匯編偽指令是GNU平臺(tái)的。他們有自己的匯編器,不同的匯編器的解釋語(yǔ)法可以設(shè)成不同。

圖片

在這里插入圖片描述

2.2.1 GNU匯編偽指令

這里列出部分偽指令說(shuō)明,具體的偽指令可以結(jié)合 ARM匯編偽指令分析:

bit 11-8 7-0
.word 分配一個(gè)4字節(jié)空間
.byte 定義單字節(jié)數(shù)據(jù)
.short 定義雙字節(jié)數(shù)據(jù)
.long 定義一個(gè)4字節(jié)數(shù)據(jù)
.equ 賦值語(yǔ)句:.equ a, 0x11
.align 數(shù)據(jù)字節(jié)對(duì)齊:.align 4 (4字節(jié)對(duì)齊)
.global 定義全局符號(hào):.global Default_Handler
.end 源文件結(jié)束

2.2.2 ARM匯編偽指令

在我的另一篇博文:STM32的啟動(dòng)過(guò)程(startup_xxxx.s文件解析)

里面有過(guò)一些對(duì)偽指令意思的的說(shuō)明,下面也列出部分說(shuō)明:

AREA:

用于定義一個(gè)代碼段或數(shù)據(jù)段。屬性字段表示該代碼段(或數(shù)據(jù)段)的相關(guān)屬性,多個(gè)屬性用逗號(hào)分隔。圖片其中,段名若以數(shù)字開頭,則該段名需用?“?|?”?括起來(lái):圖片

ALIGN:

ALIGN?偽指令可通過(guò)添加填充字節(jié)的方式,使當(dāng)前位置滿足一定的對(duì)其方式。其中,表達(dá)式的值用于指定對(duì)齊方式,可能的取值為2的冪,如?1?、2?、4?、8?、16?等。圖片若未指定表達(dá)式,則將當(dāng)前位置對(duì)齊到下一個(gè)字的位置。圖片

CODE16和CODE32:

指定其后面的指令為 ARM 指令還是?Thumb?指令,前面介紹過(guò)。

ENTRY:

用于指定匯編程序的入口點(diǎn)。在一個(gè)完整的匯編程序中至少要有一個(gè)?ENTRY?(也可以有多個(gè),當(dāng)有多個(gè)?ENTRY?時(shí),程序的真正入口點(diǎn)由鏈接器指定),但在一個(gè)源文件里最多只能有一個(gè)?ENTRY。

startup_stm32f103xg.s里面就沒(méi)有。

END:

用于通知編譯器已經(jīng)到了源程序的結(jié)尾。圖片IMPORT 和 EXPORT:

IMPORT 定義表示這是一個(gè)外部變量的標(biāo)號(hào),不是在本程序定義的 EXPORT 表示本程序里面用到的變量提供給其他模塊調(diào)用的圖片

2.2.3 LDRADR

LDR偽指令:

簡(jiǎn)單介紹了偽指令基礎(chǔ),回到上一小結(jié)留下的問(wèn)題,想要把任意值復(fù)制給 R0,怎么處理,我們使用偽指令:LDR R0, =value

編譯器會(huì)把“偽指令”替換成真實(shí)的指令:

LDR R0, =0x12

0x12是立即數(shù),那么替換為:MOV R0, #0x12

LDR R0, =0x123456780x12345678不是立即數(shù),那么替換為:LDR R0, [PC, #offset] // 2. 使用Load Register讀內(nèi)存指令讀出值,offset是鏈接程序時(shí)確定的 ……Label DCD 0x12345678 // 1. 編譯器在程序某個(gè)地方保存有這個(gè)值

ADR偽指令:

ADR的意思是:address,用來(lái)讀某個(gè)標(biāo)號(hào)的地址:ADR{cond} Rd, labe1

ADR  R0,  Loop
...
Loop
    ADD  R0, R0, #1

    ;(它是“偽指令”,會(huì)被轉(zhuǎn)換成某條真實(shí)的指令,比如:)
ADD R0, PC, #val   ; loop的地址等于PC值加上或者減去val的值,val的值在鏈接時(shí)確定,
...
Loop
    ADD  R0, R0, #1

2.3 ARM匯編指令集

在《ARM Cortex-M3與Cortex-M4權(quán)威指南》一文中第5章節(jié)有詳細(xì)的指令集說(shuō)明:圖片匯編指令可以分為幾大類:數(shù)據(jù)處理、內(nèi)存訪問(wèn)、跳轉(zhuǎn)、飽和運(yùn)算、其他指令。

數(shù)據(jù)傳輸命令 MOV

MOV指令,用于將數(shù)據(jù)從一個(gè)寄存器拷貝到另外一個(gè)寄存器,或者將一個(gè)立即數(shù)傳遞到寄存器。

MOV指令的格式為:MOV{條件}{S} 目的寄存器,源操作數(shù)

MOV R0,R1     ;@將寄存器R1中的數(shù)據(jù)傳遞給R0,即R0=R1
MOV R0, #0X12  ;@將立即數(shù)0X12傳遞給R0寄存器,即R0=0X12

狀態(tài)寄存器訪問(wèn) MRS 和 MSR

MRS指令,用于將特殊寄存器(如CPSR和SPSR)中的數(shù)據(jù)傳遞給通用寄存器。

MSR指令,和MRS相反,用來(lái)將普通寄存器的數(shù)據(jù)傳遞給特殊寄存器。

;M3/M4
MRS  R0, APSR  ;單獨(dú)讀APSR
MRS  R0,  PSR  ; 讀組合程序狀態(tài)

;A7
MRS  R0, CPSR  ; 讀組合程序狀態(tài)

...
MSR CPSR,R0   ;傳送R0的內(nèi)容到CPSR

存儲(chǔ)器訪問(wèn) LDR 和 STR

LDR:

LDR 指令用于從存儲(chǔ)器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。該指令通常用于從存儲(chǔ)器中讀取32位的字?jǐn)?shù)據(jù)到通用寄存器,然后對(duì)數(shù)據(jù)進(jìn)行處理。

指令的格式為:LDR{條件} 目的寄存器,<存儲(chǔ)器地址>

當(dāng)程序計(jì)數(shù)器PC作為目的寄存器時(shí),指令從存儲(chǔ)器中讀取的字?jǐn)?shù)據(jù)被當(dāng)作目的地址,從而可以實(shí)現(xiàn)程序流程的跳轉(zhuǎn)。

LDRB: 字節(jié)操作

LDRH: 半字操作

LDR Rd, [Rn , #offset] ;從存儲(chǔ)器Rn+offset的位置讀取數(shù)據(jù)存放到Rd中。
...
LDR R0, =0X02077004 ;偽指令,將寄存器地址 0X02077004 加載到 R0 中,即 R0=0X02077004
LDR R1, [R0]        ;讀取地址 0X02077004 中的數(shù)據(jù)到 R1 寄存器中
...
LDR  R0,[R1,R2]      ;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0。
LDR  R0,[R1,#8]     ;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0。
...
LDR  R0,[R1,R2,LSL#2]! ;將存儲(chǔ)器地址R1+R2×4的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。
LDR  R0,[R1],R2,LSL#2  ;將存儲(chǔ)器地址R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R2×4寫入R1。
...
LDRH  R0,[R1]      ;將存儲(chǔ)器地址為R1的半字?jǐn)?shù)據(jù)讀入寄存器R0,并將R0的高16位清零。

STR:

STR 指令用于從源寄存器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到存儲(chǔ)器中。該指令在程序設(shè)計(jì)中比較常用,且尋址方式靈活多樣,使用方式可參考指令LDR。

指令的格式為:STR{條件} 源寄存器,<存儲(chǔ)器地址>

STRB: 字節(jié)操作,從源寄存器中將一個(gè)8位的字節(jié)數(shù)據(jù)傳送到存儲(chǔ)器中。該字節(jié)數(shù)據(jù)為源寄存器中的低8位。

STRH: 半字操作,從源寄存器中將一個(gè)16位的半字?jǐn)?shù)據(jù)傳送到存儲(chǔ)器中。該半字?jǐn)?shù)據(jù)為源寄存器中的低16位。

STR Rd, [Rn, #offset] ;將Rd中的數(shù)據(jù)寫入到存儲(chǔ)器中的Rn+offset位置。

LDR R0, =0X02077004 ;將寄存器地址 0X02077004 加載到 R0 中,即 R0=0X02077004

LDR R1, =0X2000060c ;R1 保存要寫入到寄存器的值,即 R1=0X2000060c

STR R1, [R0] ;將 R1 中的值寫入到 R0 中所保存的地址中

STR R0,[R1],#8 ;將R0中的字?jǐn)?shù)據(jù)寫入以R1為地址的存儲(chǔ)器中,并將新地址R1+8寫入R1。

STR R0,[R1,#8] ;將R0中的字?jǐn)?shù)據(jù)寫入以R1+8為地址的存儲(chǔ)器中。

壓棧和出棧 PUSH 和 POP

PUSH :

壓棧,將寄存器中的內(nèi)容,保存到堆棧指針指向的內(nèi)存上面,將寄存器列表存入棧中。

PUSH < reg list >

POP :

出棧,從棧中恢復(fù)寄存器列表

POP < reg list >

push {R0, R1}   ;保存R0,R1
push {R0~R3,R12} ;保存 R0~R3 和 R12,入棧
pop {R0~R3}       ;恢復(fù)R0 到 R3 ,出棧

以M3內(nèi)核來(lái)舉個(gè)例子:

假設(shè)當(dāng)前 MSP 值為 0x2000 2480;寄存器 R0 的值為 0x3434 3434 寄存器 R1 的值為 0x0000 1212 寄存器 R2 的值為 0x0000 0000

執(zhí)行push {R0, R1,R2}之后,

內(nèi)存地址的數(shù)據(jù)為:0x2000 2474的值為: 0x3434 3434 (R0的值) 0x2000 2478的值為: 0x0000 1212 (R1的值) 0x2000 247C的值為: 0x0000 0000 (R2的值) MSP 的值變成 0x2000 2474

高位寄存器保存到高地址,先入棧,如果是POP,數(shù)據(jù)先出到低位寄存器

跳轉(zhuǎn)指令 B 和 BL

B :

ARM 處理器將立即跳轉(zhuǎn)到指定的目標(biāo)地址,不再返回原地址。

B指令的格式為:B{條件} 目標(biāo)地址

注意存儲(chǔ)在跳轉(zhuǎn)指令中的實(shí)際值是相對(duì)當(dāng)前PC值的一個(gè)偏移量,而不是一個(gè)絕對(duì)地址,它的值由匯編器來(lái)計(jì)算。

//設(shè)置棧頂指針后跳轉(zhuǎn)到C語(yǔ)言
_start:
ldr sp,=0X80200000  ;設(shè)置棧指針
b main          ;跳到 main 函數(shù)

BL :

BL 跳轉(zhuǎn)指令,在跳轉(zhuǎn)之前會(huì)在寄存器LR(R14)中保存當(dāng)前PC寄存器值,所以可以通過(guò)將LR 寄存器中的值重新加載到PC中來(lái)繼續(xù)從跳轉(zhuǎn)之前的代碼處運(yùn)行,是子程序調(diào)用的常用的方法。

BL loop ;跳轉(zhuǎn)到標(biāo)號(hào)loop處執(zhí)行時(shí),同時(shí)將當(dāng)前的PC值保存到R14中

BLX:

該跳轉(zhuǎn)指令是當(dāng)子程序使用Thumb指令集,而調(diào)用者使用ARM指令集時(shí)使用。

BLX指令從ARM指令集跳轉(zhuǎn)到指令中所指定的目標(biāo)地址,并將處理器的工作狀態(tài)有ARM狀態(tài)切換到Thumb狀態(tài),該指令同時(shí)將PC的當(dāng)前內(nèi)容保存到寄存器R14中。

BX:

BX指令跳轉(zhuǎn)到指令中所指定的目標(biāo)地址,目標(biāo)地址處的指令既可以是ARM指令,也可以是Thumb指令。

算數(shù)運(yùn)算指令

算數(shù)運(yùn)算指令和下面的邏輯運(yùn)算指令表格摘自《【正點(diǎn)原子】I.MX6U嵌入式Linux驅(qū)動(dòng)開發(fā)指南》

邏輯運(yùn)算指令

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

    關(guān)注

    134

    文章

    9346

    瀏覽量

    376831
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5433

    瀏覽量

    124196
  • PC
    PC
    +關(guān)注

    關(guān)注

    9

    文章

    2147

    瀏覽量

    156396
  • 匯編語(yǔ)言
    +關(guān)注

    關(guān)注

    14

    文章

    412

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    匯編語(yǔ)言長(zhǎng)什么樣子的呢

    文章目錄匯編語(yǔ)言長(zhǎng)什么的樣子呢?ARM匯編指令條件和狀態(tài)Status碼ARM匯編尋址方式數(shù)據(jù)操作(ALU操作)邏輯操作(與,或,非,異或)比
    發(fā)表于 12-14 07:28

    ARM匯編語(yǔ)言與指令格式資料分享

    1、ARM匯編語(yǔ)言與指令格式介紹匯編語(yǔ)言介紹概念指的是用助記符代替操作碼,用地址符號(hào)或標(biāo)簽(:#&)代替地址碼的編程語(yǔ)言。優(yōu)缺點(diǎn)優(yōu)點(diǎn):可以直接訪問(wèn)硬件目標(biāo),代碼簡(jiǎn)短,執(zhí)行速度快
    發(fā)表于 04-22 16:10

    ARM匯編語(yǔ)言入門

    本指南介紹了使用A64指令集的Arm匯編語(yǔ)言的基本概念,向您展示了如何使用Arm Development Studio創(chuàng)建和運(yùn)行匯編代碼,并提供了
    發(fā)表于 08-08 07:28

    匯編語(yǔ)言教程-段寄存器的說(shuō)明語(yǔ)句

    匯編語(yǔ)言教程-段寄存器的說(shuō)明語(yǔ)句   在匯編語(yǔ)言源程序中可以定義多個(gè)段,每個(gè)段都要與一個(gè)段寄存器建立一種對(duì)應(yīng)關(guān)系。建立這
    發(fā)表于 03-27 17:17 ?1523次閱讀

    ARM匯編語(yǔ)言官方手冊(cè)(中文)

    ARM匯編語(yǔ)言官方手冊(cè)(中文)匯編語(yǔ)言ARM匯編語(yǔ)言官方手冊(cè)(中文)
    發(fā)表于 12-28 15:02 ?214次下載

    匯編語(yǔ)言

    匯編語(yǔ)言舉例,比如讀寄存器內(nèi)容的源代碼、匯編語(yǔ)言制作的光帶菜單及源程序、獲得操作系統(tǒng)版本的匯編源代碼等
    發(fā)表于 12-31 10:40 ?33次下載

    51單片機(jī)匯編語(yǔ)言教程_單片機(jī)的特殊功能寄存器

    51單片機(jī)匯編語(yǔ)言教程:7課單片機(jī)的特殊功能寄存器
    發(fā)表于 01-19 15:26 ?0次下載

    匯編語(yǔ)言學(xué)習(xí)

    寄存器 一個(gè)cpu有多個(gè)寄存器 就是cpu中可以存儲(chǔ)數(shù)據(jù)的器件,一個(gè)cpu中有多個(gè)寄存器匯編語(yǔ)言由一下3類組成 1、匯編
    發(fā)表于 11-23 18:06 ?14次下載
    <b class='flag-5'>匯編語(yǔ)言</b>學(xué)習(xí)

    [從零學(xué)習(xí)匯編語(yǔ)言] -寄存器詳解

    文章目錄前言一、 存儲(chǔ)與通用寄存器1. 存儲(chǔ)2. 通用寄存器前言上一章我們?cè)?jiǎn)單的介紹過(guò)計(jì)算機(jī)中的一些硬件和軟件的相關(guān)概念,還不熟悉的小
    發(fā)表于 11-26 20:51 ?8次下載
    [從零學(xué)習(xí)<b class='flag-5'>匯編語(yǔ)言</b>] -<b class='flag-5'>寄存器</b>詳解

    [從零學(xué)習(xí)匯編語(yǔ)言] - 寄存器與內(nèi)存訪問(wèn)

    [從零學(xué)習(xí)匯編語(yǔ)言] - 寄存器與內(nèi)存訪問(wèn)
    發(fā)表于 11-26 20:51 ?13次下載
    [從零學(xué)習(xí)<b class='flag-5'>匯編語(yǔ)言</b>] - <b class='flag-5'>寄存器</b>與內(nèi)存訪問(wèn)

    ARM匯編語(yǔ)言官方手冊(cè)

    ARM匯編語(yǔ)言官方手冊(cè)
    發(fā)表于 10-10 10:44 ?32次下載

    深度剖析ARM內(nèi)核寄存器及基本匯編語(yǔ)言1

    M3/M4內(nèi)核寄存器 * 1.2 A7內(nèi)核寄存器 * 1.3 ARM中的PC指針的值 * 二、
    的頭像 發(fā)表于 04-24 09:59 ?1280次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>剖析</b><b class='flag-5'>ARM</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>寄存器</b>及基本<b class='flag-5'>匯編語(yǔ)言</b>1

    深度剖析ARM內(nèi)核寄存器及基本匯編語(yǔ)言3

    M3/M4內(nèi)核寄存器 * 1.2 A7內(nèi)核寄存器 * 1.3 ARM中的PC指針的值 * 二、
    的頭像 發(fā)表于 04-24 10:01 ?1701次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>剖析</b><b class='flag-5'>ARM</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>寄存器</b>及基本<b class='flag-5'>匯編語(yǔ)言</b>3

    單片機(jī)匯編語(yǔ)言的結(jié)構(gòu)/數(shù)據(jù)類型/匯編指令

    開發(fā)匯編語(yǔ)言是為了為機(jī)器級(jí)代碼指令提供助記符或符號(hào),匯編語(yǔ)言程序由助記符組成,因此應(yīng)將它們翻譯成機(jī)器代碼。負(fù)責(zé)這種轉(zhuǎn)換的程序稱為匯編程序。匯編語(yǔ)言通常被稱為低級(jí)
    的頭像 發(fā)表于 07-07 12:28 ?3599次閱讀

    ARM匯編語(yǔ)言工具

    電子發(fā)燒友網(wǎng)站提供《ARM匯編語(yǔ)言工具.pdf》資料免費(fèi)下載
    發(fā)表于 11-06 09:12 ?2次下載
    <b class='flag-5'>ARM</b><b class='flag-5'>匯編語(yǔ)言</b>工具
    主站蜘蛛池模板: 土默特右旗| 泰顺县| 陕西省| 屯留县| 安远县| 石门县| 中阳县| 名山县| 雅江县| 锡林郭勒盟| 长丰县| 云安县| 读书| 将乐县| 仲巴县| 湘乡市| 海城市| 漳州市| 本溪市| 兴文县| 乐山市| 桃园市| 安塞县| 雅江县| 当涂县| 泉州市| 同江市| 衡东县| 肃宁县| 建瓯市| 堆龙德庆县| 海门市| 微山县| 新乡县| 渝中区| 泗水县| 乌拉特后旗| 四平市| 宁国市| 福建省| 景谷|