ADRP指令

ADRP            X8, #_g@PAGE
ADD             X8, X8, #_g@PAGEOFF
  • 得到一個大小爲4KB的頁的基址,而且在該頁中有全局變量g的地址;ADRP就是講該頁的基址存到寄存器X8中;
  • ADD指令會算出g的地址,X8+#_g@PAGEOFF,#_g@PAGEOFF是一個偏移量;這樣就得到了g的地址X8;

ADR指令

這是一條小範圍的地址讀取指令,它將基於PC的相對偏移的地址讀到目標寄存器中;
使用格式:ADR register exper

  • 編譯時,首先會計算出當前PC到exper的偏移量#offset_to_exper
  • 然後會用ADD或SUB指令,來替換這條指令;例如ADD register,PC,#offset_to_exper
  • register就是exper的地址;

ADRP指令

  • 編譯時,首先會計算出當前PC到exper的偏移量#offset_to_exper
  • pc的低12位清零,然後加上偏移量,給register
  • 得到的地址,是含有label的4KB對齊內存區域的base地址;



作者:fanren
鏈接:https://www.jianshu.com/p/e5452c97cfbd
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發佈了79 篇原創文章 · 獲贊 28 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章