sub
lyszt.net охоплює sub та інші інструкції RISC-V більш детально.
Формат кодування
Опис
sub віднімає значення в одному регістрі від іншого та записує результат у третій. Ця функція працює з регістрами — невеликими пронумерованими комірками пам’яті всередині процесора, кожна з яких вміщує одне 32-бітне число.
Форма sub показана нижче, а результат — rd = rs1 - rs2. rd — це регістр призначення, куди записується результат. rs1 та rs2 — регістри-джерела. Порядок має значення, і його зміна — типова помилка початківців.
sub rd, rs1, rs2
Наступний рядок обчислює t0 мінус t1. Лівий регістр-джерело — це значення, з якого відбувається віднімання.
sub t2, t0, t1
Інструкції subi для віднімання константи не існує. Інструкція addi приймає від’ємні константи, тому віднімання фіксованого числа означає додавання його від’ємного значення. Наступний рядок зменшує значення t0 на одиницю.
addi t0, t0, -1
У RISC-V є спеціальний регістр під назвою zero, який завжди містить значення 0. Віднімання числа від zero змінює його знак, тому наступний рядок записує від’ємне значення t1 у t0. Інструкція neg є скороченим записом для цього.
sub t0, zero, t1
У посібнику з RISC-V команда sub визначається як віднімання rs2 від rs1. Переповнення ігнорується, і в регістр rd записуються лише молодші біти XLEN результату, де XLEN — це ширина регістра в бітах, яка в даному випадку становить 32. У посібнику також зазначено, що регістр x0, який цей симулятор називає zero, жорстко зафіксований на значення, у якому всі біти дорівнюють 0.
У наведеному прикладі 10 мінус 4 дає 6 у t2. Обмін місцями двох операндів дає -6, яке процесор зберігає у власній схемі для від’ємних чисел.
Приклад
li t0, 10 li t1, 4 sub t2, t0, t1 # t2 = 6
Посилання
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.2, Integer Register-Register Instructions, page 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.1, Programmers' Model for Base Integer ISA, page 23.
- [3]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
