270 likes | 534 Views
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 MIP S Simuladores de Arquitetura MIPS Neander. O MIC possui dois formatos de instrução:. 12 bits. 4 bits. Formato 1. CODOP. ENDEREÇO. 8 bits.
E N D
Organização e Arquitetura de Computadores ILinguagem de Máquina Ivan 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: 12 bits 4 bits Formato 1 CODOP ENDEREÇO 8 bits 8 bits Formato 2 CODOP ENDEREÇO 16 bits Formato 3 CODOP
RD WR MAR MBR B C A P C A C S P I R T I R 0 1 -1 A M B M A B C D E F ULA Z N 16
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 12 100 8 10 4 101 0 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 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits op rs rt rd shamt funct 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 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits op rs rt rd shamt funct 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 6 bits 5 bits 5 bits 16 bits op rs rt constante ou endereço Formato tipo I (imadiato)
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
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 6 bits 26 bits
Exemplo While (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) + $s6 lw $t0, 0($t1) # $t0 = save(i) bne $t0, $s5, Exit # sai se i k addi $s3, $s3, 1 # i = i + 1 j Loop # vá para Loop Exit: Programação no MIPS
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
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; } Programação no MIPS
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