В таблице 1 представлены функции для работы с целыми числами.
Таблица 1. Целочисленные операции.
Арифметические операции |
|||||||||
Название |
Синтаксис инструкции |
Значение |
Формат/ код/ функция |
Примечание |
|||||
Add |
Add $d, $s, $t |
$d=$s+$t |
R |
0 |
2016 |
Складывает два регистра, выполняет прерывание при переполнении. |
|||
Add unsigned |
Addu $d, $s, $t |
$d=$s+$t |
R |
0 |
2116 |
Складывает два регистра, игнорирует переполнение. |
|||
Subtract |
Sub $d, $s, $t |
$d=$s-$t |
R |
0 |
2216 |
Вычитает два регистра, выполняет прерывание при переполнении. |
|||
Subtract unsigned |
Subu $d, $s, $t |
$d=$s-$t |
R |
0 |
2316 |
Вычитает два регистра, игнорирует переполнение. |
|||
Add immediate |
Addi $t, $s, C |
$t=$s + C |
I |
816 |
- |
Используется для сложения констант со знаками, выполняет прерывание при переполнении. |
|||
Add immediate unsigned |
Addiu $t, $s, C |
$t=$s+C |
I |
916 |
- |
Используется для сложения констант со знаками, игнорирует переполнение. |
|||
Multiply |
Mult $s, $t |
LO=(($s*$t)<<32)>>32 HI=($s*$t)>>32 |
R |
0 |
1816 |
Умножает два регистра и записывает 64-битный результат в два специальных поля для памяти – LO и HI. |
|||
Divide |
Div $s, $t |
LO=$s/$t HI=$s % $t |
R |
0 |
1A16 |
Делит один регистра на другой и записывает 32-битный результат в LO, а остаток в HI |
|||
Divide unsigned |
Divu $s, $t |
LO=$s/$t HI=$s % $t |
R |
0 |
1B16 |
Делит один регистр на другой и записывает 32-битный результат в LO, а остаток в HI. |
|||
Логические операции |
|||||||||
And | and $d,$s,$t | $d = $s & $t | R | 0 | 2416 | Выполняет побитовую конъюнкцию над двумя регистрами $s и $t и помещает результат в регистр $d | |||
And immediate | andi $t,$s,C | $t = $s & C | I | C16 | - | Выполняет побитовую конъюнкцию над регистром $s и заданной константой C и помещает результат в регистр $t | |||
Or | or $d,$s,$t | $d = $s | $t | R | 0 | 2516 | Выполняет побитовую дизъюнкцию над двумя регистрами $s и $t и помещает результат в регистр $d | |||
Or immediate | ori $t,$s,C | $t = $s | C | I | D16 | - | Выполняет побитовую дизъюнкцию над регистром $s и заданной константой C и помещает результат в регистр $t | |||
Exclusive or | xor $d,$s,$t | $d = $s ^ $t | R | 0 | 2616 | Выполняет побитовую операцию "исключающее ИЛИ" над двумя регистрами $s и $t и помещает результат в регистр $d | |||
Exclusive or immediate | xori $t,$s,C | $t = $s ^ C | I | E16 | - | Выполняет побитовую операцию "исключающее ИЛИ" над регистром $s и заданной константой C и помещает результат в регистр $t | |||
Nor | nor $d,$s,$t | $d = ~ ($s | $t) | R | 0 | 2716 | Выполняет побитовую операцию "Стрелка Пирса" над двумя регистрами $s и $t и помещает результат в регистр $d | |||
Set on less than | slt $d,$s,$t | $d = ($s < $t) | R | 0 | 2A16 | Проверяет, является ли один регистр меньше другого. | |||
Set on less than immediate | slti $t,$s,C | $t = ($s < C) | I | A16 | - | Проверяет, является ли один регистр меньше константы. | |||
Битовые операции |
|||||||||
Shift left logical | sll $t,$s,C | $t = $s << C | R | 0 | 0 | Сдвигает значение в регистре $s на C битов влево и записывает результат в регистр $t (Умножает $s на 2C) |
|||
Shift left arithmetic variable | sllv $d,$s,$t | $d = $s << $t | R | 0 | 416 | Сдвигает значение в регистре $s на $t битов влево и записывает результат в регистр $d (Умножает $s на 2$t) |
|||
Shift right logical | srl $t,$s,C | $t = $s >> C | R | 0 | 216 | Сдвигает значение в регистре $s на C битов вправо и записывает результат в регистр $t. (Делит $s на 2C) |
|||
Shift right logical variable | srlv $d,$s,$t | $d = $s >> $t | R | 0 | 616 | Сдвигает значение в регистре $s на $t битов вправо и записывает результат в регистр $d (Умножает $s на 2$t) |
|||
Shift right arithmetic | sra $t,$s,C | $t = $s >> C | R | 0 | 316 | Сдвигает значение в регистре $s на C битов вправо и записывает результат в регистр $t. В отличие от srl, заполняет старшие биты единицами, если число отрицательно (Старший бит числа равен 1) | |||
Shift right arithmetic variable | srav $d,$s,$t | $d = $s >> $t | R | 0 | 716 | Сдвигает значение в регистре $s на $t битов вправо и записывает результат в регистр $d. В отличие от srlv, заполняет старшие биты единицами, если число отрицательно (Старший бит числа равен 1) |
В таблице 2 показаны команды для работы с вещественными числами.
Таблица 2. Операции для работы с числами с плавающей точкой.
Арифмитические операции |
|||||||||
Название |
Синтаксис инструкции |
Значение |
Формат/ код/ функция |
Примечание |
|||||
Add.s |
Add.s $x, $y, $z |
$x=$y+$z |
- |
- |
- |
Сложение чисел с плавающей запятой (одинарная точность). |
|||
Sub.s |
Sub.s $x, $y, $z |
$x=$y-$z |
- |
- |
- |
Вычитание чисел с плавающей запятой (одинарная точность). |
|||
Mul.s |
Mul.s $x, $y, $z |
$x=$y*$z |
- |
- |
- |
Умножение чисел с плавающей запятой (одинарная точность). |
|||
Div.s |
Div.s $x, $y, $z |
$x=$y/$z |
- |
- |
- |
Деление чисел с плавающей запятой (одинарная точность). |
|||
Add.d |
Add.d $x, $y, $z |
$x=$y + $z |
- |
- |
- |
Сложение чисел с плавающей запятой (двойная точность). |
|||
Sub.d |
Sub.d $x, $y, $z |
$x=$y-$z |
- |
- |
- |
Вычитание чисел с плавающей запятой (двойная точность). |
|||
Mul.d |
Mul.d $x, $y, $z |
$x=$y*$z |
- |
- |
- |
Умножение чисел с плавающей запятой (двойная точность). |
|||
Div.d |
Div.d $x, $y, $z |
$x=$y/$z |
- |
- |
- |
Деление чисел с плавающей запятой(двойная точность). |
|||
Логические операции |
|||||||||
Compare with single precision | c.lt.s $f2,$f4 | if ($f2 < ;$f4) cond = 1; else cond = 0 | - | - | - | Устанавливает флаг cond в 1, если значение в регистре $f2 меньше значения в регистре $f4, иначе флаг устанавливается в 0. Одинарная точность. |
|||
Compare with double precision | c.lt.s $f2,$f4 | if ($f2 < ;$f4) cond = 1; else cond = 0 | - | - | - | Устанавливает флаг cond в 1, если значение в регистре $f2 меньше значения в регистре $f4, иначе флаг устанавливается в 0. Двойная точность. |