A linguagem de Máquina – Instruções
Básicas
Prof. André Luis M. Silva
[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?


Qual a diferença entre um hardware específico e um de
propósito geral?


Através de instruções.
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
Memória
Cache
Entrada
Unidade de
Controle
Registradores
Saída
O processador MIPS

Algumas Características

Instruções simples, sempre realizam uma única operação.


Possui 32 registradores. Cada um deles de 32 bits.


Tamanho fixo 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ção
add a, b, c
sub d, a, e

E essa atribuição?

f = (g + h) – (i + j);
Instruções para soma e subtração
add a, b, c
sub 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, h
add t1, i, j
sub 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, h
add t1, i, j
sub f, t0, t1
add $t0, $s1, $s2
add $t1, $s3, $s4
sub $s0, $t0, $t1
Instrução para soma com
constantes

addi (Adição Imediata).

Realiza soma com um valor constante.

Sintaxe:



Efeito: $r1 := $r2 + const;
Segue o princípio de projeto:


addi $r1, $r2, const
“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.
Instruções para transferência
de dados

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.
Memória
Principal
0
1
2
3
...
9
1
11
12
31
...
13
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, $t0
sw $t0, 48, $s3;
Atividade 1
Considere 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
deslocamento (sll, slr).


operadores
sll $t2, $s0, 4; # reg $t2 = $s0 << 4 bits.
Para $s0 = 9, teríamos $t2 = 144;
de
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 4
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] * 4;
Atividade 5
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] / 8;
Estudar.

Organização e Projeto de Computadores:
Interface Hw/Sw

Seções 2.1 até 2.5
Download

22-03-2010 - WordPress.com