andi
lyszt.net obejmuje andi i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
andi wykonuje bitową operację AND ze stałą. and przyjmuje dwa rejestry, ale andi przyjmuje rejestr i wartość natychmiastową, stałą wartość zakodowaną w instrukcji. Litera i oznacza immediate (natychmiastową). Reguła AND pozostaje niezmieniona: bit wyniku jest równy 1 tylko wtedy, gdy oba bity wejściowe są równe 1, więc stała działa jak maska, która zachowuje niektóre bity, a inne zeruje. Maskowanie i operacje bitowe są omówione na stronie and.
Postać instrukcji andi pokazano poniżej. Wykonuje ona operację AND na wartości w rs1 ze stałą imm i zapisuje wynik do rd.
andi rd, rs1, imm
Użyj jej, gdy z góry wiesz, które bity chcesz zachować. Następna linia zachowuje najniższe 8 bitów t0 i zeruje górne 24, wyodrębniając jeden bajt z większej wartości. Prefiks 0x oznacza stałą szesnastkową.
andi t1, t0, 0xff
Stała musi mieścić się w 12 bitach, więc nie może wyrazić szerokiej maski. Dla większej maski załaduj ją do rejestru za pomocą li i użyj and.
Podręcznik RISC-V mówi, że 12-bitowa wartość natychmiastowa jest rozszerzana znakowo do 32 bitów przed operacją, więc ujemna stała ma ustawione wszystkie górne bity. andi, ori i xori wykonują operację bitową na rejestrze rs1 i tej rozszerzonej wartości, a wynik umieszczają w rd.
Poniżej przedstawiono dwa typowe zastosowania. Pierwsza linia zachowuje tylko najniższy bit, który wynosi 1 dla liczb nieparzystych i 0 dla parzystych. Druga linia daje resztę z dzielenia przez 8, ponieważ reszta bez znaku z dzielenia przez potęgę dwójki to najniższe bity.
andi t1, t0, 1 andi t1, t0, 7
Przykład
andi t1, t0, 0xff # keep only the low byte
