2014-09-06 52 views
0

由於Thumb模式可以引用通用寄存器(r1-r14)的16位,爲什麼PC(r15)仍然是32位?在這種模式下,b Label會更新PC的全部32位,或者只更低16位?爲什麼在ARM處理器上,PC仍然處於Thumb模式的32位?

+0

拇指(版本1)的指令長度是16位。尋址功能不是。他們是32位。例如,一個字節指令(早期的CISC/x86)不支持256字節的內存,而是幾個64k的字庫。您正在使機器/彙編程序指令大小等於尋址(指針)大小。他們根本沒有關係。對於32位ARM來說,它們是相同的。順便說一句,即使在拇指模式下,r1-r14也是32位大小。在Thumb2中,指令大小是16位和32位的混合。 – 2014-09-08 16:15:45

回答

2

thumbv1指令的大小是16位,但這與寄存器的大小有什麼關係? (無),包括r15的寄存器一直是32位。具有即時值的分支只是偏移量而不是絕對地址。

這一切顯然在ARM架構文檔參考手冊infocenter.arm.com

+0

但在thumbv1中,指令只能在16位的寄存器上運行,對吧? – Thomson 2014-09-06 01:34:57

+0

當然不是,對於armv4和可能armv5我不知道肯定有點很明顯,他們只是轉換爲他們的32位手臂指令,並通過管道餵養。然而一件事與另一件事無關。就像8位x86指令一樣,它只能在64位寄存器的8位上運行,它取決於操作的指令。當arm doc談到寄存器並且沒有隔離一個位範圍時,那麼整個32位寄存器就是正在使用的內容 – 2014-09-06 01:44:54

+1

如果你使用統一的語法閱讀更新的手冊,那麼統一語法的概念就意味着thumb,thumb2擴展或arm 32位指令執行相同的操作。 64位手臂是完全不同的,不兼容順便說一句,只是談論32位ARMV4至V7 – 2014-09-06 01:46:22

3

儘管是基於一個完全不正確的前提下的問題,有面露排序的,答案標題問題從字面上理解 - 處於Thumb模式意味着您處於v4T或更高版本的體系結構中,這意味着您必須擁有完整的32位PC,而不是隻有26位的v3之前的體系結構。

我不確定你在哪裏得到了Thumb操作16位寄存器的想法 - 必須使用Thumb指令的限制是它們只能訪問「低寄存器」r0-r7,由於編碼有限空間。在ARM中有三種不同的「32位」 - 寄存器寬度,地址空間(並非總是如上所述)以及固定寬度指令編碼的大小。拇指只改變第三個。縮小尺寸的一個結果是,大多數Thumb編碼只有每個操作數3位來編碼寄存器編號 - 只有少數指令可以省去額外的位來編碼「高位寄存器」r8-r15。

在操作中,Thumb指令沒有到ARM指令的等效子集不同 - 拇指只是一個替代獲取/解碼階段在同一管道的前部,畢竟。

相關問題