InstruInstruçções de Linguagem de Mões de Linguagem de M...

Preview:

Citation preview

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

Recommended