Является ли нулевой регистр 'zr' в aarch64 по существу заземленным?... это безопасная аналогия?
Нет.Есть все виды аппаратной логики там. Неважно, связаны ли биты нулевого регистра с землей или нет, поскольку это просто подробности реализации .Вам нужно только думать о нем как о числовом значении ноль и о том, что произойдет, если мы будем читать или записывать этот регистр.Не думайте о базовых схемах, когда вы работаете в программном обеспечении
Например, многие архитектуры могут использовать инвертированную логику ( active-low ), где 0 В означает логику 1, а затем нулевой регистр фактически соединится с V cc .Или некоторые другие используют сбалансированную логику, где логика 0 и 1 представлена -V cc и V cc соответственно.В этом случае нулевой регистр будет подключен к -V куб.см , и он также не заземлен.
Но зачем нужен нулевой регистр?
Общая философия RISC состоит в том, чтобы избегать доступа к памяти в каждой инструкции , вместо этого только инструкции загрузки / сохранения могут касаться памяти .В результате RISC-архитектурам требуется много регистров, чтобы уменьшить потребность в переполнении памяти.
Практически во всех остальных RISC-архитектурах имеется как минимум 32 регистра ,поэтому стоит выделить один для нулевой константы.Мы видим, что: SPARC имеет %g0
, MIPS имеет $zero
или $0
, Itanium (строго говоря, не RISC, а VLIW, но все жетонн регистров [128]) имеет r0
, RISC-V имеет x0
, SH-5 имеет R63 , Blackfin имеет R0
, i860 имеет R0
, PA-RISC имеет R0
, ARC имеет %r0
, Motorola 88000 имеет r0
, Alpha с 2-мя отдельными регистрами нуля: целое число R31
и число с плавающей точкой F31
...
Небольшое отклонение - это PowerPC, где r0
означаетили GPR0 или номер 0 в зависимости от инструкций.Однако Plan 9 для PowerPC еще больше расходится, инициализируя r0
в 0 с помощью программного обеспечения
Единственная нечетная архитектура RISC с 32 регистрами, но без нулевого регистра - Intel i960 , но опять же странноПлан 9 также требует, чтобы регистр R3 был установлен в 0 с помощью программного обеспечения .Другой странный зверь - OpenRISC , где R0 также инициализируется в 0 программным обеспечением .Это означает, что R0 не следует использовать в качестве пункта назначения, поскольку запись в него уничтожит значение
. Регистр 0 позволяет разработчикам удалять многие инструкции, упрощая аппаратное обеспечение.Например, нам больше не нужен mov
, вместо этого мы можем просто add
с нулем и сохранить в месте назначения.Отрицание также теперь просто вычитание из нуля.Записывает в нулевой регистр, отбрасывает результаты, и нам также не нужен отдельный NOP
.ARM и Intel i960 не имеют нулевого регистра, поэтому у них есть явные инструкции mov
в ISA
ARM всегда был исключением, поскольку он имеет только 16 регистров (на самом деле ~ 12-13, так как SP, PC ... включены в набор общего назначения), что делает исключительный регистр для нуля расточительным.Более того, ARM не считался чистым RISC, потому что его инструкции и режимы адресации слишком сложны (LDM, STM, shift и условные в каждой инструкции ...)
Несмотря на то, что ARM является архитектурой RISC, она не строго следует принципам RISC, как это делает MIPS.Например, некоторые инструкции ARM, такие как ldm
и stm
, не являются простыми инструкциями.Кроме того, он обеспечивает большое количество режимов адресации и использует довольно сложный формат инструкций
Руководство по процессорам RISC: для программистов и инженеров
When ArmХолдинги решили, что Aarch64 также будет иметь 32 регистра, они определенно сделают то же самое, чтобы сделать набор команд более RISCy и менее ортогональным .Теперь ПК, SP ... тоже разделены, поэтому у нас более чем в два раза больше регистров по сравнению с ARM.Нет никаких причин, по которым они, как и другие, не делают оборудование более сложным
Подобный случай - архитектура SuperH, где версия SH-4 имеет 16 регистров.Когда Ренесас расширил до 64 регистров в SH-5, они также зарезервировали R63 для нулевой константы