Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduo
Plataforma projetada da parceria entre NEC, Nintendo, Silicon Graphics e Sony Possui um conjunto de instrues que e utilizado em muitos produtos destes fabricantes Possui um simulador que permite a experimentao durante o curso: http://pages.cs.wisc.edu/~larus/spim.html
Introduo
Visualizando um computador como uma mquina de vrios nveis, o MIPS se localiza no nvel 1 Nvel n: Mquina Virtual Mn com linguagem de mquina Ln ... Nvel 2: Mquina Virtual M2 com linguagem de mquina L2 Nvel 1: Mquina Virtual M1 com linguagem de mquina L1 Nvel 0: Mquina Virtual M0 com linguagem de mquina L0 (circuitos eletrnicos)
Operaes no Hardware
As instrues utilizadas para se programar um hardware so comumente chamadas de conjuntos de instrues Operaes aritmticas so suportadas por todos os computadores Em MIPS, add a, b, c instrui o computador a somar b e c e armazenar em a o resultado
Operaes no Hardware
Entretanto, o conjunto de instrues do MIPS rgido, s permitindo, para as instrues de adio, 3 argumentos Ou seja, para realizarmos a soma a=b+c+d+e Temos que quebrar a atribuio em vrias somas: add a, b, c add a, a, d add a, a, e
Operaes no Hardware
Esta caracterstica rgida de 3 operandos para estas operaes aritmticas favorece a simplicidade do projeto do hardware Suponha agora a seguinte atribuio em linguagem de alto nvel f = (g + h) (i + j); A instruo de subtrao no MIPS sub e possui o mesmo nmero de operados da instruo add Como traduzimos para a linguagem do MIPS?
Operaes no Hardware
Iniciamos a traduo da instruo f = (g + h) (i + j); como as anteriores add f, g, h Entretanto, a soma de i e j no pode ser atribuda a f, nem a i ou j Como isso, vemos a necessidade de utilizarmos temporrias add t0, i, j sub f, f, t0
Conveno no MIPS
No MIPS, os identificadores dos registradores so precedidos por um $s para variveis de um programa e $t para temporrias Dessa forma, o resultado da ltima traduo ficaria, supondo f, g, h, i, j em $s0, $s1, $s2, $s3, $s4: add $s0, $s1, $s2 add $t0, $s3, $s4 sub $s0, $s0, $t0
Operandos em Memria
Operandos de instrues em memria precisam ser trazidos para a CPU para que possam ser manipulados As instrues do MIPS que realizam acesso memria so lw (load word) e sw (store word) Suponha que A seja um vetor de 100 palavras (palavra word - possui tamanho de 32 bits) Como compilamos a expresso g = h + A[8];
Operandos em Memria
Suponha que para a expresso g = h + A[8];, g esteja em $s1, h esteja em $s2 e o endereo base de A esteja em $s3 Relembrando que acessamos elementos diferentes num vetor realizando deslocamentos (offsets) partir da base, temos: lw $t0, 8($s3) add $s1, $s2, $t0
Operandos em Memria
Observe que, para o MIPS, a memria est organizada em palavras (sequncias de 32 bits) Alm disso, as instrues lw e sw realizam transferncias de 32 bits Com isso, o offset fornecido precisa ser multiplicado por 4 para obter o elemento do vetor correto lw $t0, 32($s3) add $s1, $s2, $t0
Operandos em Memria
Como compilamos a seguinte instruo para MIPS: A[12] = h + A[i]; Suponha que o endereo base de A est em $s3, h em $s2 e i em $s4 Inicialmente, temos que multiplicar o ndice i por 4 para enderear palavras add $t1, $s4, $s4 add $t1, $t1, $t1
Representao de Instrues
A conveno entre os registradores e seus valores no MIPS :
$s0..$s7 $t0..$t7 16 a 23 8 a 15
Assim, a instruo add $t0, $s1, $s2 tem a seguinte representao (em decimal): 0
opcode 6 bits
17
rs 5 bits
18
rt 5 bits
8
rd 5 bits
0
shamt 5 bits
32
funct 6 bits
Representao de Instrues
Descrio dos campos:
op (opcode): operao bsica da instruo rs: registrador do primeiro operando de origem rt: registrador do segundo operando de origem rd: registrador do operando de destino shamt (shift ammount): quantidade de deslocamento (no utilizado na adio) funct: seleciona a variante da operao bsica definida
Representao de Instrues
Para as instrues de acesso a memria, 5 bits permitiriam o endereamento de apenas 32 (25) clulas de memria De forma a ampliar esta limitao, o formato das instrues modificado da seguinte forma:
opcode 6 bits rs 5 bits rt 5 bits constante ou endereo 16 bits
No MIPS, este formato chamado de formato do tipo I, enquanto o primeiro chamado de tipo R
Representao de Instrues
Exemplificanto a representao do tipo I, a instruo lw $t0, 32($s3) traduzida para a seguinte sequncia de bits:
100011 opcode 10011 rs 01000 rt 0000000000100000 endereo
, onde $s3 (registrador 19) colocado em rs, $t0 (registrador 8) colocado em rt e 32 colocado no campo endereo
Representao de Instrues
Outro exemplo de instruo do tipo I a adio imediata (addi) Esta instruo permite a adio de constantes Por exemplo: addi $s3, $s3, 4 # $s3=$s3+4
001000 opcode 10011 rs 10011 rt 0000000000000100 endereo
Instrues de Deslocamento
Tambm so oferecidas operaes de deslocamento: sll (<< - shift esquerda), srl (>> - shift direita) Por exemplo: sll $t2, $s0, 4 #$t2=$s0<<4 representado pela sequncia
000000 opcode 00000 rs 10000 rt 01010 rd 00100 shamt 000000 funct
Loops
while (save[i] == k) i = i + j; save em $s6 // onde i, j, k em $s3..5 e
Loop: add $t1, $s3, $s3 add $t1, $t1, $t1 add $t1, $t1, $s6 lw $t0, 0($t1) bne $t0, $s5, Exit add $s3, $s3, $s4 j Loop Exit: # $t1 = 4*i
Switch / Case
switch(k) { case 0: f = i + j; break; case 1: f = g + h; break; case 2: f = g h; break; } // f .. k em $s0..5, $t2 = 3, L0..2 iniciando em $t4
Procedimentos
Passos a serem tomados na execuo de um procedimento:
1. Colocar os argumentos num local onde possam ser acessados pelo procedimento chamado (responsabilidade do chamador) 2. Garantir os recursos de memria necessrios para execuo do procedimento (chamador) 3. Transferir o controle para o procedimento (chamador)
Procedimentos
(... continuao da execuo de um procedimento):
4. Realizar a tarefa desejada (chamado) 5. Colocar o resultado em local acessvel (chamado) 6. Retornar ao ponto de origem e liberar os recursos (chamador ou chamado)
Procedimentos Exemplo
int f_exemplo (int g, int h, int i, int j) { int f; f = (g + h) - (i + j); return f; } // onde g .. j em $a0..3, f em $s0 f_exemplo: sub $sp, $sp, 12 sw $t1, 8 ($sp) sw $t0, 4 ($sp) sw $s0, 0 ($sp) add $t0, $a0, $a1 add $t1, $a2, $a3 sub $s0, $t0, $t1 add $v0, $s0, $zero lw $s0, 0($sp) lw $t0, 4($sp) lw $t1, 8($sp) add $sp, $sp, 12 jr $ra
Conveno do MIPS
$t0..9 so registradores temporrios que no precisam ser preservados $s0..7 so de salvamento que precisam ser preservados
Procedimentos Recursivos
Exemplo do fatorial
Mais Registradores
$fp (frame pointer) $gp (global pointer)
Caracteres / Strings
http://www.tabelaascii.com Cada caracter ocupa 1 byte (8 bits) Como o MIPS trabalha com transferncias de 4 bytes, precisamos de operaes especficas lb e sb so operaes que lem e escrevem 1 byte lb $t0, 0($sp) # l 1 byte (8 bits + direita) sb $t0, 0($gp) # escreve 1 byte (8 bits + direita)
Strings em C
Terminam com o caracter \0 (caracter 0 na tabela ASCII) Ex.: cal definido por: 67, 97, 108, 0
void strcpy (char x[], char y[]) { int i = 0; while ((x[i] = y[i]) != 0) i++ } onde x,y em $a0,$a1 e i em $s0 strcpy: subi $sp, $sp, 4 sw $s0, 0($sp) add $s0, $zero, $zero L1: add $t1, $a1, $s0 lb $t2, 0($t1) add $t3, $a0, $s0 sb $t2, 0($t3) addi $s0, $s0, 1 bne $t2, $zero, L1 lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra # y[i]
# x[i] # i++
Estilos de Endereamento
Em Registrador
Operando um registrador
Base ou Deslocamento
Operando em memria, cujo endereo a soma de um registrador com constante na instruo
Imediato
Operando uma constante dentro da instruo
Relativo ao PC
Soma do PC a uma constante na instruo
Pseudodireto
Endereo de desvio so os 26 bits da instruo concatenados com os bits mais altos do PC
19 9 22 9 21 20
9 9 9
0 0 0 0 8
32 32 32
19 80000
32
Traduo de um Programa
Programa C Compilador Programa em Assembly Montador Mdulo em Linguagem de Mquina + Bibliotecas Link-Editor Executvel em Linguagem de Mquina Loader Memria
Traduo de um Programa
Um programa em Linguagem de Montagem (Assembly) composto de instrues e pseudoinstrues A instruo move no MIPS um exemplo de pseudo-instruo, pois traduzida numa instruo equivalente: move $t0, $t1 add $t0, $zero, $t1 Outro exemplo de pseudo-instruo blt (branch on less than) que traduzida para slt/bne
Ligador / Link-Editor
O papel do ligador unir as diferentes partes de um programa de forma a se ter um nico arquivo executvel
Carregador / Loader
Etapas de um carregador:
Leitura do cabealho para identificar tamanhos Alocao de espao para armazenamento do programa Cpia para a memria Cpia de parmetros para a pilha Inicializao dos registradores
Vetores x Ponteiros
Outras Arquiteturas
Baseadas em Acumulador
A = B + C traduzido para: load AddressB add AddressC store AddressA
Arquiteturas em Pilha
A = B + C traduzido para: push AddressC push AddressB add pop AddressA
Outras Arquiteturas
Registradores de Propsito Geral
Nome define seu significado Podem ser do tipo:
registrador memria (permitem operando na memria; por ex., acumulador) load/store ou reg/reg (s operandos em registradores; por ex., MIPS) mem/mem (por ex., add EndA, EndB, EndC)
IA-32 80x86
Ao contrrio do MIPS, esta plataforma foi desenvolvida ao longo de anos (quase 20) por muitos projetistas Esse longo perodo torna ainda mais difcil a evoluo de uma arquitetura, pois preciso manter uma compatibilidade com verses anteriores (softwares especficos)
Anlogo a este problema temos o IE e os websites voltados especificamente para o seu funcionamento
Aritmtica Computacional
Utilizao de complemento a 2 Qual o maior nmero negativo em 32 bits? Lembre que: 000 001 010 011 100 101 110 111 0 1 2 3 -4 -3 -2 -1
Aritmtica Computacional
Em C, temos: int e unsigned int No MIPS, temos: lb e lbu, slt e sltu, slti e sltiu Por exemplo, suponha: $s0 = 1111 1111 ... 1111 $s1 = 0000 0000 ... 0001 Quanto vale $t0 em: slt $t0, $s0, $s1 1 e 0, respectivamente sltu $t0, $s0, $s1