- B跳轉指令是代碼位置無關的,經過匯編后會替換為當前PC值加(減)一個修正值,不管這條指令是在哪一個地址執行,都能跳轉到指定的位置。
- B只能在當前PC的32M范圍內跳轉,LDR只能在當前PC的4KB(0xfff范圍)跳轉。
- LDR PC,=xxx指令將向PC直接裝載一個標號xxx的值,但標號經過編譯后將被替換為一個與RO相對應的值,這樣無論指令在何處執行都能跳轉到一個指定的位置。
歸納如下:
(1) b step1 :b跳轉指令是相對跳轉,依賴當前PC的值,偏移量是通過該指令本身的bit[2
3:0]算出來的,這使得使用b指令的程序不依賴於要跳到的代碼的位置(位置無關碼),只看指令本身。
(2) ldr pc, =step1 :該指令是從內存中的某個位置(step1)讀出數據並賦給PC,同樣依
賴當前PC的值,但是偏移量是那個位置(step1)的連接地址(運行時的地址),所以可
以用它實現從Flash到RAM的程序跳轉。