Что такое HI и LO в MIPS

Я читаю о делении в MIPS и нашел этот div

Делит $s на $t и сохраняет частное в $LO, а остаток в $HI.

https://web.archive.org/web/20201111203150/http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html

А Википедия говорит

HI и LO используются для доступа к результатам умножения/делителя, доступ к которым осуществляется с помощью команд mfhi (движение от высокого) и mflo.

http://en.wikipedia.org/wiki/MIPS_architecture

Являются ли регистры HI и LO? Какого числа они регистры?


person hodgesmr    schedule 23.02.2010    source источник
comment
А если они не регистры, то пятна в памяти?   -  person hodgesmr    schedule 23.02.2010
comment
Нет, это регистры, просто их нельзя закодировать в 5-битных полях регистров в инструкциях MIPS. Доступ к этим пронумерованным регистрам осуществляется с помощью соответствующего номера в поле регистра. Регистры HI/LO имеют специальные инструкции, которые позволяют перенести их в пронумерованный регистр.   -  person Richard Pennington    schedule 23.02.2010
comment
Связано: Разница между rem и mfhi в MIPS. Они существуют, чтобы избежать конфликтов обратной записи с обычными инструкциями с задержкой в ​​1 цикл и упростить обнаружение опасностей для целочисленных регистров общего назначения.   -  person Peter Cordes    schedule 14.11.2018
comment
обратите внимание, что они были удалены в MIPS версии 6.   -  person phuclv    schedule 17.10.2019


Ответы (3)


Это специальные регистры, используемые для хранения результатов умножения и деления. Они отделены от $0 .. $31 регистров общего назначения и не адресуются напрямую. Доступ к их содержимому осуществляется с помощью специальных инструкций mfhi и mflo (Move From HI/LO).

Они присутствуют в блоке умножения и имеют длину 32 бита каждый. Подробнее здесь< /а>. В паре они содержат 64-битный полный результат 32x32-битного целого числа mult.


Статья в блоге Рэймонда Чена MIPS R4000, часть 3: Умножение, деление и Темпераментные регистры HI и LO содержат очень полезную информацию о неинтуитивном поведении ранних MIPS, включая mtlo/mtlo, делающие недействительными предыдущие hi/lo (соответственно).

Неполный справочник по целочисленному набору инструкций (ссылка в вопросе) для ранних MIPS также содержит некоторые подробности: http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html или см. официальные руководства MIPS в формате PDF или руководства в формате PDF для классических процессоров MIPS. .

person codaddict    schedule 23.02.2010
comment
Кроме того, менее часто используемые mthi и mtlo получают к ним доступ. - person rsaxvc; 22.06.2014
comment
а mfhi и mflo обозначают перемещение из HI/LO (источник: mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html) - person user1857492; 17.10.2017

HI и LO не являются нумерованными регистрами, IIRC. Они используются только для хранения результатов операций, которые не помещаются в один регистр (например, умножение двух 32-битных целых чисел может привести к 64-битному целому числу, поэтому переполнение происходит в HI).

редактировать: согласно это описание класса, это действительно специальные регистры, поэтому они не нумеруются и доступны только с помощью специальных команд.

person Sean    schedule 23.02.2010
comment
Ссылка, похоже, находится за платным доступом. - person BrotherJack; 04.06.2013
comment
Ссылка мертва (403) - person FDinoff; 13.12.2014
comment
Старшая половина полного умножения не должна считаться переполнением. Это просто старшая половина (и полное умножение, такое как 32b * 32b => 64b, не может переполниться). Если старшая половина не равна нулю, 32b * 32b => 32b умножение переполнится... - person Peter Cordes; 17.10.2017

Что делает LO, так это то, что для умножения он сохраняет младшие значащие биты, а HI хранит остальные биты, но в основном мы просто фокусируемся на части LO для умножения. В подразделении мы фокусируемся на обоих. LO в делении — это место, где должно быть сохранено частное, а HI — это остаток.

person Nick M    schedule 27.09.2016