Você está na página 1de 18

Organizao e Arquitetura de Computadores

Aula 3 Linguagem de Mquina

2002 Juliana F. Camapum Wanderley


http://www.cic.unb.br/docentes/juliana/cursos/oac
OAC Linguagem de Mquina 1 Juliana F Camapum Wanderley

Introduo

Linguagem de Mquina

Conjunto de Instrues Variveis em Assembly: Registradores Adio e Subtrao em Assembly Acesso Memria em Assembly Facilitar a construo do hardware e compiladores Maximizar a performance. Minimizar o custo.

Objetivos

Instrues: MIPS (NEC, Nintendo, Silicon Graphics, Sony).


Juliana F Camapum Wanderley

OAC Linguagem de Mquina 2

Projeto de Assembly: Conceitos Chaves


Linguagem Assembly essencialmente suportada diretamente em hardware, portanto ... Princpio 1: Simplicidade favorece Regularidade.

Ela mantida bem simples! Limite nos tipos de operandos Limite no conjunto de operaes que podem ser feitas no mnimo absoluto

Se uma operao pode ser decomposta em uma mais simples, no a inclua (a complexa)
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 3

Todo computador: ops. Aritmticas


MIPS:

add a,b,c

# ab+c

nota: os nomes reais dos operadores no so a, b e c. Sero vistos em Breve.

Instrues so mais rgidas que em lin. de alto nvel


MIPS: sempre 3 operandos. # a b+c # a b+c+d # a b+c+d+e

Exemplo: somar variveis b, c, d, e, colocando a soma em a:


add a,b,c add a,a,d add a,a,e

Smbolo # Comentrio (at o fim da linha). Exemplo: C Assembly.


a = b + c; d = a e;

Em MIPS:
add a,b,c sub d,a,e # a=b+c # d=a-e
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 4

Variveis Assembly: Registradores (1/3)


Diferente de LAN, assembly no pode usar variveis.


Por que no? Manter o Hardware simples

Operandos Assembly so registradores


Nmero limitado de localizaes especiais construdas diretamente no hardware Operaes podem somente ser realizadas nestes!

Benefcio: Como registradores esto diretamente no hardware, eles so muito rpidos.


Juliana F Camapum Wanderley

OAC Linguagem de Mquina 5

Variveis Assembly: Registradores (2/3)


Desvantagem: Como registradores esto em hardware, existe um nmero predeterminado deles.


Soluo: cdigo MIPS deve ser muito cuidadosamente produzido para usar eficientemente os registradores. Por que 32? Princpio 2: Menor mais rpido (> no. reg > ciclo clock)

32 registradores no MIPS

Cada registrador MIPS tem 32 bits de largura


Grupos de 32 bits chamados uma palavra (word) no MIPS

OAC Linguagem de Mquina 6

Juliana F Camapum Wanderley

Variveis Assembly: Registradores (3/3)


Registradores so numerados de 0 a 31 Cada registrador pode ser referenciado por nmero ou nome.

Por conveno, cada registrador tem um nome para facilitar a codificao - nomes: iniciam em $

Por agora:
$16 - $22 $8 - $15 $s0 - $s7 (corresponde a variveis C) $t0 - $t7 (corresponde a registradores temporrios)

Em geral, utilize nomes de registradores para tornar o cdigo mais fcil de ler.
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 7

Comentrios em Assembly

Outro modo de tornar o seu cdigo mais claro: comente! Hash (#) utilizado para comentrios MIPS

Qualquer coisa da marca hash (#) ao final da linha um comentrio e ser ignorado. Comentrios em C tem a forma /* comentrio */, de modo que podem ocupar vrias linhas.

Nota: Diferente do C.

OAC Linguagem de Mquina 8

Juliana F Camapum Wanderley

Instrues Assembly

Em linguagem assembly, cada declarao (chamada uma Instruction), executa exatamente uma de uma lista pequena de comandos simples Diferente de C (e da maioria das outras linguagem de alto nvel), onde cada linha pode representar mltiplas operaes.

OAC Linguagem de Mquina 9

Juliana F Camapum Wanderley

Adio e Subtrao (1/3)


Sintaxe de Instrues:
1 2,3,4 onde: 1) operao por nome 2) operando recebendo o resultado ("destino") 3) 1o operando da operao ("fonte 1") 4) 2o operando da operao ("fonte 2")

Sintaxe rgida:

1 operador, 3 operandos Por qu? Manter o Hardware simples via regularidade


Juliana F Camapum Wanderley

OAC Linguagem de Mquina 10

Adio e Subtrao (2/3)


em C: f = (g + h) (i + j); Adio em Assembly (MIPS)


add add

$t0,$s1,$s2 $t1,$s3,$s4

# t0=s1+s2=(g + h) # t1=s3+s4=(i + j)

Reg. Temporrios: $t0,$t1 Variveis $s1,$s2,$s3,$s4 esto associados com as variveis g,h,i,j
$s0,$t0,$t1 # s0=t0-t1=(g + h)-(i + j)

Subtrao em Assembly

sub

Reg. Temporrios: $t0,$t1 Varivel $s0 est associada com a varivel f Juliana F Camapum Wanderley

OAC Linguagem de Mquina 11

Adio e Subtrao (3/3)


Como fazer a seguinte declarao C? a = b + c + d - e; Quebre em mltiplas instrues


add $s0, $s1, $s2 # a = b + c add $s0, $s0, $s3 # a = a + d sub $s0, $s0, $s4 # a = a - e

Nota: Uma linha de C pode resultar em vrias linhas de MIPS. Note: Qualquer coisa aps a marca hash em cada linha ignorado (comentrios)
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 12

Operandos Assembly: Memria


Variveis C mapeiam em registradores; e como ficam as grandes estruturas de dados, como arrays/vetores? A memria (1 dos 5 componentes de um computador) contm tais estruturas. Mas as instrues aritmticas MIPS somente operam sobre registradores, nunca diretamente sobre a memria. Instrues para transferncia de dados transferem dados entre os registradores e a memria:

Memria para registrador Registrador para memria


Juliana F Camapum Wanderley

OAC Linguagem de Mquina 13

Endereamento: Byte vs. palavra (1/2)


Cada palavra na memria tem um endereo, similar a um ndice em um array. Primeiros computadores numeravam palavras como elementos de um array C: Memory[0], Memory[1], Memory[2],
Chamado o "endereo" de uma palavra

Computadores precisam acessar bytes (8-bits) bem como palavras (4 bytes/palavra) Mquinas de hoje endeream memria como bytes, portanto endereos de palavra diferem por 4

Memory[0], Memory[4], Memory[8],

OAC Linguagem de Mquina 14

Juliana F Camapum Wanderley

Endereamento: Byte vs. palavra (2/2)


Endereamento Byte Endereamento Palavra

OAC Linguagem de Mquina 15

Juliana F Camapum Wanderley

Transferncia de Dados: Memria para Reg. (1/4)


Para transferir uma palavra de dados, ns devemos especificar duas coisas:


Registrador: especifique este pelo nmero (0 - 31) Endereo da memria: mais difcil

Pense a memria como um array nico uni-dimensional, de modo que ns podemos endere-la simplesmente fornecendo um ponteiro para um endereo da memria. Outras vezes, ns queremos ser capazes de deslocar a partir deste ponteiro.

OAC Linguagem de Mquina 16

Juliana F Camapum Wanderley

Transferncia de Dados: Memria para Reg (2/4)


Para especificar um endereo de memria para copiar dele, especifique duas coisas:

Um registrador que contm um ponteiro para a memria. Um deslocamento numrico (em bytes)

O endereo de memria desejado a soma destes dois valores. Exemplo:


8($t0)

Especifica o endereo de memria apontado pelo valor em $t0, mais 8 bytes


Juliana F Camapum Wanderley

OAC Linguagem de Mquina 17

Transferncia de Dados: Memria para Reg (3/4)


Sintaxe da instruo de carga (load):


1

2,3(4) onde

1) nome da operao (instruo) 2) registrador que receber o valor 3) deslocamento numrico em bytes. 4) registrador contendo o ponteiro para a memria

Nome da Instruo:

lw (significa Load Word, logo 32 bits ou uma palavra carregada por vez)
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 18

Transferncia de Dados: Memria para Reg.(4/4)


Exemplo:

lw $t0,12($s0)

Esta instruo pegar o ponteiro em $s0, soma 12 bytes a ele, e ento carrega o valor da memria apontado por esta soma calculada no registrador $t0 $s0 chamado registrador base 12 chamado deslocamento (offset) Deslocamento geralmente utilizado no acesso de elementos de array ou estruturas: reg base aponta para o incio do array ou estrutura.
Juliana F Camapum Wanderley

Notas:

OAC Linguagem de Mquina 19

Compilao com Memria


Qual o offset em lw para selecionar A[8] em C?


4x8=32 para selecionar A[8]: byte vs. palavra

Compile manualmente usando registradores: g = h + A[8];


g: $s1, h: $s2, $s3: endereo base de A

1o transfere da memria para registrador: lw $t0,32($s3) # $t0 = A[8]


Some 32 a $s3 para selecionar A[8], pe em $t0

A seguir, some-o a h e coloque em g add $s1,$s2,$t0 # $s1 = h+A[8]=$s2+$t0


Juliana F Camapum Wanderley

OAC Linguagem de Mquina 20

Transferncia de Dados: Reg para Memria


Tambm queremos armazenar um valor do registrador na memria. Sintaxe da instruo store idntica da instruo load. Nome da Instruo:

sw (significa Store Word, logo 32 bits ou uma palavra ser carregada por vez)

Exemplo:

sw $t0,12($s0)

Esta instruo tomar o ponteiro em $s0, somar 12 bytes a ele, e ento armazenar o valor do registrador $t0 no endereo de memria apontado pela soma calculada.
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 21

Exemplo: Compilar ...


Compile manualmente usando registradores: A[12] = h + A[8];


h: $s2, $s3: endereo base de A


# $t0 = A[8]

1o transfere da memria para registrador $t0:


lw $t0,32($s3)

2o some-o a h e coloque em $t0 add $t0,$s2,$t0 # $t0 = h+A[8] 3o transfere do reg. $t0 para a memria : sw $t0,48($s3) # A[12] = $t0
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 22

Ponteiros vs. Valores


Conceito Chave: Um registrador pode conter qualquer valor de 32 bits. Este valor pode ser um int (signed), um unsigned int, um ponteiro (endereo de memria), etc. Se voc escreve lw $t2,0($t0) ento melhor que $t0 contenha um ponteiro. E se voc escrever add $t2,$t1,$t0 ento $t0 e $t1 devem conter o qu?
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 23

Notas a cerca da Memria


Falha: Esquecer que endereos seqenciais de palavras em mquinas com endereamento de byte no diferem por 1.

Muitos erros so cometidos por programadores de linguagem assembly por assumirem que o endereo da prxima palavra pode ser achado incrementandose o endereo em um registrador por 1 ao invs do tamanho da palavra em bytes. Logo, lembre-se que tanto para lw e sw, a soma do endereo base e o offset deve ser um mltiplo de 4 (para ser alinhado em palavra)
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 24

Mais Notas acerca da Memria: Alinhamento


MIPS requer que todas as palavras comecem em endereos que so mltiplos de 4 bytes.
Bytes na Palavra 0 Alinhado No Alinhado Localizao da Palavra 1 2 3

Chamado Alinhamento: objetos devem cair em endereos que so mltiplos do seu tamanho.
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 25

Papel dos Registradores vs. Memria


E se temos mais variveis do que registradores? Compilador tenta manter as variveis mais freqentemente utilizadas nos registradores. Escrevendo as menos comuns na memria: spilling Por que no manter todas as variveis na memria? Menor mais rpido: registradores so mais rpidos que a memria Registradores so mais versteis:

Instrues aritmticas MIPS pode ler 2, operar sobre eles e escrever 1 por instruo Transferncia de dados MIPS somente l ou grava 1 operando por instruo, sem nenhuma operao.
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 26

Imediatos

Imediatos so constantes numricas. Eles aparecem freqentemente em cdigo, logo existem instrues especiais para eles. Somar Imediato: addi $s0,$s1,10 #$s0=$s1+10(em MIPS) f = g + 10 (em C)

onde registradores $s0,$s1 esto associados com as variveis f, g

Sintaxe similar instruo add exceto que o ltimo argumento um nmero ao invs de um registrador.
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 27

Registrador Zero

Um imediato particular, o nmero zero (0), aparece muito freqentemente em cdigo. Ento ns definimos o registrador zero ($0 ou $zero) para sempre ter o valor 0. Isto definido em hardware, de modo que uma instruo como:
addi $0,$0,5 #$0=$0+5 $0=0(reg. $0=0 sempre)

no vai fazer nada.


Use este registrador, ele muito prtico!


Juliana F Camapum Wanderley

OAC Linguagem de Mquina 28

"Em concluso ..." (1/2)


Em linguagem Assembly MIPS:


Registradores substituem variveis C Uma instruo (operao simples) por linha Mais Simples Melhor Menor Mais Rpido

Memria endereada por byte, mas lw e sw acessam uma palavra de cada vez. Um ponteiro (usado por lw e sw) simplesmente um endereo de memria, logo ns podemos somar a ele ou subtrair dele (usando offset).
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 29

"E em concluso..." (2/2)


Novas Instrues:

add, addi, sub lw, sw Variveis C: $s0 - $s7 Variveis Temporrias: $t0 - $t9 Zero: $zero
Juliana F Camapum Wanderley

Novos registradores:

OAC Linguagem de Mquina 30

Linguagem de Mquina

Instrues, como registradores e palavras, so de 32 bits Exemplo: add $t0, $s1, $s2 registradores tem nmeros t0=reg.8,$s1=reg.17,$s2=reg.18 Formato de Instruo de soma com registradores (R-tipo):
0 17 18 8 0 32

000000 10001 op rs
6 bits

10010 rt
5 bits

01000 rd
5 bits

00000 100000 shamt funct


5 bits 6 bits

5 bits

Primeiro campo: tipo de operao (soma). ltimo campo: modo da operao (soma com 2 registradores). Segundo campo: primeira fonte (17=$s1). Terceiro campo: segunda fonte (18=$s2). Quarto campo: registrador de destino (8=$t0).
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 31

Linguagem de Mquina

Novo princpio: Bom projeto exige um bom compromisso


Vrios tipos de instrues (tipo-R, tipo-I) Mltiplos formatos: complicam o hardware. Manter os formatos similares (3 primeiros campos iguais).

Considere as instrues load-word e store-word,


I-tipo para instrues de transferncia de dados (lw,sw)

Exemplo: lw $t0, 32($s2)

35 op

18 rs

8 rt

32 16 bit - offset

Registrador de base: rs $s2. Registrador de fonte ou origem: rt $t0. Endereo de 16 bits: offset entre 215.
Juliana F Camapum Wanderley

OAC Linguagem de Mquina 32

Codificao das instrues vistas at agora

Notar: add e sub:


Mesmo opcode: 0. Diferente funo: 32 e 34.

OAC Linguagem de Mquina 33

Juliana F Camapum Wanderley

Exemplo

Traduo de C para assembly e linguagem de mquina.


C: A[300] = h + A[300] Assembly: lw $t0,1200($t1) add $t0,$s2, $t0 sw $t0,1200($t1) Linguagem de mquina: # $t1=end. base=A # $t0= A[300]=contedo(1200+$t1) # $t0=$t0+$s2=A[300]+h # A[300]=$t0

simplicidade favorece regularidade 1 bit de diferena


OAC Linguagem de Mquina 34 Juliana F Camapum Wanderley

Computadores modernos

Instrues so representadas como nmeros. Programas podem ser armazenados na memria. Conceito de programa armazenado.

Programa armazenado: Na memria...


Programa de contabilidade. Editor. Compilador. Dados. Texto. Programa em C.


Juliana F Camapum Wanderley

OAC Linguagem de Mquina 35

Resumo da linguagem at agora

OAC Linguagem de Mquina 36

Juliana F Camapum Wanderley