日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[ARM-assembly]-ARMv8-A64指令集总结和学习

發(fā)布時(shí)間:2025/3/21 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [ARM-assembly]-ARMv8-A64指令集总结和学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

★★★ 個(gè)人博客導(dǎo)讀首頁(yè)—點(diǎn)擊此處 ★★★

文章目錄

      • 1、一個(gè)簡(jiǎn)單的aarch64架構(gòu)圖
      • 2、A64指令集的特點(diǎn):
      • 3、跳轉(zhuǎn)指令
        • (1)、條件跳轉(zhuǎn)指令
        • (2)、無(wú)條件跳轉(zhuǎn)label指令
        • (3)、無(wú)條件跳轉(zhuǎn)register指令
      • 4、異常產(chǎn)生和返回
        • (1)、異常產(chǎn)生指令
        • (2)、異常返回指令
        • (3)、debug的異常指令
      • 5、系統(tǒng)訪問(wèn)指令
        • (1)、系統(tǒng)寄存器訪問(wèn)指令
        • (2)、系統(tǒng)操作指令
      • 6、提示指令Hint instructions
      • 7、Barriers指令
      • 7、指針授權(quán)指令:Pointer authentication instructions
      • 8、存取指令 : Loads and stores
        • (1)、存取指令的尋址模式
        • (2)、load/store指令的介紹
          • a、Load-Store Pair
          • b、LDNP and STNP 非暫存指令
          • c、Load-Store Unprivileged
          • d、Load-Store Exclusive
          • e、Load-Acquire / Store-Release

1、一個(gè)簡(jiǎn)單的aarch64架構(gòu)圖

2、A64指令集的特點(diǎn):

  • x0-x30 : 31個(gè)通用寄存器(general-purpose register),且都擴(kuò)展到了64位, 其中x30是sp(Stack Pointer)
  • Zero Register: XZR/WZR,在大多數(shù)情況下,作為源寄存器使用時(shí), 讀出來(lái)的值 是0; 作為目標(biāo)寄存器使用時(shí), 丟棄結(jié)果。
  • 不再有LDM、STM、PUSH、POP指令, 取而代之的是STP、LDP
  • 條件指令大量的減少了
  • 不能將CPSR作為單個(gè)寄存器訪問(wèn),確認(rèn)代之的是PSTATE
  • 刪除了"協(xié)處理器"概念,取而代之的是通過(guò)系統(tǒng)寄存器訪問(wèn)
    o System register access
    o Cache/TLB management
    o VAPA translation
    o Barriers and CLREX
    o Architectural hints (WFI, etc)
    o Debug

通用寄存器分類

PSTATE寄存器:

3、跳轉(zhuǎn)指令

指令統(tǒng)計(jì)

  • 條件跳轉(zhuǎn)指令 : 5個(gè)
  • 無(wú)條件跳轉(zhuǎn)label指令 : 2個(gè)
  • 無(wú)條件跳轉(zhuǎn)register指令 : 3個(gè)

(1)、條件跳轉(zhuǎn)指令

(偏移范圍為±1MiB)

  • b.cond label
  • cbz Xn|Wn, label
  • cbnz Xn|Wn, label
  • tbz Xn|Wn, #uimm6, label //如果Xn的第uimm的bit位位0,則跳轉(zhuǎn)到label
  • tbnz Xn|Wn, #uimm6, label

(b.cond的condition條件)

(b.cond的應(yīng)用)

.align 7, INV_INSN el0_sync_a64:restore_mappingmrs x2, esr_el1mrs x3, sp_el0lsr x2, x2, #ESR_EC_SHIFTcmp x2, #ESR_EC_AARCH64_SVCb.eq el0_svc //-----------b.cond的應(yīng)用b el0_sync_abortcheck_vector_size el0_sync_a64

(cbz、cbnz的應(yīng)用)
當(dāng)調(diào)用__cpu_spin_trylock(lock)時(shí)

FUNC __cpu_spin_trylock , :mov x1, x0mov w2, #SPINLOCK_LOCK .loop: ldaxr w0, [x1]cbnz w0, .cpu_spin_trylock_out //------相當(dāng)于是在檢查參數(shù)的合法性,lock==NULL時(shí)直接返回stxr w0, w2, [x1]cbnz w0, .loop .cpu_spin_trylock_out:ret END_FUNC __cpu_spin_trylock

(tbz、tbnz的應(yīng)用)

LOCAL_FUNC el1_sync_abort , :mov x0, spmsr spsel, #0mov x3, sp /* Save original sp *//** Update core local flags.* flags = (flags << THREAD_CLF_SAVED_SHIFT) | THREAD_CLF_ABORT;*/ldr w1, [x0, #THREAD_CORE_LOCAL_FLAGS]lsl w1, w1, #THREAD_CLF_SAVED_SHIFTorr w1, w1, #THREAD_CLF_ABORTtbnz w1, #(THREAD_CLF_SAVED_SHIFT + THREAD_CLF_ABORT_SHIFT), \ //--------------tbnz的使用.Lsel_tmp_sp/* Select abort stack */ldr x2, [x0, #THREAD_CORE_LOCAL_ABT_STACK_VA_END]b .Lset_sp .Lsel_tmp_sp:/* Select tmp stack */ldr x2, [x0, #THREAD_CORE_LOCAL_TMP_STACK_VA_END]orr w1, w1, #THREAD_CLF_TMP /* flags |= THREAD_CLF_TMP; */

(2)、無(wú)條件跳轉(zhuǎn)label指令

(偏移范圍為 : ±128MiB)

  • b label
  • bl label

(3)、無(wú)條件跳轉(zhuǎn)register指令

(偏移范圍為 : 無(wú)限制)

  • br Xn
  • blr Xn
  • ret {Xn}

4、異常產(chǎn)生和返回

  • 異常產(chǎn)生指令 : 5個(gè)
  • 異常返回指令 : 1個(gè)
  • debug的異常指令 : 4個(gè)

(1)、異常產(chǎn)生指令

  • BRK Breakpoint Instruction BRK
  • HLT Halt Instruction //停止指令
  • HVC
  • SMC
  • SVC

(2)、異常返回指令

  • ERET

(3)、debug的異常指令

DCPS1 Debug switch to Exception level 1
DCPS2 Debug switch to Exception level 2
DCPS3 Debug switch to Exception level 3
DRPS Debug restore PE state

5、系統(tǒng)訪問(wèn)指令

  • 系統(tǒng)寄存器訪問(wèn)指令 : 1個(gè)
  • 系統(tǒng)操作指令 : 6個(gè)

(1)、系統(tǒng)寄存器訪問(wèn)指令

  • MRS
  • MSR

(2)、系統(tǒng)操作指令

  • SYS
  • SYSL
  • IC
  • DC
  • AT
  • TLBI

6、提示指令Hint instructions

提示指令Hint instructions : 8個(gè)

  • NOP
  • YIELD
  • WFE
  • WFI
  • SEV
  • SEVL
  • HINT
  • DGH

7、Barriers指令

Barriers指令 : 4個(gè)

  • CLREX // Clear Exclusives monitor
  • DMB
  • DSB
  • ISB

還有一些特殊的barriers指令,如果未實(shí)現(xiàn),則等效于 NOP
CSDB
ESB
PSB
PSSB
SB
SSBB
TSB

7、指針授權(quán)指令:Pointer authentication instructions

有很多寄存器,目前(2020)基本沒(méi)有使用,暫不介紹

8、存取指令 : Loads and stores

(1)、存取指令的尋址模式


[Rn, offset]! 前變址尋址
最終訪問(wèn)內(nèi)存的地址 = Rn+offset
操作后Rn的值 = Rn+offset

[Rn], offset 后變址尋址
最終訪問(wèn)內(nèi)存的地址 = Rn
操作后Rn的值 = Rn+offset

[Rn, offset] 偏移尋址
最終訪問(wèn)內(nèi)存的地址 = Rn+offset
操作后Rn的值不變

注意:對(duì)于偏移尋址,還可以使用寄存器偏移尋址、擴(kuò)展寄存器偏移尋址[base,Xm{,LSL #imm}][base,Wm,(S|U)XTW {#imm}]

示例:
(1)、在進(jìn)程切換調(diào)用的cpu_switch_to函數(shù)中,使用到了后變址尋址

ENTRY(cpu_switch_to)mov x10, #THREAD_CPU_CONTEXTadd x8, x0, x10mov x9, spstp x19, x20, [x8], #16 // store callee-saved registersstp x21, x22, [x8], #16stp x23, x24, [x8], #16stp x25, x26, [x8], #16stp x27, x28, [x8], #16stp x29, x9, [x8], #16str lr, [x8]add x8, x1, x10ldp x19, x20, [x8], #16 // restore callee-saved registersldp x21, x22, [x8], #16ldp x23, x24, [x8], #16ldp x25, x26, [x8], #16ldp x27, x28, [x8], #16ldp x29, x9, [x8], #16ldr lr, [x8]mov sp, x9 #ifdef CONFIG_THREAD_INFO_IN_TASKmsr sp_el0, x1 #elseand x9, x9, #~(THREAD_SIZE - 1)msr sp_el0, x9 #endifret ENDPROC(cpu_switch_to)

(2)、load/store指令的介紹

術(shù)語(yǔ):

sign-extends :符號(hào)擴(kuò)展,前面補(bǔ)符合位和0 zero-extends :0擴(kuò)展,即前面補(bǔ)0S : sign-extends B : byte H : half-word R :register P : pair 雙字操作
a、Load-Store Pair
LDP Wt1, Wt2, addr //從addr處讀取兩個(gè)word到Wt1和Wt2 LDP Xt1, Xt2, addr //從addr處讀取兩個(gè)double-word到Xt1和Xt2 LDPSW Xt1, Xt2, addr //從addr處讀取兩個(gè)word到Xt1和Xt2, sign-extends STP Wt1, Wt2, addr //將Wt1和Wt2寫(xiě)入addr地址處 STP Xt1, Xt2, addr //將Xt1和Xt2寫(xiě)入addr地址處
b、LDNP and STNP 非暫存指令

非暫存指令(Non-temporal),不會(huì)加載到cache

LDNP Wt1, Wt2, [base,#imm] LDNP Xt1, Xt2, [base,#imm] STNP Wt1, Wt2, [base,#imm] STNP Xt1, Xt2, [base,#imm]
c、Load-Store Unprivileged

在EL1中執(zhí)行數(shù)據(jù)的加載和寫(xiě)入,權(quán)限等是按照EL0的配置來(lái)執(zhí)行

LDTR Wt, [base,#simm9] LDTR Xt, [base,#simm9] LDTRB Wt, [base,#simm9] 加載一個(gè)字節(jié)并sign-extends擴(kuò)展到Wt, 在EL1下執(zhí)行的,但是按照EL0的權(quán)限來(lái)執(zhí)行 LDTRSB Wt, [base,#simm9] LDTRSB Xt, [base,#simm9] LDTRH Wt, [base,#simm9] LDTRSH Wt, [base,#simm9] LDTRSH Xt, [base,#simm9] LDTRSW Xt, [base,#simm9] STTR Wt, [base,#simm9] STTR Xt, [base,#simm9] STTRB Wt, [base,#simm9] STTRH Wt, [base,#simm9]
d、Load-Store Exclusive

【補(bǔ)充armv8的exclusive操作】

為了解決多核情況下的鎖競(jìng)爭(zhēng)問(wèn)題,arm引入了exclusive操作,并添加了相應(yīng)的指令。
exclusive的操作的核心,就是會(huì)將鎖,用一個(gè)狀態(tài)機(jī)進(jìn)行維護(hù),該狀態(tài)機(jī)有2種狀態(tài),open狀態(tài)和exclusive狀態(tài)。要想成功的對(duì)鎖進(jìn)行上鎖,狀態(tài)必須要從exclusive狀態(tài)切換到open狀態(tài),其他狀態(tài),都是失敗的。
LDXR指令,將狀態(tài)從open狀態(tài)切換到exclusive狀態(tài),STXR指令,將狀態(tài)從exclusive狀態(tài)切換到open狀態(tài)

術(shù)語(yǔ) : (R-register, P-pair) LDXR Wt, [base{,#0}] LDXR Xt, [base{,#0}] LDXRB Wt, [base{,#0}] LDXRH Wt, [base{,#0}] LDXP Wt, Wt2, [base{,#0}] LDXP Xt, Xt2, [base{,#0}] STXR Ws, Wt, [base{,#0}] STXR Ws, Xt, [base{,#0}] STXRB Ws, Wt, [base{,#0}] STXRH Ws, Wt, [base{,#0}] STXP Ws, Wt, Wt2, [base{,#0}] STXP Ws, Xt, Xt2, [base{,#0}]
e、Load-Acquire / Store-Release

標(biāo)記物理地址為非獨(dú)占訪問(wèn)

(Non-exclusive)

LDAR Wt, [base{,#0}] LDAR Xt, [base{,#0}] LDARB Wt, [base{,#0}] LDARH Wt, [base{,#0}] STLR Wt, [base{,#0}] STLR Xt, [base{,#0}] STLRB Wt, [base{,#0}] STLRH Wt, [base{,#0}]

(Exclusive)

LDAXR Wt, [base{,#0}] LDAXR Xt, [base{,#0}] LDAXRB Wt, [base{,#0}] LDAXRH Wt, [base{,#0}] LDAXP Wt, Wt2, [base{,#0}] LDAXP Xt, Xt2, [base{,#0}] STLXR Ws, Wt, [base{,#0}] STLXR Ws, Xt, [base{,#0}] STLXRB Ws, Wt, [base{,#0}] STLXRH Ws, Xt|Wt, [base{,#0}] STLXP Ws, Wt, Wt2, [base{,#0}] STLXP Ws, Xt, Xt2, [base{,#0}]

總結(jié)

以上是生活随笔為你收集整理的[ARM-assembly]-ARMv8-A64指令集总结和学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国产一区二区三区四 | 亚洲色欲色欲www在线观看 | 男女洗澡互摸私密部位视频 | 男人天堂社区 | 成人黄色小说在线观看 | 枫花恋在线观看 | 请用你的手指扰乱我吧 | 欧美一区二区三区在线观看视频 | 欧美视频日韩视频 | 麻豆理论片 | 欧美乱妇日本无乱码特黄大片 | 波多野结衣高清在线 | 日韩黄色免费电影 | 欧美国产视频一区 | 动漫美女被x | 96av在线 | 欧美少妇b | 又黄又色又爽的视频 | 一乃葵在线 | 久久中文娱乐网 | 黄色在线观看免费视频 | 国内外成人免费视频 | www.欧美色图 | 日韩av在线看免费观看 | 国产亚洲美女精品久久久2020 | 久久久丁香 | 日日噜噜噜 | 18禁网站免费无遮挡无码中文 | 亚洲精品观看 | av在线一 | 一级特黄高清 | 日韩一级二级三级 | 肉视频在线观看 | 精品国产一区在线 | 久久精品一日日躁夜夜躁 | 国产一区精品视频 | 国产精品美女在线 | 在线国产黄色 | 观看av在线 | 久操新在线 | 亲女禁h啪啪宫交 | 中文有码在线观看 | 日韩一区精品 | 网站在线播放 | 国产视频一区二区三 | 成人国产免费观看 | 免费高清毛片 | 红桃成人在线 | 激情网五月天 | 国产精品1页 | 激情五月五月婷婷 | 日本中文在线播放 | 国产小视频你懂的 | 欧美啪啪一区二区 | 国产又爽又黄无码无遮挡在线观看 | 日穴| 乳色吐息在线观看 | 九九久久国产精品 | 美女一级| 女人十八毛片嫩草av | 国产成人精品综合久久久久99 | 天堂a在线 | 精品国产九九九 | 亚洲av综合av一区二区三区 | 午夜一区 | 6080一级片| 夜夜夜夜爽 | 欧美日韩国产精品一区 | jizz一区二区 | 激情国产视频 | 狠狠躁日日躁夜夜躁 | 香蕉亚洲| 老熟妇仑乱一区二区视频 | 男女插鸡视频 | 国产经典自拍 | 亚洲观看黄色网 | 北条麻妃一区二区三区四区五区 | 国产亚洲不卡 | 日批视频在线播放 | 午夜精品久久久久久久第一页按摩 | 国产网站一区 | 一区二区三区四区久久 | 波多野结衣欧美 | 在线视频 一区二区 | 亚洲免费在线播放 | 亚洲精品无amm毛片 国内一区二区三区 | 国产一区二区三区免费观看 | 欧美黑人疯狂性受xxxxx喷水 | 超碰1000| 男生坤坤放进女生坤坤里 | 播金莲一级淫片aaaaaaa | 成人h动漫精品一区 | 日韩视频在线一区二区 | 成人在线免费网址 | 日本成人社区 | 捆绑黑丝美女 | 大地资源高清播放在线观看 | 精品一区二区三区三区 | 91视频久久久 |