Sintaxe da linguagem assembly MIPS
Considere o código abaixo para as explicações contidas neste documento.
.data
N1: .asciiz "Digite o 1o numero: "
N2: .asciiz "Digite o 2o numero: "
MsgSoma: .asciiz "\nSoma = "
MsgSub: .asciiz "\nSubtracao = "
MsgMul: .asciiz "\nMultiplicacao = "
.text
li $v0,4
la $a0,N1
syscall
li $v0,5
syscall
move $t0, $v0
li $v0,4
la $a0,N2
syscall
li $v0,5
syscall
move $t1, $v0
add $t2, $t0, $t1
li $v0,4
la $a0,MsgSoma
syscall
li $v0,1
move $a0, $t2
syscall
sub $t2, $t0, $t1
li $v0,4
la $a0,MsgSub
syscall
li $v0,1
move $a0, $t2
syscall
mul $t2, $t0, $t1
li $v0,4
la $a0,MsgMul
syscall
li $v0,1
move $a0, $t2
syscall
li $v0, 10
syscallTodo código escrito com a linguagem assembly MIPS contém duas diretivas base, sendo elas:
-
.data: indica o início do segmento de dados, onde as variáveis são declaradas. -
.text: indica o início do segmento de texto, onde as instruções do programa são definidas.
Além disso, existem as instruções que descrevem o programa:
-
li $v0, 4: Esta instrução carrega o valor 4 no registrador$v0. No contexto das chamadas do sistema, o valor em$v0especifica o serviço a ser solicitado. Neste caso, o valor 4 indica a impressão de uma string. -
la $a0, N1: Esta instrução carrega o endereço da stringN1no registrador$a0. O registrador$a0é frequentemente usado para passar argumentos parasyscall. -
syscall: Esta instrução faz uma chamada ao sistema para executar a ação desejada, com base nos valores nos registradores$v0e$a0. -
li $v0, 5: Esta instrução carrega o valor 5 no registrador$v0, indicando que desejamos ler um inteiro do teclado. -
move $t0, $v0: Esta instrução copia o valor do registrador$v0para o registrador$t0. O registrador$v0contém o valor lido do teclado após asyscallde leitura. -
add $t2, $t0, $t1: Esta instrução adiciona os valores nos registradores$t0e$t1e armazena o resultado em$t2. -
sub $t2, $t0, $t1: Esta instrução subtrai o valor no registrador$t1do valor no registrador$t0(t0} - \text{$t1} t2`. -
mul $t2, $t0, $t1: Esta instrução multiplica os valores nos registradores$t0e$t1e armazena o resultado em$t2. -
li $v0, 1: Esta instrução carrega o valor 1 no registrador$v0, indicando que desejamos imprimir um inteiro. -
move $a0, $t2: Esta instrução move o valor do registrador$t2para o registrador$a0, que será usado como argumento nasyscallde impressão. -
li $v0, 10: Esta instrução carrega o valor 10 no registrador$v0, indicando que desejamos encerrar o programa.