零暫存器是一個其數值恆為零的暫存器,在此暂存器寫入資料無效。有一些指令集架構會有零暂存器,例如CDC 6600、MIPS架構、SPARC、Alpha和ARM64等。
零是許多微處理器指令中常見的常數,例如「若數值為0時跳躍」(branch if zero),針對這類指令最佳化,對性能有益。有些架構是由特別的Opcode來進行最佳化,也就是針對基本指令,有特別針對零處理的版本,實現這類指令會需要在中央处理器的指令解碼增加對應的邏輯。若使用零暫存器,也可以進行最佳化,但不需增加新的Opcode,其代價是一個暫存器的值恆為0,少了一個可以使用的暫存器,若是暫存器本來就不多的處理器,會有負面的影響。
X86架構沒有零暫存器,ARM架構在ARM64加入了零暫存器,RISC-V架構有一個名稱為x0的暫存器,其ABI名稱為zero。加入的理由是「專門指定一個暫存器為0,對簡化RISC-V指令集架構有很大的幫助,這和用xor等指令將暫存器清為0不同,後者有用到硬體資源。 」
"
有些指令集架構(像System/360的和POWER/PowerPC/)裡,有特定暫存器的值不一定為0,但當指定該暫存器為時,會視為其數值為零。
參考資料
*
*
评论 (0)