由於Thumb模式可以引用通用寄存器(r1-r14)的16位,爲什麼PC(r15)仍然是32位?在這種模式下,b Label
會更新PC的全部32位,或者只更低16位?爲什麼在ARM處理器上,PC仍然處於Thumb模式的32位?
回答
thumbv1指令的大小是16位,但這與寄存器的大小有什麼關係? (無),包括r15的寄存器一直是32位。具有即時值的分支只是偏移量而不是絕對地址。
這一切顯然在ARM架構文檔參考手冊infocenter.arm.com
但在thumbv1中,指令只能在16位的寄存器上運行,對吧? – Thomson 2014-09-06 01:34:57
當然不是,對於armv4和可能armv5我不知道肯定有點很明顯,他們只是轉換爲他們的32位手臂指令,並通過管道餵養。然而一件事與另一件事無關。就像8位x86指令一樣,它只能在64位寄存器的8位上運行,它取決於操作的指令。當arm doc談到寄存器並且沒有隔離一個位範圍時,那麼整個32位寄存器就是正在使用的內容 – 2014-09-06 01:44:54
如果你使用統一的語法閱讀更新的手冊,那麼統一語法的概念就意味着thumb,thumb2擴展或arm 32位指令執行相同的操作。 64位手臂是完全不同的,不兼容順便說一句,只是談論32位ARMV4至V7 – 2014-09-06 01:46:22
儘管是基於一個完全不正確的前提下的問題,有是面露排序的,答案標題問題從字面上理解 - 處於Thumb模式意味着您處於v4T或更高版本的體系結構中,這意味着您必須擁有完整的32位PC,而不是隻有26位的v3之前的體系結構。
我不確定你在哪裏得到了Thumb操作16位寄存器的想法 - 必須使用Thumb指令的限制是它們只能訪問「低寄存器」r0-r7,由於編碼有限空間。在ARM中有三種不同的「32位」 - 寄存器寬度,地址空間(並非總是如上所述)以及固定寬度指令編碼的大小。拇指只改變第三個。縮小尺寸的一個結果是,大多數Thumb編碼只有每個操作數3位來編碼寄存器編號 - 只有少數指令可以省去額外的位來編碼「高位寄存器」r8-r15。
在操作中,Thumb指令沒有到ARM指令的等效子集不同 - 拇指只是一個替代獲取/解碼階段在同一管道的前部,畢竟。
- 1. 如何判斷我是處於ARM模式還是gdb中的Thumb模式?
- 2. 鏈接錯誤:在32位ARM處理器上的Ubuntu 12.04上找不到「-ltinfo」
- 3. 爲什麼隱式規則仍然被處理?
- 4. 什麼是中端ARM處理器?
- 5. 在32位和64位平臺上總是處理32位?
- 6. 在32位系統上處理PHP longint
- 7. 8位微處理器上的C - 32位和16位算術
- 8. 在ARM處理器上導入numpy
- 9. 在ARM處理器上測試FPU
- 10. 爲基於Intel的處理器和基於ARM的處理器開發metro樣式的應用程序
- 11. 具有32位操作系統程序兼容性的64位處理器?在64位處理器上的
- 12. ARM處理器上的MIPS計算
- 13. 爲什麼32位處理器的4Gbibytes而不是4Gibibits的地址空間?
- 14. MaxUploadSizeExceededException處理但文件仍然上傳?
- 15. 在32位處理器上安裝源碼服務器
- 16. 真/假....仍然處理卡?
- 17. 在Sparc 32位上處理值> 2^32的整數
- 18. 在Windows機器上並行處理32位和64位Python安裝的標準方式是什麼?
- 19. 如何檢查IIS是否處於32位或64位模式
- 20. 正確處理32/64位
- 21. DuplicateHandle 32/64位處理
- 22. 如何從一個批處理文件,在32位模式下
- 23. 爲什麼sizeof(spinlock_t)在單處理器上大於零?
- 24. 在64位機器上處理文件,但在32位機器上開發
- 25. 在Ubuntu 15.10上的Docker 32位(操作系統和處理器)
- 26. 具有32/16位分區的處理器上的64/32位分區
- 27. 在C#下Int64在32位處理器上使用危險
- 28. 爲什麼我的Pinterest應用程序仍處於待處理狀態?
- 29. 爲什麼在32位機器上〜0xF等於0xFFFFFFF0?
- 30. 在8086微處理器上乘以32位兩個數字
拇指(版本1)的指令長度是16位。尋址功能不是。他們是32位。例如,一個字節指令(早期的CISC/x86)不支持256字節的內存,而是幾個64k的字庫。您正在使機器/彙編程序指令大小等於尋址(指針)大小。他們根本沒有關係。對於32位ARM來說,它們是相同的。順便說一句,即使在拇指模式下,r1-r14也是32位大小。在Thumb2中,指令大小是16位和32位的混合。 – 2014-09-08 16:15:45