organização e arquitetura de computadores i linguagem de máquina ivan saraiva silva
Post on 16-Apr-2015
111 Views
Preview:
TRANSCRIPT
Organização e Arquitetura de Computadores I
Linguagem de MáquinaIvan Saraiva Silva
Sumário
• Conjunto de Instruções do MIC
• Programação com o MIPS
• Simuladores de Arquitetura– MIPS– Neander
• O MIC possui dois formatos de instrução:
ENDEREÇOCODOP
4 bits 12 bits
ENDEREÇOCODOP
8 bits 8 bits
CODOP
16 bits
Formato 1
Formato 2
Formato 3
Conjunto de Instruões do MIC
Instrução Mnemônico Significado0000xxxxxxxxxxxx LODD X AC := M[X]
0001xxxxxxxxxxxx STOD X M[X] := AC
0010xxxxxxxxxxxx ADDD X AC := AC + M[X]
0011xxxxxxxxxxxx SUBD X AC := AC - M[X]
0100xxxxxxxxxxxx JPOS X If AC 0; PC := X
0101xxxxxxxxxxxx JZER X If AC = 0; PC := X
0110xxxxxxxxxxxx JUMP PC := X
0111xxxxxxxxxxxx LOCO AC := X
1000xxxxxxxxxxxx LODL AC := M[SP +X]
Conjunto de Instruções do MIC
Instrução Mnemônico Significado1001xxxxxxxxxxxx STOL M[X + SP] := AC
1010xxxxxxxxxxxx ADDL AC := AC + M[SP + X]
1011xxxxxxxxxxxx SUBL AC := AC - M[SP + X]
1100xxxxxxxxxxxx JNEG if AC < 0; PC := X
1101xxxxxxxxxxxx JNZE if AC 0; PC := X
1110xxxxxxxxxxx CALL SP := SP - 1;
M[SP] := PC; PC := X
Conjunto de Instruções do MICInstrução Mnemônico Significado
1111000000000000 PSHI SP := SP - 1; M[SP] := M[AC]
1111001000000000 POPI M[AC] := M[SP] SP := SP + 1;
1111010000000000 PUSH SP := SP - 1; M[SP] := AC
1111011000000000 POP AC := M[SP]; SP := SP + 1;
1111100000000000 RETN PC := M[SP]; SP := SP + 1;
1111101000000000 SWAP TMP := AC; AC := SP;
SP := TMP
11111100yyyyyyyyy INSP SP = SP + Y
11111110yyyyyyyyy DESP SP := SP - Y
MAR MBR
PC
AC
SP
IR
TIR 0 1 -1 A
AM
BM
B C FD EZ N
C
UL
A
A
B
16
RD WR
Programação no MIPS
• Para somar os conteúdos de b, c, d e e– add a, b, c # a = b + c– add a, a, d # a = (b+c) + d– add a, a, e # a = (b+c+d) + e
• Cada Linha do programa tem apenas uma instrução
• Comentários terminam no fim da linha
• Principio 1: Simplicidade favorece a regularidade
Programação no MIPS
• 32 registradores estão disponíveis no MIPS– $s0, $s1, $s2, … # para variáveis– $t0, $t1, $t2, … # para temporários
• Instruções aritméticas do MIPS usam registradores como operando– add $s0, $s1, $s2– sub $s0, $s1, $s2
• Princípio 2: Menor significa mais rápido
Programação no MIPS
• A palavra do MIPS é de 32 bits• Endereços precisam começar em endereços que
sejam múltiplos de 4• A memória é acessada por instruções de load e
store– lw $t0, 32 ($s3)– sw $t0, 32($s3)
• O endereço efetivo e formado por– 32 + ($s3)
Memória do MIPS
• Computadores podem usar– Endereço do byte mais a esquerda como
endereço da palavra• Big Endian
– Endereço do byte mais a direita como endereço da palavra
• Little Endian
– O MIPS é Big Endian
0
4
8
12 100
10
101
1
Programação no MIPS
• Constantes e operandos Imediatos– Utilizar versões de instruções onde um dos
operandos é uma constante– Aumenta da velocidade de execução
• addi $s3, $s3, 4 # add imediato
• Uso de uma constante imediata codificada na instrução
• Princípio 3: Agilize os casos mais comuns
Programação no MIPS
• Representando Instruções MIPS– Registradores $s0 a $s7 mapeados nos registradores 16
a 23
– Registradores $t0 a $t7 mapeados nos registradores 8 a 15
– Registrador $zero (sempre igual a zero) mapeado para o endereço zero
• Formato de instruções MIPS
op rs rt rd shamt funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Formato tipo R
Formato de Instrução MIPS
• op: opcode – operação básica da instrução• rs: registrador do primeiro operando de origem• rt: registrador do segundo operando de origem• rd: registrador do operando destino• shamt: Quantidade de deslocamento• funct: função – define uma variante da operação
op rs rt rd shamt funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Formato tipo R
Formato de Instrução MIPS
• E se a instrução necessitar de Campos maiores do que o especificado– lw $t0, 32 ($s3) ou sw $t0, 32($s3)– As constantes podem ser maiores que 5 bits
• Princípio 4: Um bom projeto exige bons compromissos
op rs rt constante ou endereço
6 bits 5 bits 5 bits 16 bits
Formato tipo I (imadiato)
Programação no MIPS
• Operações lógicas– Shift à esquerda
• sll $t2, $s0, 4 # $t2 = shift a esquerda de $s0 de 4 bits• O campo shamt indica o “tamanho” do deslocamento
– Shift à direita• srl $t2, $s0, 4 # $t2 = shift a direita de $s0 de 4 bits
– AND bit-a-bit• and $t0, $t1, $t2 ou andi $t0, $t1, 100
– OR bit-a-bit• or $t0, $t1, $t2 ou ori $t0, $t1, 100
– NOR bit-a-bit• nor $t0, $t1, $t2
Programação no MIPS
• Instruções de controle de fluxo– Desvios Condicionais
• beq $s3, $s4, label # salte para label se ($s3 = $s4)
• bne $s3, $s4, label # salte para label se ($s3 $s4)
– Desvios Incondicionais• j label # salte para label de forma incondicional
– A instrução jump usa um formato chamado formato j
op Endereço de salto
26 bits6 bits
Programação no MIPS
• ExemploWhile (save[i] = = k)
i += 1;
• Supor i e k armazenados em $s3 e $s5
• Supor a base do array save armazenada em $s6.
• Precisamos do endereço de do array save
Loop: sll $t1, $s3, 2# $t1=4*i add $t1, $t1, $s6 # save = (4*i) + $s6lw $t0, 0($t1)# $t0 = save(i)bne $t0, $s5, Exit # sai se i k addi $s3, $s3, 1# i = i + 1j Loop# vá para Loop
Exit:
Programação no MIPS
• Testes de igualdade ou desigualdade– Normalmente comparam dois registradores e
indicam o resultado em um terceiro• slt $t0, $s3, $s4 # $t0 = 1 se $s3 < $s4; cc $t0 = 0
• slti $t0, $s2, 10 # $t0 = 1 se $s2 < 10; cc $t0 = 0
Programação no MIPS
• Procedimentos: para a execução de um procedimento é necessário:– Colocar parâmetros em um local conhecido do
procedimento– Transferir o controle para o procedimento– Adquirir recursos de armazenamento para o
procedimento– Realizar a tarefa desejada– Colocar o valor de retorno em um valor conhecido por
quem chamou o procedimento– Retornar ao ponto de origem
Programação no MIPS
• Registradores e procedimentos– $a0 a $a3 - Registradores de argumentos para passar
parâmetros– $v0 e $v17 – Registradores de valor para valores de
retorno– $ra – Registrador de endereço de retorno para retornar
ao ponto de origem
• Mais registradores– Para usar mais registradores para parâmetros ou valores
de retorno usa-se o $sp (apontador de pilha)
Programação no MIPS
• Instruções para procedimento– jal EndereçoProcedimento
• Salta para EndereçoProcedimento e salva endereço de retorno em $ra (PC = PC + 4)
– jr $ra• Instrução de salto incondicional para o endereço
armazenado em $ra
• Esta instrução é usada coma a última instrução de um procedimento
Programação no MIPS
Registrador Número UsoPreservado na
chamada?
$zero 0 Valor 0 n.a.
$v0-$v1 2-3 Resultados N
$a0-$a3 4-7 Argumentos N
$t0-$t7 8-15 Temporários N
$s0-$s7 16-23 Valores salvos S
$t8-$t9 24-25 Temporários N
$gp 28 Ponteiro global S
$sp 29 pilha S
Sfp 30 quadro S
$ra 31 retorno S
Programação no MIPS
• Estudo de caso– Com o que foi visto até
agora tente escrever em assembly do MIPS o algoritmo ao lado
– Identifique o que o algoritmo faz
int X, S = 4, D = 2, R = 1, T = 0;
cin >> X;
While (T >= 0) {
R = R+1;
D = D+2;
S = S+D+1;
T = X – S;
}
Atividades Recomendadas
• Procurar documentação sobre simulador MIPS em ftp://ftp.cs.wisc.edu/pub/spim/– Caso não encontre procure o professor
• Estudar o capítulo 2 do livro: até a seção 2.8.• Exercitar-se no uso do simulador do MIPS• Baixar o simulador do Neander em http://www.inf.unilasalle.edu.br/arquitetura2/
• Estudar o Neander e praticar com o simulador• Desenvolver programas com as instruções do MIC
– Simulador disponível na página da disciplina
top related