Arquitetura de Computadores Diogo Lages Roteiro • SPIM • Instruções • Lista Arquitetura de Computadores 2 SPIM SPIM Instruções • Simulador do MIPS 32 bits. • Permite rodar diretamente código assembly • Possui depurador – Registradores – Permite a utilização de system call. Arquitetura de Computadores 3 SPIM Código - .text Data - .data SPIM Instruções Registradores Gerais e de Ponto Flutuante Mensagens escritas pelo SPIM. Arquitetura de Computadores 4 SPIM SPIM Instruções Carrega o código assembly. O SPIM só suporta código assembly. Reinicializa o simulador e carrega novamente o código assembly. Arquitetura de Computadores 5 SPIM SPIM Instruções Carrega o código assembly. O SPIM só suporta código assembly. Reinicializa o simulador e carrega novamente o código assembly. Arquitetura de Computadores 6 SPIM SPIM Instruções Limpa os registradores Renicializa o simulador. Indica o local da memória a ser executada a primeira instrução e os parâmetros de entrada Voltar a execução normal, após ter encontrado condição de parada Executa uma instrução por vez. Arquitetura de Computadores 7 SPIM SPIM Instruções Arquitetura de Computadores 8 SPIM SPIM Instruções [Memória] Conteúdo de memória Arquitetura de Computadores 9 SPIM SPIM Instruções [Memória] Conteúdo de memória Arquitetura de Computadores 10 SPIM SPIM Instruções Permite inserir breakpoint ou retirar. Endereço de memória Instrução em código de máquina. Instruções em código assembly Arquitetura de Computadores 11 SPIM SPIM Endereçamento Instruções • Permite seis endereçamentos (SPIM) Formato (registrador) Conteúdo do registrador Imm Immediate Imm(register) Immediate + conteúdo registrador Label Endereço de um label Label ±imm Endereço de um label + ou – immediate Label ± imm(register) Endereço de um label + ou (immediate + conteúdo do registrador) Arquitetura de Computadores 12 SPIM SPIM Endereçamento Assembler Sintaxe Instruções • Comentários – • # Diretivas – .align n • Alinha os dados na memória no formato 2^n . – .ascii • Armazena na memória string sem NULL (0x00). – .asciiz • Armazena na memória string com NULL. – .byte b1, … , bn • Armazena na memória valores sucessivos de bytes – .data • Segmento de dados. – .globl label • Declara label como global, ou seja, pode ser visto por outros arquivos. – .space n • Aloca n bytes (segmento de dados) – .text • Instruções Arquitetura de Computadores 13 SPIM SPIM Endereçamento Assembler Sintaxe Instruções Aritméticas • Add $1,$2,$3 – $1 = $2 + $3 • Sub $1,$2,$3 – $1 = $2 - $3 • Addi $1,$2,20 – $1 = $2 + 20 Arquitetura de Computadores 14 SPIM SPIM Endereçamento Assembler Sintaxe Instruções Aritméticas Instruções Transferência • Load word – Lw $1, 20($2) -> $1 = Memória ($2 + 20) • Store word – Sw $1, 20($2) -> Memória ($2 + 20) = $1 • Load Half – Lf $1, 20($2) -> $1 = Memória ($2 + 20) • Store Half – Sf $1, 20($2) -> Memória ($2 + 20) = $1 Arquitetura de Computadores 15 SPIM SPIM Endereçamento Assembler Sintaxe Instruções Aritméticas Instruções Transferência • Load byte – Lb $1, 20($2) -> $1 = Memória ($2 + 20) • Store byte – Sb $1, 20($2) -> Memória ($2 + 20) = $1 • Load Byte Unsigned – Lbu $1, 20($2) -> $1 = Memória ($2 + 20) • Store Byte Unsigned – Sbu $1, 20($2) -> Memória ($2 + 20) = $1 • Carregar constante em registrador (16 bits) – Lui $1,20 Arquitetura de Computadores 16 SPIM SPIM Endereçamento Assembler Sintaxe Instruções Aritméticas Instruções Transferência Instruções Lógicas • And – And $1,$2,$3 - $1 = ($2 & $3) • Or – Or $1,$2,$3 - $1 = ($2 | $3) • Nor – Nor $1,$2,$3 - $1 = ~($2 | $3) • And Immediate – Andi $1,$2,20 - $1 = ($2 & 20) • Or Immediate – Ori $1,$2,20 - $1 = ($2 | 20) • Sll – Shift left logical – Sll $1,$2,10 - $1 = ($2 << 10) • Srl – Srl $1,$2,10 - $1 = ($2 >> 10) Arquitetura de Computadores 17 SPIM SPIM Endereçamento Assembler Sintaxe Instruções Aritméticas Instruções Transferência Instruções Lógicas Instruções de pulo não condicional • Jump – J label • Jump register – Jr $ra • Jump and Link – [endereço] Jal label – $ra = endereço +4 Arquitetura de Computadores 18 SPIM SPIM Endereçamento Assembler Sintaxe Instruções Aritméticas Instruções Transferência Instruções Lógicas Instruções de pulo condicional • Branch on equal – Beq $1,$2,label Se ($1 == S2 ) Label Senão Execução normal • Branch not equal – Bne $1,$2,label – Se ($1 != $2) Label Senão Execução normal Arquitetura de Computadores 19 SPIM SPIM Endereçamento Assembler Sintaxe Instruções Aritméticas Instruções Transferência Instruções Lógicas Instruções de pulo condicional • Seta se menor que – Slt $1,$2,$3 Se ($2 < $3) $1 = 1 Senão $1 = 0 • Seta se menor que não sinalizado – Sltu $1,$2,$3 Se ($2 < $3) $1 = 1 Senão $1 = 0 • Seta se menor que immediate – Slti $1,$2,20 Se ($2 < 20) $1 = 1 Senão $1 = 0 Arquitetura de Computadores 20 SPIM - Exercício SPIM Endereçamento Assembler Sintaxe Instruções Aritméticas Instruções Transferência Instruções Lógicas Instruções de pulo condicional • • • • • Elaborar um programa em assembly capaz de copiar uma string de um local para outro. Elaborar um programa capaz de comparar strings. Elaborar um programa capaz de encontrar a primeira ocorrência de uma letra. Elaborar um programa capaz de encontrar o tamanho de uma string. Escrever um programa capaz de inicializar determinada da memória com um caractere específico. Arquitetura de Computadores 21