Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

25
Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva

Transcript of Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

Page 1: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

Organização e Arquitetura de Computadores I

Linguagem de MáquinaIvan Saraiva Silva

Page 2: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

Sumário

• Conjunto de Instruções do MIC

• Programação com o MIPS

• Simuladores de Arquitetura– MIPS– Neander

Page 3: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

• 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

Page 4: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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]

Page 5: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 6: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 7: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 8: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 9: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 10: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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)

Page 11: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 12: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 13: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 14: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 15: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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)

Page 16: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 17: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 18: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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:

Page 19: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 20: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 21: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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)

Page 22: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 23: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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

Page 24: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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;

}

Page 25: Organização e Arquitetura de Computadores I Linguagem de Máquina Ivan Saraiva Silva.

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