Escolar Documentos
Profissional Documentos
Cultura Documentos
Parte IV Controle
Suporte a procedimentos
Prof. Sérgio
Adaptado dos slides de Sistemas Processadores do Prof. Frank Torres - UFMG
Instruções MIPS
Instruções MIPS
:: Transferência de dados
Transferência de Dados MIPS oferece instruções para mover bytes,
halfwords e doublewords:
Lógicas
Load byte: lb
Controle Store byte: sb
Suporte a procedimentos Load halfword: lh
Store halfword: sh
Load doubleword: ld
Store doubleword: sd
$reg2 → 12 34 56 AB $reg2 → 12 34 56 EF
00
FF
98 CD
FF FF
70 EF
AB 98 CD 70 EF
lb $reg1, 0($reg2) sb $reg1, 0($reg2)
$reg1 $reg1
98 CD 70 EF
98 CD 70 EF sh $reg1, 2($reg2)
sb $reg1, 2($reg2) $reg1
$reg1
$reg2 → 12 34 56 AB
00
98 CD
00 00
70 EF
AB
lbu $reg1, 0($reg2)
$reg1
Pseudo-instruções Pseudo-instruções
:: Exemplos :: Exemplos
Instruções de transferência de dados: Instruções de transferência de dados:
carrega endereço (load address) carrega imediato (load immediate)
la Rdest, Label li Rdest, Const
Exemplos: Exemplos:
lui $at, upper 16 bits li $t2, const lui $at, upper 16 bits
la $t2, label
ori $t2, $at, lower 16 bits ori $t2, $at, lower 16 bits
Exemplos: Exemplos:
move $t2, $t1 addu $t2, $zero, $t1 ror $t2, $t2, 31 sll $at, $t2, 1
srl $t2, $t2, 31
or $t2, $t2, $at
Pseudo-instruções Pseudo-instruções
:: Exemplos :: Exemplos
Instruções de desvio: Instruções de desvio:
desvia para endereço relativo de 16-bits (branch) desviar se Rsrc1 > Rsrc2
b label
bgt Rsrc1, Rsrc2
Exemplos: desviar se Rsrc1 ≥ Rsrc2
* bge Rsrc1, Rsrc2
b target bgez $0, target desviar se Rsrc1 < Rsrc2
blt Rsrc1, Rsrc2
* bgez → branch if greater or equal zero desviar se Rsrc1 ≤ Rsrc2
ble Rsrc1, Rsrc2
Organização de Computadores 27 Organização de Computadores 28
Pseudo-instruções
:: Exemplos
## Get first number from user, put into $t0 ## Print out $t2
li $v0,5 # load syscall read_int into $v0 move $a0,$t2 # move the number to print into $a0
syscall # make the syscall li $v0,1 # load syscall print_int into $v0
move $t0,$v0 # move the number read into $t0 syscall # make the syscall.
Chamadas de sistema
:: Exemplo de saída do programa
Diretivas
li $v0, 10 # syscall code 10 is for exit.
syscall # make the syscall.
Diretivas Diretivas
:: Exemplo (1) :: Exemplo (2)
Código C:
main:
.data # put things into the data segment int MATRIZ[1024];
hello_msg: .asciiz "Hello World\n"
val:
.data
.word 1, 2, 4, 8, 16, 32, 64, 128, 256, 512,
Carrega no registrador $t0 o endereço de
1024, 2048, 4096, 8192, 16384, 32768 memória onde a matriz val começa.
Diretivas
Diretivas
:: Elementos do array
Instrução load word, halfword, byte:
lw, lh, lb
Pseudo-Instruções }
.text
int funcao(a){ addi $s1,$zero,2
Chamadas de Sistema int x; add $a0, $zero,$s1
jal funcao
x = 2 * a; add $s2,$zero,$v0
Diretivas return(x);
funcao:
} sll $v0,$a0,1
Organização de Computadores 45 Organização de Computadores jr $ra 46