Ассемблер MIPS/Инструкции

Существует 3 типа инструкций:

  • R (register) - Команды, работающие с регистрами. 3 регистра в качестве операндов, регистр назначения, первый аргумент и второй аргумент.
  • I (immediate) - Команды, работающие с регистрами и числами. 2 регистра и число в качестве операндов.
  • J (jump) - Инструкции перехода, в качестве операнда - 26 битный адрес.

Арифметические инструкции

править
ADD (R) / ADDU (R) / ADDI (I) / ADDIU (I)

Арифметическое сложение. Варианты ADDU и ADDIU игнорируют переполнение.

add $t4,$t5,$t6 # t4 = t5 + t6
addi $t4,$t5,C  # t4 = t5 + C ; C - число
SUB (R) / SUBU (R) / SUBI (I) / SUBIU (I)

Арифметическое вычитание. Варианты SUB и SUBIU игнорируют переполнение.

sub $t4,$t5,$t6 # t4 = t5 - t6
subi $t4,$t5,C  # t4 = t5 - C ; C - число

Логические инструкции

править
AND (R) / ANDI (I)

Побитовое логическое И.

and $t4,$t5,$t6 # t4 = t5 & t6
andi $t4,$t5,C  # t4 = t5 & C ; C - число
OR (R) / ORI (I)

Побитовое логическое ИЛИ.

or $t4,$t5,$t6 # t4 = t5 | t6
ori $t4,$t5,C  # t4 = t5 | C ; C - число
NOR (R)

Логическое отрицание.

nor $t5,$t6,$t7 # t5 = ~(t6|t7)
XOR (R) / XORI (I)

Логическое сложение.

xor $t5,$t6,$t7 # t5 = t6^t7

Инструкции перехода

править
BEQ

Branch on EQual

beq $s,$t,target #Перейти на метку target, если $s = $t
BGEZ

Branch on Greater than or Equal to Zero

bgez $s,target #Перейти на метку target, если $s >= 0
BGEZAL

Branch on Greater than or Equal to Zero And Link

bgezal $s,$t,target #Перейти на метку target, если $s >= 0 , и сохранить адрес в $ra 
BGTZ

Branch on Greater Than Zero

bgtz $s,target #Перейти на метку target, если $s > 0
BLEZ

Branch on Less than or Equal to Zero

blez $s,target #Перейти на метку target, если $s <= 0
BLTZ

Branch on Less Than Zero

bltz $s,target #Перейти на метку target, если $s < 0
BLTZAL

Branch on Less Than Zero And Link

bltzal $s,target #Перейти на метку target, если $s < 0, и сохранить адрес в $ra
BNE

Branch on Not Equal

bne $s,$t,target #Перейти на метку target, если $s != $t