Você está na página 1de 2

Instruções do PIC

Instruções sobre registradores orientadas a bits Instruções sobre registradores orientadas a bytes
Mneumônico, Descrição Mneumônico, Descrição
operandos operandos
BCF f,b Limpa bit em f (b ← 0) ADDWF f,d Soma o W com f
BSF f,b Seta bit em f (b ← 1) ANDWF f,d Operação lógica E de W com f
BTFSC f,b Testa bit em f, pula instrução se 0 CLRF f f ←0
BTFSS f,b Testa bit em f, pula instrução se 1 CLRW - W←0
Instruções literais e expressões de controle COMF f,d Complemento de f
Mneumônico, Descrição DECF f,d Decrementa f
operandos DECFSZ f,d Decrementa f, pula instrução se 0
ADDLW k Soma literal com W INCF f,d Incrementa f
ANDLW k Operação lógica E de literal com W INCFSZ f,d Incrementa f, pula instrução se 0
CALL k Chama subrotina IORWF f,d Operação lógica OU de W com f
CLRWDT - Limpa temporizador WATCHDOG MOVF f,d Move f
GOTO k Desvio para endereço MOVWF f Move W para f
IORLW k Operação lógica OU, literal com W NOP - Não faz nada
MOVLW k Move literal para W RLF f,d Rotaciona para esquerda com carry
RETFIE - Retorna de interrupção RRF f,d Rotaciona para direita com carry
RETLW k Retorna com literal em W SUBWF f,d Subtrai W de f
RETURN - Retorna de subrotina SWAPF f,d Inverte nibbles (4 bits) de f
SLEEP - Vai para modo standby XORWF f,d OU exclusivo de W com f
SUBLW k Subtrai W de literal
XORLW k OU exclusivo de W com literal

Instruções do MIPS
Sintaxe Comentário Sintaxe Comentário
Lb Rdest, Imm16(Rsrc) load byte j address28 jump (absolute addr)
Lw Rdest, Imm16(Rsrc) load word jr Rsrc jump register
Transferência de informação

lbu Rdest, Imm16(Rsrc) load unsigned byte branch on equal


beq Rsrc1, Rsrc2, address18
sb Rsrc2, Imm16(Rsrc1) store byte (relative addr)
sw Rsrc2, Imm16(Rsrc1) store word branch on not equal
bne Rsrc1, Rsrc2, address18
lui Rdest, Imm16 load upper immediate (relative addr)
mfhi Rdest move from hi br. on greater than
bgez Rsrc, address18 equal zero (relative
mflo Rdest move from lo addr)
Operações de salto

mthi Rsrc move to hi br. on greater than zero


bgtz Rsrc, address18
mtlo Rsrc move to lo (relative addr)
li Rdest, Imm16/32 load immediate br. on less than equal
blez Rsrc, address18
la Rdest, address16/32 load address zero (relative addr)
move Rdest, Rsrc move br. on less than zero
bltz Rsrc, address18
(relative addr)
add Rdest, Rsrc1, Rsrc2 addition (with overflow)
jump and link (absolute
addi Rdest, Rsrc1, Imm16 addition imm. (with ov.) jal address28
addr)
addu Rdest, Rsrc1, Rsrc2 addition (without overflow)
jalr Rsrc jump and link register
addiu Rdest, Rsrc1, Imm16 addition imm. (without ov.)
Operações aritméticas

branch inconditional
sub Rdest, Rsrc1, Rsrc2 subtract (with overflow) b address18/32
(relative addr)
subu Rdest, Rsrc1, Rsrc2 subtract (without overflow) b<cnd> Rsrc1, Rsrc2, br. on <cnd> = [gt, ge,
mult Rsrc1, Rsrc2 multiply address18/32 lt, le] (relative addr)
multu Rsrc1, Rsrc2 unsigned multiply b<cnd>u Rsrc1, Rsrc2, br. on <cnd> = [gt, ge,
div Rsrc1, Rsrc2 divide address18/32 lt, le] uns (relative addr)
divu Rsrc1, Rsrc2 unsigned divide rfe return from exception
Exceç
ão

abs Rdest, Rsrc absolutevalue syscall system call


mul Rdest, Rsrc1, Rsrc2 multiply break code20 break
div Rdest, Rsrc1, Rsrc2 divide
rem Rdest, Rsrc1, Rsrc2 remainder
and Rdest, Rsrc1, Rsrc2 AND Registradores
Nome Uso
andi Rdest, Rsrc1, Imm16 AND immediate
$zero Valor constante 0
or Rdest, Rsrc1, Rsrc2 OR $at Reservado para o montador
ori Rdest, Rsrc1, Imm16 OR immediate $v0-$v1 Valores para resultados e
xor Rdest, Rsrc1, Rsrc2 XOR avaliação de funções
Operações $a0-$a3 Argumentos
xori Rdest, Rsrc1, Imm16 XOR immediate
lógicas e de $t0-$t7 Temporários (não preservados
comparação nor Rdest, Rsrc1, Rsrc2 NOR nas chamadas de funções)
slt Rdest, Rsrc1, Rsrc2 set less than $s0-$s7 Valores salvos (preservados nas
slti Rdest, Rsrc1, Imm16 set less than immediate chamadas de funções)
sltu Rdest, Rsrc1, Rsrc2 set less than unsigned $t8-$t9 Temporários (não preservados
nas chamadas de funções)
sltiu Rdest, Rsrc1, Imm16 set less than unsigned imm. $k0-k1 Reservados para o kernel do
not Rdest, Rsrc not sistema operacional
sll Rdest, Rsrc1, Rsrc2 shift left logical $gp Ponteiro global
Operações srl Rdest, Rsrc1, Rsrc2 shift right logical $sp Ponteiro de pilha (stack pointer)
de $fp Ponteiro de quadro (frame
sra Rdest, Rsrc1, Rsrc2 shift right arithmetic pointer)
deslocamento
de bits rol Rdest, Rsrc1, Rsrc2 rotate left $ra Endereço de retorno (de
ror Rdest, Rsrc1, Rsrc2 rotate right chamadas de funções)

Diretivas
.align n Alinha o próximo dado em um limite de 2n bytes. Por exemplo, .align 2 alinha o próximo valor em um limite
de word. .align 0 desativa o alinhamento automático das diretivas .half, .word, .float e .double até a
próxima diretiva .data ou .kdata.
.ascii str Armazena a string str na memória, mas não a termina com nulo.
.asciiz str Armazena a string str na memória e a termina com nulo.
.byte b1,..., bn Armazena os n valores em bytes sucessivos da memória.
.data <end> Itens subseqüentes são armazenados no segmento de dados. Se o argumento opcional end estiver
presente, os itens subseqüentes são armazenados a partir do endereço end.
.double d1, ..., Armazena os n números de precisão dupla em ponto flutuante em locais de memória sucessivos.
dn
.float f1,..., fn Armazena os números de precisão simples em ponto flutuante nos locais de memória sucessivos.
.globl sym Declara que o rótulo sym é global e pode ser referenciado a partir de outros arquivos.
.half h1, ..., hn Armazena as n quantidades de 16 bits em halfwords sucessivas da memória.
.space n Aloca n bytes de espaço no segmento atual (que precisa ser o segmento de dados no SPIM).
.text <end> Itens subseqüentes são colocados no segmento de texto do usuário. No SPIM, esses itens só podem ser
instruções ou palavras (ver a diretiva .word a seguir). Se o argumento opcional end estiver presente, os
itens subseqüentes são armazenados a partir do endereço end.
.word w1,..., wn Armazena as n quantidades de 32 bits em palavras de memória sucessivas.

Códigos para chamadas de sistema


Código
Função Argumento(s) Resultado(s)
(em $v0)
1 Escrever um valor inteiro $a0 = valor inteiro O valor é escrito na janela do monitor
2 Escrever um valor float $f12 = valor float O valor é escrito na janela do monitor
4 Escrever uma string $a0 = ponteiro para a string O valor é escrito na janela do monitor
5 Ler um valor inteiro $v0 fica com o valor lido
6 Ler um valor float $f0 fica com o valor lido
7 Ler um valor double $f0 fica com o valor lido
$a0 = ponteiro para memória
8 Ler uma string A string é lida para a memória
$a1 = número máximo de caracteres
$v0 fica com o endereço inicial da zona de
9 Pedir espaço de memória $a0 = quantidade de memória
memória
10 Finalizar programa
11 Escrever um byte $a0 = byte O valor é escrito na janela do monitor