instruinstruçções de linguagem de mões de linguagem de m...

33
Sistemas de Computação Instruções de Linguagem de Máquina

Upload: others

Post on 22-Jan-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

Sistemas de Computação

Instruções de Linguagem de Máquina Instruções de Linguagem de Máquina

Page 2: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 3: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 4: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 5: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 6: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 7: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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]

Page 8: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 9: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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]

Page 10: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 11: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 12: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 13: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 14: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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;

Page 15: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 16: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 17: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 18: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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:

Page 19: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 20: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 21: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 22: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 23: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 24: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 25: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 26: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 27: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 28: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 29: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 30: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 31: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 32: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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

Page 33: InstruInstruçções de Linguagem de Mões de Linguagem de M …simone/scminter/contaulas/7_LMAQ.pdf · 2016. 9. 6. · Sistemas de Computa ção • Utilizado para desvios condicionais

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