1. b與bl指令的作用是什么?
b與bl指令的作用:實現程序跳轉,也就是調用子程序。
2. b與bl指令的區別是什么?
b與bl指令的區別:
b指令:簡單的程序跳轉,跳轉到到目標標號處執行。
bl指令:帶鏈接程序跳轉,也就是要帶返回地址。在發生跳轉前,將當前PC-4保存到R14中。也就是返回地址存在R14中,所以可以在子程序返回時只要MOV PC, LR即可。
3. 什么是R14?
在ARM處理器中使用 R14實現對斷點和調用點的記錄,即使用R14用作返回鏈接寄存器(LR )。
在硬件上和指令執行上,CPU自動完成相應返回點的記錄。在ARM 匯編語言程序設計時,R14和LR通用。
3.1
ARM處理器相應異常時,會自動將當前的PC值保存到LR寄存器。
3.2
ARM處理器執行子程序調用指令(BL )時,會自動將當前的PC值減去4並保存到LR寄存器,即將調用指令的下緊鄰指令的地址保存到LR。
ARM處理器針對不同的模式,共有6個鏈接寄存器資源(LR ),其中用戶模式和系統模式共用一個 LR,每種異常模式都有各自專用的R14 寄存器(LR)。
這些鏈接寄存器分別為 R14、R14_svc、R14_abt、R14_und、R14_irq、R14_fiq,
程序設計者要清晰處理器的模式與相應寄存器的對應關系,都是使用 R14,但不同模式下的R14 不是同一個物理資源,其內容可能天壤之別。
R14 不用做鏈接寄存器(LR )時,也可以用做通用數據寄存器。
4.
ARM 處理器中使用R15 作為PC,它總是指向取指單元,並且ARM 處理器中只有一個PC 寄存器,被各模式共用。R15 有32 位寬度, 可以直接尋址4GB的地址空間(2^32 = 4G)。
ARM 體系要求32 位長的ARM 指令在存儲器中必須字對齊存儲,16 位長的 Thumb 指令必須半字對齊存儲。
因此,在ARM 狀態下,R15的值總是能被4 整除,也就是R15寄存器的最低2位總是0; Thumb 狀態下,R15的值總是能被2整除,也就是R15寄存器的最低位總是0。
.