坑一 偏移計算
armv7 armv9下的流水線機制。流水線使用三個階段,因此指令分為三個階段執行:
1.取指(從存儲器裝載一條指令);
2.譯碼(識別將要被執行的指令);
3.執行(處理指令并將結果寫回寄存器)。
而R15(PC)總是指向“正在取指”的指令,而不是指向“正在執行”的指令或正在“譯碼”的指令。一般來說,人們習慣性約定將“正在執行的指令作為參考點”,稱之為當前第一條指令,因此PC總是指向第三條指令。
當ARM狀態時,每條指令為4字節長,所以PC始終指向該指令地址加8字節的地址,即:PC值=當前程序執行位置+8;當thumb狀態時每條指令為2字節長度,所以PC指向該指令地址加4字節的地址。
坑二 thumb指令換算
做的最苦逼的事情就是對照一份長達七百頁的官方指令手冊進行匯編到16位機器碼的換算,需要修改一個指令,要先找到指令對應的描述文檔,然后按照二進制換算成十六進制,然后修改掉指令。好苦啊。當時嘗試搜索對應的轉換工具卻未果,后來發現一個神站解決我的難言之隱。
http://armconverter.com/
學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入我的圈子多多交流,共同進步,具體看我的個人介紹,我們一起學技術!
朋友圈,點贊是表態,評論才是真愛;在公眾號,點贊只是認同,贊賞才是死忠;在簡書,閱讀只是眼動,喜歡才是心動。
圖片發自簡書App