and

and

Асемблер RISC-V Посилання

lyszt.net охоплює and та інші інструкції RISC-V більш детально.

Формат кодування

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

Опис

and — це побітова інструкція. Регістр зберігає 32 біти, тобто 32 окремі нулі та одиниці підряд. Побітова інструкція застосовує свою операцію до всіх 32 позицій незалежно, і між позиціями не передається перенесення.

На окремому біті AND дає 1 лише тоді, коли обидва вхідні біти дорівнюють 1, і 0 в іншому випадку. Наведена нижче форма застосовує це правило до всіх 32 позицій, порівнюючи rs1 і rs2 та записуючи результат у rd.

and rd, rs1, rs2

AND використовується для маскування, яке зберігає одні біти та очищає інші. Там, де в масці стоїть 1, початковий біт залишається. Там, де в масці стоїть 0, результат дорівнює 0. Застосування AND до значення з маскою 00001111 зберігає молодші чотири біти та очищає решту. Маскування видобуває одне поле зі значення, у якому запаковано кілька полів.

У посібнику RISC-V and, or і xor перелічено серед операцій регістр-регістр. Усі вони читають регістри-джерела rs1 і rs2, записують результат у регістр-призначення rd і виконують побітові логічні операції.

У прикладі 0b1100 (префікс 0b позначає двійкові цифри) об’єднується операцією AND з 0b1010. В обох входів 1 стоїть лише в найлівішій позиції, тому результат дорівнює 0b1000, і він записується в t2.

Приклад

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