x86架構處理器中不同的暫存器有效能區別嗎?

時間 2021-05-05 18:17:42

1樓:北極

我只說我知道的乙個:AX/EAX/RAX暫存器比其它三個快。因為MOV/ADD/ADC指令對於AX/EAX/RAX的操作編碼有兩個:

這個稍微有點不符合題目,因為這是語言層面而非架構層面

手冊上還有很多類似的指令

2樓:石超

沒有區別。在現代的 cpu 裡,ax bx 這些暫存器的名字是假的,就如同你在程式中的變數名一樣,在執行時會被重新對映到 cpu 內部真實的暫存器上。

參考 register renaming https://en.m.wikipedia.org/wiki/Register_renaming

3樓:沙耶里

組合語言作為乙個介面是乙個遮蔽細節的抽象(或者說約定),就是讓你不用去想這些事的……在子系統的邊界處糾結互動的其他子系統在約定外怎麼表現真的很傻。

硬體可以在一代代裡根據軟體層的需求慢慢優化系統,就算有效能差別也是需要做多餘的假設"軟體會在某代CPU上跑"來新增特有的hack。

有興趣可以去跑黑盒的實測,或者等Intel廠做核心模組的大哥來做下白盒解釋。(知乎上還真沒見過,有估計也是有NDA限制也不能跟你說)

4樓:

從程式設計的角度來說,沒有。沒有軟體可以感知的效能差別。

但是有一些命令的源暫存器或者目的暫存器是有限制的。並不是可以任意指定。從這裡推測很老的CPU的話(如8086),AX作為最常用到的累加器參照的暫存器,「也許」有那麼點兒特別(我瞎猜的);但是現在的CPU其實內部是一堆暫存器,在執行的時候臨時分配的AX/BX等。

也就是說,硬體上其實已經沒有了固定的AX/BX等(或者arm的R1、R2等),不同命令所使用的AX/BX也很可能不是同乙個物理暫存器(所以可以多發射,即多條命令同時執行),因此更不會有固定的差異了。

ARM架構處理器和x86架構處理器效能比較時採用FLOPS 核心 W恰當嗎?

只知道這麼比較不恰當 同x86架構的 amd和intel 都不能簡單全面的對比效能更何況不同指令集 評價乙個cpu效能要有場景不然分數沒有意義測試軟體需要在相同的編譯器下分別編譯同乙個軟體然後再測試效能flops最沒意義作為乙個程式設計師仔細想想今天敲了幾個浮點數變數實際場景單程序佔滿乙個核心的情況...

為什麼X86的暫存器數量沒有隨著效能的提公升而增加?

幸福渠水到俺村 那是指令集可見暫存器,不是物理暫存器,指令集可見暫存器為了維持相容性,不能做輕易的改動。x86指令可以直接訪問記憶體。所以ISA暫存器數目並不是非常重要。現代處理器內部已經微碼化了,並且擁有上百個物理暫存器,例如Sunnycove 就有多達280個整數暫存器,微碼化之後,很多直接訪問...

80x86系統中,EFLAGS暫存器中的RF標誌位一般怎麼用

北極 RF恢復 第16 位 控制處理器對指令斷點的響應。置1 則暫時禁用指令斷點產生除錯異常 DE 但是其它異常情況仍可以產生異常。置0 則指令斷點產生除錯異常。RF 標誌的主要功能是許可從除錯異常 除錯斷點引發的 後面的那個指令開始繼續執行。除錯軟體必須在用IRETD 指令返回到被中斷程式之前,將...