mulh
lyszt.net obejmuje mulh i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
mulh zwraca górne 32 bity iloczynu. Dwie 32-bitowe liczby mogą dać w wyniku iloczyn o szerokości do 64 bitów, podczas gdy rejestr przechowuje 32. Instrukcja mul zachowuje dolne 32 bity i odrzuca resztę. mulh (multiply high) zachowuje górne 32 bity.
Uruchom obie instrukcje na tych samych danych wejściowych, a otrzymasz cały iloczyn. mulh zapisuje górną połowę do jednego rejestru, mul zapisuje dolną połowę do innego, a para przechowuje pełny 64-bitowy wynik.
Górna połowa wskazuje przepełnienie, czyli iloczyn zbyt duży dla 32 bitów. Znacząca wartość w górnej połowie oznacza, że iloczyn nie mieści się w jednym rejestrze. Arytmetyka na bardzo dużych liczbach i kryptografia opierają się na obu połowach.
Podręcznik RISC-V definiuje jeszcze dwa warianty obok mulh. mulhu mnoży dwie liczby bez znaku, a mulhsu mnoży liczbę ze znakiem w rs1 przez liczbę bez znaku w rs2. Według podręcznika mulhsu występuje w wielosłownym mnożeniu ze znakiem, gdzie najbardziej znaczące słowo jednej liczby, które przenosi bit znaku, jest mnożone przez mniej znaczące słowa drugiej, które są bez znaku.
h oznacza high (górne). Ta wersja traktuje swoje operandy jako liczby ze znakiem, więc mogą być ujemne. Specyfikacja RISC-V definiuje również warianty bez znaku, a ten symulator udostępnia wersję mulh ze znakiem. Podobnie jak w przypadku wszystkich instrukcji mnożenia i dzielenia, nie istnieje forma ze stałą, więc oba dane wejściowe pochodzą z rejestrów.
Przykład
li t0, 100000 li t1, 100000 mulh t2, t0, t1 # t2 = 2 (high bits of 100000 * 100000)
