Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução aos Sistemas Computacionais Disciplina: 113468 Prof. Marcus Vinicius Lamar Linguagem Assembly MIPS 2 UnB/CIC 113468– Introdução aos Sistemas Computacionais Linguagem Assembly MIPS32 básica Apresentada aqui como a linguagem de programação mais básica de uma máquina RISC Baseada na execução sequencial de instruções Desvios explícitos a endereços na memória Sem variáveis ou tipos Sem estruturas de controle elaboradas Sem chamadas automáticas a funções/ou procedimentos Sem bibliotecas As instruções mais básicas estão em vermelho Vide manual do MIPS para o conjunto completo de instruções e detalhes de implementação 3 UnB/CIC 113468– Introdução aos Sistemas Computacionais Assembly MIPS32 básico Instruções Aritméticas: + - Obs.: Imm número de 16 bits em complemento de 2 ExtSinal{Imm} = extensão de sinal para 32 bits add $t0,$t1,$t2 # $t0=$t1+$t2 sub $t0,$t1,$t2 # $t0=$t1-$t2 addu $t0,$t1,$t2 # $t0=$t1+$t2 sem detecção de overflow subu $t0,$t1,$t2 # $t0=$t1-$t2 sem detecção de overflow addi $t0,$t1,Imm # $t0=$t1+ExtSinal{Imm} addiu $t0,$t1,Imm # $t0=$t1+ExtSinal{Imm} sem detecção de overflow 4 UnB/CIC 113468– Introdução aos Sistemas Computacionais Assembly MIPS32 básico Instruções Aritméticas: Registradores especiais de 32 bits Hi e Lo fora do banco de registradores Formam juntos o registrador de 64 bits {Hi.Lo} mult $t0,$t1 # {Hi,Lo} = $t0 x $t1 multu $t0,$t1 # {Hi,Lo} = $t0 x $t1 números sem sinal div $t0,$t1 # Lo=Quociente Hi=Resto divu $t0,$t1 # Lo=Quociente Hi=Resto sem sinal mfhi $t0 # $t0=Hi mflo $t0 # $t0=Lo mthi $t0 # Hi=$t0 mtlo $t0 # Lo=$t0 5 UnB/CIC 113468– Introdução aos Sistemas Computacionais Assembly MIPS32 básico Instruções Lógicas bitwise = bit a bit 6 and $s3, $s1, $s2 or $s4, $s1, $s2 xor $s5, $s1, $s2 nor $s6, $s1, $s2 andi $s2, $s1, 0xFA34 ori $s3, $s1, 0xFA34 xori $s4, $s1, 0xFA34 UnB/CIC 113468– Introdução aos Sistemas Computacionais Assembly MIPS32 básico Instruções de deslocamento 7 sll $t0, $s1, 4 srl $s2, $s1, 4 sra $s3, $s1, 4 sllv $s3, $s1, $s2 srlv $s4, $s1, $s2 srav $s5, $s1, $s2 UnB/CIC 113468– Introdução aos Sistemas Computacionais Assembly MIPS32 básico Instruções acesso à memória: Obs.: Imm número de 16 bits em complemento de 2 lw $t0,Imm($t1) # $t0=Memoria[Imm+$t1] sw $t0,Imm($t1) # Memoria[Imm+$t1]=$t0 lh $t0,Imm($t1) # $t0=ExtSinal{Memoria[Imm+$t1]} lhu $t0,Imm($t1) # $t0=ExtZero{Memoria[Imm+$t1]} sh $t0,Imm($t1) # Memoria[Imm+$t1]=$t0[15:0] lb $t0,Imm($t1) # $t0=ExtSinal{Memoria[Imm+$t1]} lbu $t0,Imm($t1) # $t0=ExtZero{Memoria[Imm+$t1]} sb $t0,Imm($t1) # Memoria[Imm+$t1]=$t0[7:0] 8 UnB/CIC 113468– Introdução aos Sistemas Computacionais Assembly MIPS32 básico Instruções diversas: lui $t0,Imm # $t0={Imm,0000000000000000} concatenação nop # No Operation Instruções de Comparação slt $t0,$t1,$t2 # $t1<$t2 ? $t0=1 : $t0=0 sltu $t0,$t1,$t2 # $t1<$t2 ? $t0=1 : $t0=0 sem sinal slti $t0,$t1,Imm # $t1<Imm ? $t0=1 : $t0=0 sltiu $t0,$t1,Imm # $t1<Imm ? $t0=1 : $t0=0 sem sinal 9 UnB/CIC 113468– Introdução aos Sistemas Computacionais Assembly MIPS32 básico Obs.: Label é um endereço de 32 bits Instruções de Salto Incondicional j Label # PC=Label jal Label # $ra=PC+4 e PC=Label jr $t0 # PC=$t0 jalr $t0 # $ra=PC+4 e PC=$t0 Instruções de Salto Condicional beq $t0,$t1,Label # $t0==$t1 ? PC=Label : PC=PC+4 bne $t0,$t1,Label # $t0!=$t1 ? PC=Label : PC=PC+4 bgez $t0,Label # $t0>=0 ? PC=Label : PC=PC+4 bgtz $t0,Label # $t0>0 ? PC=Label : PC=PC+4 blez $t0,Label # $t0<=0 ? PC=Label : PC=PC+4 bltz $t0,Label # $t0<0 ? PC=Label : PC=PC+4 10 UnB/CIC 113468– Introdução aos Sistemas Computacionais Assembly MIPS 11 Pseudo-Instruções São instrução que não existem na ISA do processador, mas o montador é capaz de traduzi-las em instruções reais. O registrador $at é de uso dedicado ao montador para essas tarefas. li $t0,0x1234 # $t0=0x1234 Ex.: addi $t0,$zero,0x1234 la $t0,0x12345678 # $t0=0x12345678 Ex.: lui $t0,0x1234 ori $t0,$t0,0x5678 move $t0,$t1 # $t0=$t1 Ex.: add $t0,$zero,$t1 blt $t0,$t1,Label # $t0<$t1 ? PC=Label : PC=PC+4 Ex.: slt $at,$t0,$t1 bne $zero,$at,Label
Compartilhar