36
A linguagem de Máquina – Instruções Básicas Prof. André Luis M. Silva [email protected] orgearq200101.wordpress.com

A linguagem de Máquina – Instruções Básicas Prof. André Luis M. Silva [email protected] orgearq200101.wordpress.com

Embed Size (px)

Citation preview

A linguagem de Máquina – Instruções Básicas

Prof. André Luis M. [email protected]

orgearq200101.wordpress.com

Introdução Com o assunto de hoje, começaremos a

entender as seguintes questões Como controlar o hardware?

Qual a diferença entre um hardware específico e um de propósito geral?

Como deixar o hardware flexível?

Introdução Com o assunto de hoje, começaremos a entender

as seguintes questões

Como controlar o hardware? Através de instruções.

Qual a diferença entre um hardware específico e um de propósito geral? Flexibilidade, forma de programação

Como deixar o hardware flexível? Dando o suporte a um conjunto de instruções.

O processador MIPS As palavras da linguagem de um computador são

chamadas de instruções e seu vocabulário é denominado de conjunto de instruções.

Embora o conjunto de instruções seja uma característica associada a arquitetura, em geral, o conjunto de instruções de diferentes arquiteturas são bastante similares. Isso acontece devido:

Aos projetos possuírem princípios básicos semelhantes Algumas operações básicas devem ser oferecidas por

todos os computadores.

O processador MIPS Hoje e nas próximas aulas veremos o

conjunto de instruções do processador MIPS.

Um pouco sobre o MIPS: Criado na década de 80 por John L.

Hennessy. Microprocessador bastante utilizado.

Em 2002, foram fabricados 100 milhões de unidades.

Encontrados em produtos de várias empresas. ATI, Broadcom, Cisco, NEC, Nintendo, Silicon

Graphics, Sony, Texas Instrument, Toshiba, etc.

O Processador Mips Elementos Básicos

Registradores

Unidade de Controle

Memória Cache

Entrada

Saída

O processador MIPS Algumas Características

Instruções simples, sempre realizam uma única operação. Tamanho fixo de 32 bits.

Possui 32 registradores. Cada um deles de 32 bits. Tamanho da palavra MIPS

Em geral, instruções MIPS trabalham com 3 operandos. Esta característica torna o hardware mais simples.

O Processador MIPS Princípios fundamentais de projeto MIPS:

“Simplicidade favorece a regularidade” “Menor significa mais rápido” “Agilize os casos mais comuns” “Um bom projeto exige bons compromissos”.

Instruções para soma e subtração add e sub.

Exemplos: add a, b, c # A soma de b + c é colocada em a. sub a, b, c # A subtração de b - c é colocada em a.

Como são compiladas as seguintes instruções java? a = b + c; d = a - e;

Instruções para soma e subtraçãoadd a, b, csub d, a, e

E essa atribuição?

f = (g + h) – (i + j);

Instruções para soma e subtraçãoadd a, b, csub d, a, e

E essa atribuição?

f = (g + h) – (i + j);

Mais de uma instrução Quem recebe o valor de (g+h) e (i+j)?

Instruções para soma e subtração f = (g + h) – (i + j);

Assembly final:add t0, g, hadd t1, i, jsub f, t0, t1

Registradores no MIPS Operandos do hardware de um computador

Operandos (variáveis) de uma instrução aritmética são os registradores.

Temos quantos registradores? Qual o motivo para termos uma quantidade tão pequena de registradores?

Registradores no MIPS Além de fatores ligados ao consumo de energia,

complexidade do hardware e preço final do produto, também temos um outro fator:

“Menor significa mais rápido”

Uma quantidade muito grande de registradores pode piorar o desempenho, simplesmente porque os sinais eletrônicos levam mais tempo quando precisam atravessar uma distância maior. Cuidado. Em alguns casos ter mais registradores promove um

melhor desempenho. Devemos sempre pesar o limite deste número de registradores

(preço/desempenho).

Registradores no MIPS Padrão de nomes de registradores:

Utilizamos “$” seguido por dois caracteres para representar um registrador.

$s0, $s1, $s2,... representam os registradores salvos (armazenam variáveis)

$t0, $t1, ... Representam os registradores temporários (operações intermediárias)

Registradores no MIPS f = (g + h) – (i + j);

Assembly

add t0, g, hadd t1, i, jsub f, t0, t1

add $t0, $s1, $s2add $t1, $s3, $s4sub $s0, $t0, $t1

Instrução para soma com constantes addi (Adição Imediata).

Realiza soma com um valor constante. Sintaxe:

addi $r1, $r2, const Efeito: $r1 := $r2 + const;

Segue o princípio de projeto: “Agilize os casos mais comuns”

Realmente ele é um caso comum. Onde?

Registradores no MIPS Pergunta:

O processador MIPS possui apenas 32 registradores. Como fazemos para trabalhar com variáveis complexas, cuja quantidade de registradores do MIPS é insuficiente para armazená-las?

Instruções para transferência de dados Utilizando a memória principal.

Para realizarmos a transferência de um word (palavra) da memória para um registrador, utilizamos a instrução lw (load word).

Sintaxe:

lw $r1, const($r2),

$r1 é o registrador que armazena o conteúdo da memória.

const representa um valor constante que é somado ao endereço presente no registrador $r2.

Memória Principal

0123...9

1111231...13

A memória principal Cada endereço da memória

externa representam células de 8 bits (1 byte).

A instrução lw carrega uma palavra da memória principal.

Logo, se dermos um lw no endereço 0, receberemos os dados do endereço 0, 1, 2 e 3.

Instruções para transferência de dados

Instruções para transferência de dados A instrução que desempenha função inversa ao

load word (lw) é a instrução store word (sw).

Basicamente ela transfere o conteúdo de um registrador para um endereço específico da memória principal.

Sintaxe: Similar ao do lw.

sw $r1, const($r2)

Instruções para transferência de dados Qual código assembly para o seguinte trecho de código. g = h + A[3];

Considere: A um array de inteiros. Endereço de A em $s3 Endereço de h em $s2

lw $t0,12($s3);add $s1,$2,$t0;

Porque 12?

Instruções para transferência de dados Exemplo:

Considere A um array de inteiros Endereço de A em $s3 Valor de h em $s2

A[12] = h + A[8];lw $t0, 32($s3) add $t0, $s2, $t0sw $t0, 48, $s3;

Atividade 1Considere A, B, C arrays de inteiros. Sendo A

em $s0, B em $s1 e C em $s2. Converta para assembly.

for (int i:= 0; i < 3; i++)C[i] := A[i] + B[i];

Atividade 2

Considere A, B, C arrays de inteiros. Sendo A em $s0, B em $s1. Converta para assembly.

for (int i:= 0; i < 3; i++)B[i] := A[i] - i;

Endianness Grande parte dos processadores fazem restrição

com relação ao endereço em que começam suas palavras. No Mips, por exemplo, suas palavras precisam começar

em endereços que sejam múltiplos de 4.

Esse requisito é denominado restrição de alinhamento.

Com relação ao byte de endereçamento, os processadores podem ser big endian ou little endian.

Endianness Processadores Big-Endian numeram os bytes

dentro de uma palavra (word) de forma que o byte com o valor mais baixo é o mais à esquerda.

Endianness Processadores Little-Endian numeram os

bytes dentro de uma palavra (word) de forma que o byte com o valor mais baixo é o mais à direita.

Instruções para operações lógicas Operações Lógicas

Instruções para operações lógicas Sintaxe de uso dos operadores de

deslocamento (sll, slr). sll $t2, $s0, 4; # reg $t2 = $s0 << 4 bits. Para $s0 = 9, teríamos $t2 = 144;

Instruções para operações lógicas and, nor e or, possuem sintaxe similar ao

add.

and $t0, $t1, $t2 Funcionamento: $t0 = $t1 & $t2;

Mips não possui uma instrução not.

Tem como eu obter esta instrução a partir de uma das instruções acima?

Instruções para operações lógicas Utilizando nor com 0. Exemplo:

1001

Atividade 3 Seja o array A formado por inteiros de 32 bits,

com os seguintes valores: A = { 2048, 1, 57888, 23, 12}

Mostre como o mesmo estaria representado em memória caso seja utilizado Little Endian e Big Endian.

Atividade 4Considere A, B, C arrays de inteiros. Sendo A

em $s0, B em $s1. Converta para assembly.

for (int i:= 0; i < 3; i++)B[i] := A[i] * 4;

Atividade 5Considere A, B, C arrays de inteiros. Sendo A

em $s0, B em $s1. Converta para assembly.

for (int i:= 0; i < 3; i++)B[i] := A[i] / 8;

Estudar. Organização e Projeto de Computadores:

Interface Hw/Sw Seções 2.1 até 2.5