簡體   English   中英

在arm64匯編中,“adrp x0, idmap_pg_dir;”是什么意思? 指令是什么意思?

[英]In arm64 assembly, what does "adrp x0, idmap_pg_dir;" instruction mean?

arm64匯編語言的問題。
例如在linux 5.9.15源代碼中,在arch/arm64/kernel/vmlinux.lds.S(鏈接腳本)中,有一行idmap_pg_dir = .; . 所以 idmap_pg_dir 是一個地址。 現在,在 arch/arm64/kernel/head.S 中有一行adrp x0, idmap_pg_dir 意思是不是

1) x0 = PC + idmap_pg_dir  or  
2) x0 = idmap_pg_dir  ?  

adrp x0, addr1我們做adrp x0, addr1 ,通常addr1是相對於 PC 的地址偏移量,而 x0 變成PC + addr 但是鏈接器腳本似乎說idmap_pg_dir只是一個絕對地址。 (不是嗎?)所以我很困惑。 請有人糾正我。

在 ARMv8 架構參考手冊中,在 ADRP 指令部分,它說,

是要計算4KB頁地址的程序標簽。 它與該指令的頁地址的偏移量在 +/-4GB 范圍內,被編碼為“immhi:immlo”乘以 4096。

因此,編譯器“計算”到“標簽”的“偏移量”。 因此,使用當前指令的“偏移量”而不是標簽的絕對地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM