2016-02-13 58 views
0

我目前正在學習臂裝配,我有一些問題。閱讀文檔時,我發現15號寄存器是存儲下一個指令地址的程序計數器,當指令完成時,它會增加4(字節,或者在拇指模式下爲2)。使用PC的ARM組裝回路?

所以,我的問題是,如果我運行一個改變PC本身少於4個字節的指令,它會返回到之前的指令,不是嗎?然後一遍又一遍,所以這將是一個無限循環?

謝謝,並且很抱歉,如果這是一個明顯的問題。 Regards, Pedro。

+0

是的,你可以編寫一個無限循環。你可以在調試器中嘗試這種東西。 – Jester

回答

1

你必須在指令的基礎上查看指令,因爲有些程序修改PC是不可預知的,但對於那些對程序計數器進行合法修改的程序,本質上會導致跳轉到程序計數器中保存的地址。你不必擔心未來的兩個指令(它是8和4字節不是4和2,前面有兩個指令)。

0

是的 - 一個跳轉/分支指令正是你所描述的 - 這是一個修改PC的指令。如果您安排跳轉的結果以將程序計數器返回到原來的位置,那麼您會在現場循環。

0

請注意,這不是下一條指令的地址,而是當前指令的地址+4(在Thumb模式下)或+8(在ARM模式下)。所以在ARM中這是2條指令,但是在Thumb中它可能不是(因爲指令可以是16位或32位)