InstruInstruçções de Linguagem de Mões de Linguagem de M...
Transcript of InstruInstruçções de Linguagem de Mões de Linguagem de M...
Sistemas de Computação
Instruções de Linguagem de Máquina Instruções de Linguagem de Máquina
Sistemas de Computação
Linguagem de montagem do processador MIPS
• Operações aritméticas
Instrução Exemplo Significado
soma add a, b, c a = b + c
subtração sub a, b, c a = b - c
Sistemas de Computação
Compilação de dois comandos em C para MIPS
Segmento doPrograma em C
Segmento doPrograma em MIPS
a = b + c;d = a – e;
add a, b, csub d, a, e
f = (g + h) – (i + j); add t0, g, hadd t1, i, jsub f, t0, t1
Sistemas de Computação
• Operandos aritméticos localizados em registradores
Compilação de dois comandos em C para MIPS
Segmento do Programa em C
Segmento do Programa em MIPS
a = b + c; d = a – e;
add $s0, $s1, $s2 sub $s3, $s0, $s4
f = (g + h) – (i + j); add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1
Sistemas de Computação
Instruções para transferência de dados entre memória e registradores
• Estruturas de dados mais complexas podem conter mais dados que o número de registradores
• Dados armazenados na memória têm que ser transferidos para registradores para operações aritméticas
• As instruções de transferência de dados devem fornecer o endereço na memória do dado a ser acessado
Sistemas de Computação
Instruções para transferência de dados entre memória e registradores
• Instrução para transferir dado da memória para registrador: load word (lw)
• Instrução para transferir dado do registrador para memória: store word (sw)
Processador Memória
100
10
101
1
DadosEndereço
0
1
2
3
Sistemas de Computação
Instruções para transferência de dados entre memória e registradores
• Endereço base armazenado em registrador da instrução
• Endereço da memória formado pelo deslocamento adicionado ao conteúdo do registrador base
Segmento do programa em MIPSSegmento do programa em Clw $t0,8($s3)add $s1, $s2, $t0
g=h+A[8]
Sistemas de Computação
Endereços reais em MIPS
• Endereços se referem a bytes
• Na arquitetura MIPS a palavra é de 32 bits (4 bytes), fazendo com que endereços das palavras difiram por 4.
• Em MIPS endereços das palavras devem sempre começar em múltiplos de 4 (restrição de alinhamento)
Processador Memória
100
10
101
1
DadosEndereço
0
4
8
12
Sistemas de Computação
Instruções para transferência de dados entre memória e registradores
• Endereço base armazenado em registrador da instrução
• Endereço da memória formado pelo deslocamento adicionado ao conteúdo do registrador base
Segmento do programa em MIPS
sw $t0,48($s3)
Segmento do programa em Clw $t0,32($s3)add $t0, $s2, $t0
A[12]=h+A[8]
Sistemas de Computação
Representação das instruções do tipo R
• Cada instrução da linguagem de montagem étraduzida para a linguagem de máquina expressa de forma binária
• Campos das instruções de máquina MIPS:
shamtop rtrd rdrs funct
op: código de operaçãors: registrador com primeiro operando fontert: registrador com segundo operando fonterd: registrador que guarda resultado da operaçãoshamt: deslocamentofunct: código de função
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Sistemas de Computação
Representação das instruções do tipo R
• Tradução de uma instrução de registrador na linguagem de montagem para linguagem de máquina
• add $t0, $s1, $s2
00 18rd 817 32
op rs rt rd shamt funct
0000010010rd 0100010001 100000
6 bits 5 bits
000000
6 bits 5 bits 5 bits5 bits
Sistemas de Computação
Instruções do tipo R
• Operações aritméticas:– add rd, rs, rt– sub rd, rs, rt
• Operações lógicas:– and rd, rs,rt– or rd, rs, rt– sll rd, rt, shamt– sra rd, rt, shamt– srl rd, rt, shamt– xor rd, rs, rt
Sistemas de Computação
Representação das instruções do tipo I
• Tradução de uma instrução de memória na linguagem de montagem para linguagem de máquina
• lw $t0, 1200($t1)
35 8rd 9 1200
op rs rt endereço
0100rd01001
6 bits 5 bits
100011
5 bits 16 bits
0000 0100 1011 0000
Sistemas de Computação
Representação das instruções de desvio
• Instrução de desvio– beq registrador1, registrador2, L1– bne registrador1, registrador2, L1
Segmento do programa em MIPS
Else: sub $s0, $s1, $s2Exit:
j Exit
Segmento do programa em Cbne $s3, $s4, elseadd $s0, $s1, $s2
if (i==j) f = g+h;else f=g-h;
Sistemas de Computação
Compilando o comando while
Segmento do programa em MIPS
Exit:j Loopadd $s3, $s3, $s4
add $t1,$t1,$s6
Segmento do programa em CLoop: add $t1, $s3, $s3add $t1, $t1, $t1
while (save[i] ==k) i = i+j;
lw $t0,0($t1)bne $t0, $s5, Exit
Sistemas de Computação
Comando switch
• Permite selecionar uma entre diversas alternativas– switch (k) {
case 0: f = i + j; break;case 1: f = g + h; break;case 2: f = g - h; break;case 3: f = i - j; break;}
• Pode ser implementado utilizando-se comandos if-then-else aninhados
• Maneira mais eficiente:– Alternativas são codificadas em uma tabela de endereços,
denominada tabela de endereços de jump– Na execução do comando basta indexar a tabela e ir para o
endereço encontrado na tabela– Instrução de desvio incondicional em MIPS jr
Sistemas de Computação
Implementação com tabela do comando switch
• Estrutura do programa
– obtém end. na tabela de acordo com valor de k
– vai para endereço– L0: f = i + j– L1: f = g + h– L2: f = g - h– L3: f = i - j
• Tabela
k endereço0 L01 L12 L23 L3
Sistemas de Computação
Código gerado para comando switch
# Testa se variável k entre 0 e 3slt $t3, $s5, $zerobne $t3, $zero, Exitslt $t3, $s5, $t2beq $t3, $zero, Exit# Multiplica k por 4 para obter deslocamento na tabelaadd $t1, $s5, $s5add $t1, $t1, $t1# Calcula o endereço corretoadd $t1, $t1, $t4lw $t0, 0($t1)# Vai para o endereçojr $t0#Casos do switchL0: add $s0, $s3, $s4
j ExitL1: add $s0, $s1, $s2
j ExitL2: sub $s0, $s1, $s2
j ExitL3: sub $s0, $s3, $s4Exit:
Sistemas de Computação
Modos de Endereçamento em MIPS
• Palavra de 32 bits
• Memória endereçada a byte
• Cada instrução tem 32 bits
• Os modos de endereçamento indicam como encontrar os operandos das instruções
Sistemas de Computação
Endereçamento por registrador
• Indica o endereço de um registrador
– Ex: add $s0, $t0, $t1 # $s0 = $t0 + $t1
op rs rt rd … funct Registradores
Registrador
6 bits 5 bits5 bits 5 bits
Sistemas de Computação
Endereçamento base mais deslocamento
• Visa reduzir o tamanho das instruções e facilitar o processo de relocação de programas
– indica o endereço de um registrador (base) e um valor relativo àprimeira instrução (deslocamento) endereço efetivo do dado
– Ex: lw $s1, 100($s2) # $s1 = 4 bytes em Memória [$s2 + 100]lb $s1, 100 ($s2) # coloca byte em Memória [$s2+100] nos 8 bits menos significativos de $s1 e estende o sinallh $s1, 100 ($s2) # coloca 2 bytes em Memória [$s2+100] nos 16 bits menos significativos de $s1 e estende o sinal
+Registrador
Endereçoop rs rt
Byte PalavraMeia-palavra
Memória6 bits 5 bits 5 bits 16 bits
Sistemas de Computação
Endereçamento imediato
• Constantes são utilizadas em programas para indexar arrays, contar iterações de loops, por exemplo
• Vários programas possuem mais de 50% de suas operações aritméticas envolvendo constantes
• Como acessar estas constantes ?lw $t0, EndConst6($zero) # $t0 = constante 6
add $s5, $s5, $t0 # soma 6 a $s5
Sistemas de Computação
Endereçamento imediato
• Valor do dado é indicado diretamente no campo operando
• O dado é obtido junto com a instrução
– Ex: addi $s5, $s5, 6 # $s5 = $s5 + 6
op rs rt imediato6 bits 5 bits 5 bits 16 bits
Sistemas de Computação
Instruções aritméticas e lógicas que utilizam endereçamento imediato
• addi rt, rs, imm
• andi rt, rs, imm
• ori rt, rs, imm
• xori rt, rs, imm
• slti rt, rs, imm
Sistemas de Computação
Endereçamento imediato
• Para constantes maiores que 16 bits utiliza-se a instrução lui (load upper immediate)
• Carrega constante nos bits superiores e preenche os inferiores com zero
– Ex: lui $t0,255
001111 00000 01000 0000 0000 1111 11116 bits 5 bits 5 bits 16 bits
0000 0000 0000 00000000 0000 1111 1111$t0
Sistemas de Computação
Endereçamento imediato
• Qual o código em linguagem de máquina do MIPS para carregar a constante abaixo de 32bits no registrador $s0?
0000 0000 0011 1101 0000 1001 0000 0000
Sistemas de Computação
• Utilizado para desvios incondicionais– indica o endereço pela concatenação dos 26 bits da instrução com
os 4 bits mais significativos do PC para formar palavra de 32 bits
– Ex: j 10000
Endereçamento pseudo direto
:PC
EndereçoopMemória
Palavra
26 bits6 bits
Sistemas de Computação• Utilizado para desvios condicionais• Utilizando o campo imediato (16 bits), nenhum
programa poderia ser maior que 216
– Solução: PC= Registrador + Endereço de desvio
• Registrador utilizado é o próprio PC– Pode desviar no intervalo PC-215 a PC+215
– Ex: beq $s1, $s2, 25 # se ($s1 == $s2) desvia para PC + 4 + 100# (cada instrução tem 4 bytes)
Endereçamento relativo ao PC
+PC
Endereçoop rtMemória
rs
Palavra
6 bits 5 bits 5 bits 16 bits
Sistemas de Computação
Compilando o comando while
Exit:j Loopadd $s3, $s3, $s4
add $t1,$t1,$s6lw $t0,0($t1)bne $t0, $s5, Exit
Loop: add $t1, $s3, $s3add $t1, $t1, $t1
endereço 80000 0 19 19 9 0 3280004 0 9 9 9 0 3280008 0 9 22 9 0 3280012 35 9 880016 5 8 2180020 0 19 20 19 0 3280024 280028 ...
instrução
08
80000
Sistemas de Computação
• Substitui-se a instrução beq, por bne e j
• Exemplo:beq $s1,$s2,L1
substituído porbne $s1, $s2, L2
j L1
L2:
Como desviar para mais longe
Sistemas de Computação
• Procedimento para zerar o conteúdo de um array – utilizando índices de arrays
clear1(int array[], int size){
int i;for (i = 0; i < size; i = i+1)
array[i] = 0;}
– utilizando ponteirosclear2(int *array, int size){
int *p;for (p = &array[0]; p < &array[size]; p = p+1)
*p = 0;}
Arrays e ponteiros
Sistemas de Computação• Código gerado para array
move $t0, $zero
loop1: add $t1,$t0,$t0
add $t1,$t1,$t1
add $t2,$a0,$t1
sw $zero,0($t2)
addi $t0,$t0,1
slt $t3,$t0,$a1
bne $t3,$zero,loop1
Arrays e ponteiros - comparação do código gerado
• Código gerado para ponteiro
move $t0, $a0
add $t1,$a1,$a1
add $t1,$t1,$t1
add $t2,$a0,$t1
loop2: sw $zero,0($t0)
addi $t0,$t0,4
slt $t3,$t0,$t2
bne $t3,$zero,loop2
Sistemas de Computação
• Operações aritméticas podem ler/escrever da/na memória
• Endereçamento da memória podem envolver cálculos complexos
– D(Rb,Ri,S) Mem[Reg[Rb]+S*Reg[Ri]+D]• D: deslocamento de 1,2 ou 4 bytes• Rb: Registrador base: * possíveis registradores• Ri: Registrador de índice: qualquer registrador• S: Escala: 1,2, 4 ou 8
Arquitetura X86 - Propriedades CISC