and

and

Asembler RISC-V Referencja

lyszt.net obejmuje and i inne instrukcje RISC-V w większych szczegółach.

Format kodowania

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Opis

and to instrukcja bitowa. Rejestr przechowuje 32 bity, czyli 32 osobne zera i jedynki w rzędzie. Instrukcja bitowa stosuje swoją operację do wszystkich 32 pozycji niezależnie i między pozycjami nie przenosi się żadne przeniesienie.

Na pojedynczym bicie AND daje 1 tylko wtedy, gdy oba bity wejściowe są 1, a w przeciwnym razie 0. Poniższa postać stosuje tę regułę do wszystkich 32 pozycji, porównując rs1 i rs2 oraz zapisując wynik do rd.

and rd, rs1, rs2

AND służy do maskowania, które zachowuje niektóre bity, a inne zeruje. Tam, gdzie maska ma 1, pierwotny bit pozostaje. Tam, gdzie maska ma 0, wynikiem jest 0. Wykonanie AND wartości z maską 00001111 zachowuje cztery dolne bity i zeruje pozostałe. Maskowanie wyodrębnia jedno pole z wartości, która pakuje razem kilka pól.

Podręcznik RISC-V wymienia and, or i xor wśród operacji rejestr-rejestr. Wszystkie one odczytują rejestry źródłowe rs1 i rs2, zapisują wynik do rejestru docelowego rd i wykonują bitowe operacje logiczne.

W przykładzie 0b1100 (przedrostek 0b oznacza cyfry binarne) jest poddane operacji AND z 0b1010. Oba wejścia mają 1 tylko na skrajnej lewej pozycji, więc wynikiem jest 0b1000 i trafia on do t2.

Przykład

li t0, 0b1100
li t1, 0b1010
and t2, t0, t1   # t2 = 0b1000