linguagem de montagem · 2017-08-03 · a programação em linguagem de montagem requer tanto...

72
Linguagem de Montagem Linguagem de Montagem Prof. Marcos Quinet Universidade Federal Fluminense – UFF Pólo Universitário de Rio das Ostras - PURO 1

Upload: ngobao

Post on 26-Jan-2019

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Linguagem de MontagemLinguagem de Montagem

Prof. Marcos QuinetUniversidade Federal Fluminense – UFFPólo Universitário de Rio das Ostras - PURO

1

Page 2: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

IntroduçãoIntrodução

� Independente da linguagem de programaçãoutilizada, todo programa será convertido em umconjunto de instruções, chamado linguagem demontagem, antes de ser convertido em códigobinário

� Apesar de aparentemente limitadas, as linguagens� Apesar de aparentemente limitadas, as linguagensde montagem definem todo o conjunto de instruçõesreconhecidas e utilizadas em um sistemacomputacional, representando uma dascaracterísticas mais importantes do projeto de umprocessador

� A programação em linguagem de montagem requertanto conhecimentos de lógica quanto do hardwareutilizado

2

Page 3: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Linguagem de máquinaLinguagem de máquina

� O que representa ocódigo ao lado?

� Resposta: rotina que

001001111011110111111111111000001010111110111111000000000001010010101111101001000000000000100000101011111010010100000000001001001010111110100000000000000001100010101111101000000000000000011100100011111010111000000000000111001000111110111000000000000001100000000001110011100000000000011001� Resposta: rotina que

calcula e imprime asoma dos quadradosdos inteiros entre 0 e100

00000001110011100000000000011001001001011100100000000000000000010010100100000001000000000110010110101111101010000000000000011100000000000000000001111000000100100000001100001111110010000010000100010100001000001111111111110111101011111011100100000000000110000011110000000100000100000000000010001111101001010000000000011000000011000001000000000000111011000010010010000100000001000011000010001111101111110000000000010100001001111011110100000000001000000000001111100000000000000000100000000000000000000001000000100001

3

Page 4: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Conjunto de instruções MIPSConjunto de instruções MIPS

� Diferentes projetos de processadores implementamdiferentes conjuntos de instruções

� Um dos mais populares conjuntos de instruções échamado MIPS (Microprocessor without InterlockedPipeline Stages), criado pela MIPS ComputerPipeline Stages), criado pela MIPS ComputerSystems para ser utilizado em seus processadores,utilizados por companhias como NEC, Nintendo,Silicon Graphics, Sony, Siemens, e muitas outras

� Na metade da década de 90, estima-se que um acada 3 microprocessadores RISC produzidosutilizavam MIPS

4

Page 5: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

MIPSMIPS

� Nas lições a seguir será adotado o padrão daarquitetura de 32 bits (apesar que também éutilizado em arquiteturas de 64 bits, comadaptações de endereçamento e tamanho decampos)campos)

� A arquitetura MIPS segue os princípios básicosde um projeto de hardware. Estes princípiosforam estabelecidos para, na criação de umnovo hardware, que o resultado fosse o maissimples, eficiente e livre de falhas possível,com o menor custo necessário.

5

Page 6: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Princípio de projeto 1Princípio de projeto 1

� “A simplicidade é favorecida pela regularidade”

� A representação de instruções em MIPS segueum formato regular de campos, cada um comA representação de instruções em MIPS segueum formato regular de campos, cada um comuma função específica bem definida

� Por exemplo, a operação de soma em MIPSseria feita da forma: ‘ADD a, b, c’ → significasomar o valor das variáveis ‘b’ e ‘c’ earmazenar o resultado em ‘a’

6

Page 7: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Príncipio de projeto 1Príncipio de projeto 1

� add a, b, c #a soma de ‘b’ e ‘c’ é colocada em ‘a’

Como escrever em MIPS a operação ‘a ← b + c +d +e’ ?

� add a, a, d #a soma de ‘b’, ‘c’ e ‘d’ é colocada #em ‘a’

� add, a, a, e #a soma de ‘b’, ‘c’, ‘d’ e ‘e’ é #colocada em ‘a’

A operação de subtração, através do mnemônico sub, funciona da mesma forma

7

Page 8: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercícioExercício

� Qual o código MIPS correspondente a instrução:f ← (g + h) – (i + j);

� Dica: considere o uso de duas variáveistemporárias, t0 e t1, criadas pelo compilador

� Resposta:add t0, g, h # a variável t0 recebe g + h

add t1, i, j # a variável t1 recebe i + j

sub f, t0, t1 # a variável f recebe t0 –t1OBS: este ainda não é um código MIPS real, é um “pseudo-

MIPS”

8

Page 9: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Princípio de projeto 2Princípio de projeto 2

� “Quanto menor, mais rápido”� Não são utilizadas variáveis em linguagens de

montagem, pois este conceito só existe emlinguagens de alto nívellinguagens de alto nível

� O MIPS utiliza registradores de 32 bits, cadaum representando uma palavra da arquitetura

� Um grande número de registradores nohardware certamente tornaria maior o ciclo declock, tornando o sistema computacional maislento

9

Page 10: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Princípio de projeto 2Princípio de projeto 2

� Registradores existem em quantidades limitadas.No projeto de uma arquitetura MIPS existemexatamente 32 registradores, identificados atravésde um ‘$’, seguido de um identificador (que podeconter uma parte numérica)conter uma parte numérica)

� Dentre os registradores disponíveis aoprogramador MIPS estão alguns de propósito gerale outros com propósito específico

� Alguns não são utilizados pelo programador, maspelo sistema operacional

10

Page 11: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Registradores do MIPSRegistradores do MIPSNome Número Uso

$zero 0 Constante 0

$at 1 Reservado para o montador

$v0, $v1 2, 3 Avaliação de expressão e resultado de uma função

$a0,...,$a3

4 ao 7 Argumentos 1 a 4

$t0,..., 8 ao 15 Temporário (não preservado pela chamada)$t0,..., $t7

8 ao 15 Temporário (não preservado pela chamada)

$s0,..., $s7

16 ao 23 Temporário salvo (reservado pela chamada)

$t8, $t9 24, 25 Temporário (não preservado pela chamada)

$k0 26 Reservado para o kernel do sistema operacional

$k1 27 Reservado para o kernel do sistema operacional

$gp 28 Ponteiro para área global

$sp 29 Apontador de pilha (stack pointer)

$fp 30 Apontador de contexto (frame pointer)

$ra 31 Endereço de retorno (usado por chamada de função) 11

Page 12: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Representação de instruções em Representação de instruções em MIPSMIPS

op rs rt rdshamt

funct

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits6 bits 5 bits 5 bits 5 bits 5 bits 6 bits� op: operação básica a ser realizada pela instrução

(opcode)

� rs: registrador contendo o primeiro operando-fonte

� rt: registrador contendo o segundo operando-fonte

12

Page 13: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Representação de instruções em Representação de instruções em MIPSMIPS

� Rd: registrador que guarda o resultado daoperação (registrador destino)

� Shamt: quantidade de bits a serem deslocados(específico para instruções de deslocamento; sea instrução não for deste tipo, conterá zero)a instrução não for deste tipo, conterá zero)

� Funct: função. Seleciona uma variaçãoespecífica da operação apontada no campo op,sendo chamado de código da função◦ Observe que o formato de instrução contém

exatamente 32 bits, o tamanho de uma palavra dememória e de um dado (princípio de projeto 1)

13

Page 14: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExemploExemplo

� Para a instrução: add $t0, $s1, $s2;

0 17 18 8 0 32

Representação decimal:

000000 10001 10010 01000 00000 100000

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

Representação binária:

14

Page 15: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Tamanho dos camposTamanho dos campos

� Podem ocorrer problemas caso a instrução precisede campos maiores do que os apresentados

� Por exemplo, se um dos campos for um valorconstante, esta constante estaria limitada a 25 = 32

Campos de 5 bits podem ser pequenos para os� Campos de 5 bits podem ser pequenos para ospropósitos necessários

� Existe um conflito entre manter todas as instruçõesdo mesmo tamanho e o desejo de ter um únicoformato de instruções

15

Page 16: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Princípio de projeto 3Princípio de projeto 3

� “Um bom projeto demandacompromisso”

� Em MIPS todas as instruções são do mesmo� Em MIPS todas as instruções são do mesmotamanho, mas são utilizados formatosdiferentes para tipos distintos de instruções

� O tipo que vimos anteriormente é chamado detipo R, ou formato R, sendo o R usado paralembrar o uso de registradores pela instrução

16

Page 17: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instrução do tipo IInstrução do tipo I

� O outro tipo é chamado de tipo I, ou formato I, sendo o I utilizado para lembrar que é usado em instruções de transferência de dados.

� O formato de instruções do tipo I é o seguinte:O formato de instruções do tipo I é o seguinte:

op rs rt endereço

6 bits 5 bits 5 bits 16 bits

17

Page 18: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de acesso à memóriaInstruções de acesso à memória

� Dos elementos presentes em um sistemacomputacional, o processador pode manter apenasuma pequena quantidade de dados em seusregistradores, mas a memória de um computadorpode conter milhões de estruturas de dados

� O MIPS precisa de instruções que permitam atransferência de dados entre registradores e amemória do sistema

� Para acessar uma palavra na memória, a instruçãodeve fornecer ao processador o endereço namemória da palavra a ser acessada

18

Page 19: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de acesso à memóriaInstruções de acesso à memória

� A memória é vista como um imenso arrayunidimensional de dados, com o endereço servindocomo um índice para este array, começando dozero

� No exemplo a seguir, o endereço do terceiroelemento dos dados é 8, e o conteúdo deelemento dos dados é 8, e o conteúdo dememória[8] é 10.

Endereço 0 4 8 12 ...

Dados 1 101 10 100 ...

19

Page 20: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de acesso à memóriaInstruções de acesso à memória

� Quase todas as arquiteturas endereçam bytesindividuais, portanto, o endereço de uma palavradeve ser igual ao endereço de um dos bytescomponentes da palavra

Como pode ser observado no exemplo anterior, o� Como pode ser observado no exemplo anterior, oendereço de duas palavras sequenciais diferesempre de 4 bytes (em arquiteturas de 32 bits)

� Em MIPS, as palavras precisam sempre começarem endereços múltiplos de 4, propriedadechamada de restrição de alinhamento

20

Page 21: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de acesso à memóriaInstruções de acesso à memória

� A instrução de transferência de dados quemove um dado da memória para umregistrador é chamada de load word,codificada através do mnemônico ‘lw’codificada através do mnemônico ‘lw’

� A instrução complementar a de load échamada de store word (armazenamento),que transfere um dado de um registrador paraa memória, utilizando o mnemônico ‘sw’

21

Page 22: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de acesso à memóriaInstruções de acesso à memória

� O compilador aloca em endereços da memóriadiversas estruturas de dados, como os arrays. Logo,o compilador deve colocar o endereço inicial daestrutura nas instruções de transferência de dados,já que ele é o responsável pela alocação de espaçojá que ele é o responsável pela alocação de espaçona memória para programas em execução

� O MIPS utiliza uma forma de representação dedados chamada big endian, pois endereça a partir dobyte mais à esquerda (o byte mais significativo éarmazenado no menor endereço de byte).

22

Page 23: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Representação e referência de bytesRepresentação e referência de bytes

� Conceito da disposição dos bytes (endianness) de valores escalares compostos por múltiplos bytes◦ Big-endian: o byte mais significativo é armazenado no

menor endereço de byte◦ Little-endian: o byte menos significativo é armazenado no

menor endereço de bytemenor endereço de byte

� Ex: armazenamento do hexa 12345678 (palavra de 32 bits)

Endereço Valor

184 12

185 34

186 56

187 78

Endereço Valor

184 78

185 56

186 34

187 12

23

Page 24: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de acesso à memóriaInstruções de acesso à memória

� Por exemplo, suponha que A seja um array de100 palavras, e que o compilador tenhaassociado as variáveis g e h aos registradores$s1 e $s2. Suponha também que o endereço-$s1 e $s2. Suponha também que o endereço-base do array está armazenado em $s3.

� Como ficaria em MIPS a instrução ‘g ← h +A[8];’ ?

24

Page 25: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de acesso à memóriaInstruções de acesso à memória

� Inicialmente, precisamos transferir o conteúdo daposição de memória A[8] para um registrador:◦ Obtém-se o endereço deste elemento do array através

da soma do endereço base (em $s3) com o índice,usado para selecionar o nono elemento do arrayusado para selecionar o nono elemento do array

◦ O deslocamento a ser adicionado ao conteúdo doregistrador-base $s3 deve ser 4 x 8, ou 32

◦ lw $t0, 32($s3) #o reg. Temporário $t0 recebe A[8]

� Em seguida basta fazer a soma:◦ add $s1, $s2, $t0 # $s1 (g) recebe h + A[8]

25

Page 26: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de acesso à memóriaInstruções de acesso à memória

� Para o próximo exemplo, ao invés de armazenaro resultado em um registrador, vamos armazenarem uma posição de memória. O endereço-basedo array A continua em $s3

� A[12] = h + A[8];◦ lw $t0, 32($s3) # $t0 recebe o valor de A[8]

◦ add $t0, $s2, $t0 # $t0 recebe h + A[8]

◦ sw $t0, 48($s3) # h + A[8] é armazenado em# A[12]

26

Page 27: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Acesso a posições de um Acesso a posições de um arrayarraycom índice variávelcom índice variável

� Até o momento, todos os acessos realizados a umelemento de um array foram feitos através doíndice constante * 4 (para o cálculo do bytecorrespondente)

� Em algumas situações, o índice do array será uma� Em algumas situações, o índice do array será umavariável ‘i’, que também terá que ser multiplicadapor 4

� Como a operação de multiplicação ainda não foiestudada (e pode nem estar implementada emalgumas linguagens de montagem), como fazereste ajuste de endereço a byte?

27

Page 28: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Acesso a posições de um Acesso a posições de um arrayarraycom índice variávelcom índice variável

� Uma solução para obter o valor de ‘i*4’ seria:◦ Some o valor de i a ele mesmo (i + i = 2i);

◦ Depois some esta soma a ela mesma (2i + 2i =4i);4i);

� Exemplo:◦ Sendo A um array de 100 elementos cujo

endereço-base está em $s3, e as variáveis g, h ei estão associadas aos registradores $s1, $s2 e$s4, qual o código MIPS para a operação ‘g = h+ A[i]’?

28

Page 29: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Acesso a posições de um Acesso a posições de um arrayarraycom índice variávelcom índice variável

� O primeiro passo é multiplicar o valor de ‘i’, queestá em $s4 por 4:◦ add $t1, $s4, $s4 # $t1 recebe 2 * i◦ add $t1, $t1, $t1 # $t1 recebe 4 * i

� Em seguida, usamos as técnicas já conhecidas� Em seguida, usamos as técnicas já conhecidaspara acessar a memória e realizar a soma:◦ add $t1, $t1, $s3 # soma o end. base em $s3

# com odeslocamento de $t1◦ lw $t0, 0($t1) # carrega A[i] em $t0◦ add $s1, $s2, $t0 # g = h + A[i]

29

Page 30: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Codificação de instruções MIPS (até o Codificação de instruções MIPS (até o momento...)momento...)

instrução

formato op rs rt rd shamt funct endereco

add R 0 reg reg reg 0 32 n/a

sub R 0 reg reg reg 0 34 n/asub R 0 reg reg reg 0 34 n/a

lw I 35 reg reg n/a n/a n/a endereço

sw I 43 reg reg n/a n/a n/a endereço

• reg: número de um registrador, entre 0 e 31• endereço: valor de 16 bits• n/a: não se aplica

30

Page 31: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercícioExercício

� Supondo que $t1 tem o valor-base do array A eque $s2 corresponde a variável h, diga como ficao comando a seguir em MIPS e linguagem demontagem:

� A[300] = h + A[300];� A[300] = h + A[300];� Solução:◦ ls $t0, 1200($t1) # $t0 recebe A[300]◦ add $t0, $s2, $t0 # $t0 recebe h + A[300]◦ sw $t0, 1200($t1) # h + A[300] é armazenado

de # volta em A[300]

31

Page 32: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercícioExercício

Op Rs Rt RdEndereço/

shamtfunct

35 9 8 1200

0 18 8 8 0 32

43 9 8 120043 9 8 1200

Op Rs Rt RdEndereço/

shamtfunct

100011 01001 01000 0000010010110000

000000 10010 01000 01000 00000 100000

101011 01001 01000 0000010010110000

32

Page 33: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de desvioInstruções de desvio

� As linguagens de programação de alto nívelgeralmente implementam o comando de tomadade decisão através do comando if

� O MIPS possui duas instruções de desvio:◦ beq r1, r2, L1 → se os valores de r1 e r2 são◦ beq r1, r2, L1 → se os valores de r1 e r2 são

iguais, desvia para a linha identificada pelo label L1◦ bne r1, r2, L1 → se os valores de r1 e r2 são

diferentes, desvia para a linha identificada pelolabel L1◦ OBS: beq: branch if equal

◦ bne: branch if not equal

33

Page 34: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de desvioInstruções de desvio

� O label é apenas um identificador de linha,inserido no começo e separado da instruçãopor ‘:’

� Exemplo:if (i == j) go to L1;f = g + h;

L1: f = f – i;

Supondo que as variáveis f, g, h, i e j correspondem aosregistradores de $s0 a $s4, escreva o código MIPScorrespondente

34

Page 35: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de desvioInstruções de desvio

� Solução:beq $s3, $s4, L1 # desvia para L1 se i for igual a j add $s0, $s1, $s2 # f = g + h; não executada se i = j

L1: sub $s0, $s0, $s3 #f = f – i; sempre L1: sub $s0, $s0, $s3 #f = f – i; sempre executada

◦ O label L1 corresponde aonde a instrução sub estáarmazenada. Não há a necessidade de calcularendereços de memória, como acontece com oscomandos de load e store.

35

Page 36: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de desvioInstruções de desvio

� Os desvios feitos até agora se basearam noresultado de um teste de comparação. É possívelainda fazer desvios incondicionais, isto é, quesempre serão tomados, através da instrução ‘j’(jump)

� Exemplo: if-then-else usando desvios em MIPS:� Exemplo: if-then-else usando desvios em MIPS:if (i == j)

f = g + h;else

f = g – h;� Novamente, estamos supondo que as variáveis f, g, h, i e j

correspondem aos registradores de $s0 a $s4

36

Page 37: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de desvioInstruções de desvio

bne $s3, $s4, Else # desvia para Else se i ≠ j

add $s0, $s1, $s2 # f = g + h; não é executada se i ≠ j

j Exit # desvia incondicionalmente para j Exit # desvia incondicionalmente para # ‘Exit’

Else: sub $s0, $s1, $s2 # salta essa instrução se i = j

Exit:

37

Page 38: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de desvioInstruções de desvio

� É possível utilizar uma variação do jump,conhecida como ‘jump register’ (jr), que realizaum desvio incondicional para um registradorespecificado na instrução.◦ jr $t1◦ jr $t1

� Muitas vezes são guardados endereços dememória em registradores, e a utilização do ‘jr’faz com que o salto seja feito diretamente parao endereço armazenado no registrador emquestão

38

Page 39: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de repetiçãoInstruções de repetição

� Desvios condicionais em MIPS podem ser utilizadospara a implementação de estruturas de repetição,como um loop de instruções, por exemplo:Loop: g = g + A[i];

i = i + j;i = i + j;

if (i != h) go to Loop;

� Suponha que A seja um array de 100 elementos,que as variáveis g, h, i e j estão associadas aosregistradores $s1, $s2, $s3 e $s4, respectivamente,e que o endereço-base do array A esteja em $s5

39

Page 40: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de repetiçãoInstruções de repetição

Loop: add $t1, $s3, $s3 # $t1 recebe 2*iadd $t1, $t1, $t1 # $t1 recebe 4*iadd $t1, $t1, $s5 # $t1 recebe endereço de

A[i]A[i]lw $t0, 0($t1) # $t0 recebe A[i]add $s1, $s1, $t0 # g = g + A[i]add $s3, $s3, $s4 # i = i + jbne $s3, $s2, Loop # desvia para ‘Loop’

se i ≠ h

40

Page 41: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de repetiçãoInstruções de repetição

� Repetição com o comando ‘while’◦ Os loops de repetição de comandos são

implementados em linguagens de alto nível maisfrequentemente através do comando ‘while’, porexemplo:exemplo:

while (save[i] ==k)

i= i + j;

� Como fica este loop em MIPS, considerando asvariáveis i, j e k nos registradores $s3, $s4 e$s5, e o endereço-base do array save em $s6?

41

Page 42: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Instruções de repetiçãoInstruções de repetição

Loop: add $t1, $s3, $s3 # $t1 recebe 2*i

add $t1, $t1, $t1 # $t1 recebe 4*i

add $t1, $t1, $s6 # $t1 recebe end. de save[i]

lw $t0, 0($t1) # $t0 recebe save[i]lw $t0, 0($t1) # $t0 recebe save[i]

bne $t0, $s5, Exit # exit se save[i] ≠ k

add $s3, $s3, $s4 # i recebe i + j

j Loop # desvia para Loop

Exit: # fim

42

Page 43: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Teste de igualdade e Teste de igualdade e desigualdadedesigualdade

� Testes de condição geralmente fazem testesde igualdade ou desigualdade, verificando se ovalor assumido por uma variável é menor oumaior do que um outro valor.

� Em MIPS é utilizada a instrução ‘slt’, que� Em MIPS é utilizada a instrução ‘slt’, quecompara o valor armazenado em doisregistradores e armazena o valor 1 em umterceiro registrador se o valor do primeiroregistrador for menor do que o valor dosegundo; caso contrário, armazena 0 noterceiro registrador

43

Page 44: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Teste de igualdade e Teste de igualdade e desigualdadedesigualdade

� Exemplo:slt $t0, $s3, $s4 # $t0 recebe 1 se $s3 < $s4

# $t0 recebe 0 se $s3 ≥ $s4

� Exercício: qual o código para testar uma se � Exercício: qual o código para testar uma se uma variável ‘a’, armazenada em $s0, é menor do que uma variável ‘b’, armazenada em $s1, e se for menor, desviar para um label ‘Less’?

44

Page 45: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Teste de igualdade e Teste de igualdade e desigualdadedesigualdade

� Resposta:slt $t0, $s0, $s1 # reg. $t0 recebe 1 se $s0 <

$s1bne $t0, $zero, Less # desvia para Less se $t0 ≠ 0

Less: ... # instruções caso o desvioLess: ... # instruções caso o desvioseja # tomado

Exercício: escreva um algoritmo em MIPS equivalentea estrutura (considerando x em $s0 e y em $s1):

se x > yx ← x + y;

senão y ← y – x;

45

Page 46: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Operandos Imediatos ou Operandos Imediatos ou ConstantesConstantes

� A utilização de valores constantes é comum emvárias estruturas de dados, como o incrementode um índice de um array, o número deiterações de um loop, etc.

� Estão disponíveis em MIPS instruções do tipo I� Estão disponíveis em MIPS instruções do tipo Ionde um dos operandos pode ser representadona forma de um valor constante, de até 16 bits,mantido dentro da própria instrução

op rs rt imediato

6 bits 5 bits 5 bits 16 bits

46

Page 47: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Princípio de projeto 4Princípio de projeto 4

� “Torne o caso comum maisrápido”

� A utilização de operandos imediatos ocorrecom tanta frequência em linguagens decom tanta frequência em linguagens demontagem que a melhor decisão de projeto étratá-los como um caso comum, e não comoinstruções especiais

47

Page 48: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Operandos Imediatos ou Operandos Imediatos ou ConstantesConstantes

� Como em alguns casos são necessárias constantesmaiores do que o limite de 16 bits do campo, o MIPSinclui a instrução lui (load upper immediate), quecarrega os 16 bits de ordem mais alta de umaconstante em um registrador;constante em um registrador;

� Neste caso é necessário a utilização de uma outrainstrução para especificar os 16 bits de mais baixaordem da constante

� O registrador $at é mantido reservado para omontador para operações que ele precise “quebrar”constantes grandes em pedaços para depoisremontá-las

48

Page 49: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Operandos Imediatos ou Operandos Imediatos ou ConstantesConstantes

� Exemplo: como carregar a constante binária de 32 bits 0000 0000 0011 1101 0000 1001 0000 0000 no registrador $s0?lui $s0, 61 # 61 decimal é igual a 0000 0000

# 0011 1101 binário# 0011 1101 binário#após esta operação, o valor de $s0 é 0000 0000 0011 1101 0000 0000 0000 0000addi $s0, $s0, 2304 # 2304 decimal é igual a 0000

# 1001 0000 0000 binário

� Após a soma imediata, o valor armazenado em $s0 é 0000 0000 0011 1101 0000 1001 0000 0000

49

Page 50: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Operandos Imediatos ou Operandos Imediatos ou ConstantesConstantes

� A operação de soma utilizando um dosoperandos imediatos é feita através dainstrução addi (mnemônico para addimmediate), por exemplo:

addi $sp, $sp, 4 # $sp = $sp + 4

8 29 29 4

op rs rt imediato

001000 11101 11101 0000000000000100

50

Page 51: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Operandos Imediatos ou Operandos Imediatos ou ConstantesConstantes

� Operandos imediatos são muito utilizados emoperações de comparação; quando necessáriocomparar com o valor zero, basta utilizar oregistrador especial $zero; em outros casos,pode ser utilizada a instrução slti e um valorpode ser utilizada a instrução slti e um valorconstante

� slti $t0, $s2, 10 # $t0 recebe 1 se $s2 < 10

51

Page 52: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercíciosExercícios1. Comente o código MIPS a seguir. Suponha que

$a0 é a entrada, contendo o valor 5, e que $v0 éusado para armazenar o resultado; qual o valorfinal?begin: addi $t0, $zero, 0

addi $t1, $zero, 1addi $t1, $zero, 1loop: slt $t2, $a0, $t1

bne $t2, $zero, finishadd $t0, $t0, $t1addi $t1, $t1, 2j loop

finish: add $v0, $t0, $zero

52

Page 53: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercíciosExercícios2. Mostre qual a instrução do MIPS ou o menor

conjunto de instruções do MIPS necessáriopara implementar os comandos a seguir:a. a = b + 100

b. x[10] = x[11] + cb. x[10] = x[11] + c

OBS: as variáveis a, b, c e o end. base de x estãoem $s1, $s2, $s3 e $s4, respectivamente.

53

Page 54: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercíciosExercícios

3. Converta os seguintes trechos de códigoem instruções MIPS equivalentes:

a. while (a!=0) {

c = a + b;

a = a--;

Considere a, b, c e i em $s1, $s2, $s3 e $s4, respectivamente

a = a--;

}

b. for (i=0, i !=10, i++) {

c = a + b;

}

respectivamente

54

Page 55: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Suporte a procedimentos do Suporte a procedimentos do MIPSMIPS

� Procedimentos e sub-rotinas são uma forma de escrevermódulos para funções específicas, que tornam o programamais fácil de ser entendido e possibilitam a reutilização decódigo

� MIPS oferece suporte a implementação de procedimentos,inclusive com o uso dos seguintes registradores especiais:inclusive com o uso dos seguintes registradores especiais:

◦ $a0 a $a3: 4 registradores para argumento, para apassagem de parâmetros do programa para oprocedimento;

◦ $v0 e $v1 : registradores para retorno de valores doprocedimento

◦ $ra: registrador que contém o endereço para o controleretornar ao final da execução do procedimento

55

Page 56: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Suporte a procedimentos do Suporte a procedimentos do MIPSMIPS

� Passos realizados durante a execução de um procedimento:

◦ Colocar os parâmetros em um lugar onde eles possam ser acessados pelo procedimento;

◦ Transferir o controle para o procedimento;◦ Transferir o controle para o procedimento;

◦ Garantir os recursos de memória necessários à execução do procedimento;

◦ Realizar a tarefa desejada;

◦ Colocar o resultado em um lugar acessível ao programa que chamou o procedimento;

◦ Retornar ao ponto de origem.

56

Page 57: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Suporte a procedimentos do Suporte a procedimentos do MIPSMIPS

� O MIPS implementa uma instrução de jump andlink (jal), que desvia para um endereço esimultaneamente salva o endereço da instruçãoseguinte em $ra◦ jal endereço-do-procedimento◦ jal endereço-do-procedimento

� A instrução jal salva o valor armazenado no PC+ 4 no registrador $ra para estabelecer um linkdo final do procedimento com a instrução doprograma principal imediatamente após a querealizou a chamada ao procedimento◦ jr $ra

57

Page 58: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Suporte a procedimentos do Suporte a procedimentos do MIPSMIPS

� Muitas vezes a quantidade de registradoresdisponíveis no MIPS é insuficiente paraarmazenar todos os valores necessários naexecução de um programa, principalmente naocorrência de chamadas recursivas.ocorrência de chamadas recursivas.

� Nestas situações, são utilizadas pilhas, que sãoestruturas de dados armazenadas na memóriaprincipal do sistema.

� Uma pilha implementa uma estrutura LIFO (lastin first out – o último a entrar é o primeiro a sair)

58

Page 59: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Manipulação de pilhasManipulação de pilhas

� Duas operações podem ser realizadas em uma pilha:a operação push, onde um dado é colocado no topoda pilha, e a operação pop, que retira o elemento queencontra-se no topo da pilha. Estas operaçõesexistem em linguagens de alto nível, não no MIPSexistem em linguagens de alto nível, não no MIPS

� O endereço de memória que indica qual a posiçãoocupada pelo topo da pilha (e consequentemente, oelemento que encontra-se no topo), fica armazenadono registrador $sp, também chamado de apontadorde pilha (stack point)

59

Page 60: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Manipulação de pilhasManipulação de pilhas

� Observe que, tradicionalmente, as pilhascrescem dos endereços de memória mais altospara os mais baixos; quando um item éempilhado, o valor do apontador de pilha ($sp)deve diminuirdeve diminuir

� No exemplo a seguir, serão empilhados oconteúdo de $s0, $t0 e $t1 em uma pilha; ofuncionamento é análogo ao que foiapresentado em arrays, e o endereço-base ficaem $sp

60

Page 61: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Manipulação de pilhasManipulação de pilhas

� sub $sp, $sp, 12 # ajusta a pilha para armazenar 3 itens

� sw $t1, 8 ($sp) # empilha o conteúdo do registrador de $t1

� sw $t0, 4 ($sp) # empilha o conteúdo do registrador de $t0

� sw $s0, 0 ($sp) # empilha o conteúdo do registrador de $s0

61

Page 62: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Manipulação de pilhasManipulação de pilhas

� Com os valores de $t1, $t0 e $s1 ‘empilhados’ namemória, estes registradores podem ser utilizadospor outras operações do programa

� No final das operações, os valores originais dosregistradores serão desempilhados, com oscomandos:comandos:

◦ lw $s0, 0($sp) # desempilha o topo da pilha para $s0◦ lw $t0, 4($sp) # desempilha o topo da pilha para $t0◦ lw $t1, 8($sp) # desempilha o topo da pilha para $t1◦ add $sp, $sp, 12 # ajusta a pilha de modo a remover os 3

itens◦ jr $ra # desvia de volta para o programa que

# chamou a função

62

Page 63: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercíciosExercícios� Escreva em MIPS os seguintes trechos de

código:1. Se x > y então

x = x + 2;Senão

Considere as variáveis x e Senão

x = x – 4;Fim-se;

2. Enquanto x != yx = x +1y = y – 1

Fim-enquanto;

63

Considere as variáveis x e y nos registradores $s1 e $s2, respectivamente

Page 64: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercíciosExercícios1. slt $t0, $s2, $s1

beq $t0, $zero, elseaddi $s1, $s1, 2j fimelse: addi $s2, $s2, -4else: addi $s2, $s2, -4fim: ...

64

Page 65: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercíciosExercícios� loop: beq $s1, $s2, fim� addi $s1, $s1, 1� addi $s2, $s2, -1� j loop

fim:� fim:

65

Page 66: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercíciosExercícios� Converta para MIPS os seguintes pseudo-códigos a

seguir, considerando as variáveis x, y, z nosregistradores $s1, $s2 e $s3, e o endereço-base de Aem $s0:

x = 10;y = 1;y = 1;z = 1;Repita

Se x > z entãoA[0] = A[0] + A[z];z = z + 1;

SenãoA[0] = A[0] – y;

Até A[0] < 100;

66

Page 67: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercíciosExercíciosaddi $s1, $zero, 10addi $s2, $zero, 1addi $s3, $zero, 1addi $s6, $zero, 100 lw $s4, 0($s0)

repita: slt $t0, $s3, $s1beq $t0, $zero, senaoadd $t1, $s3, $s3add $t1, $t1, $t1add $t1, $t1, $s0add $t1, $t1, $s0lw $s5, 0($t1)add $s4, $s4, $s5sw $s4, 0($s0)addi $s3, $s3, 1j ate

senao: addi $s4, $s4, -1sw $s4, 0($s0)

ate: slt $t3, $s4, $s6beq $t3, $zero, repita

...67

Page 68: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

ExercíciosExercícios� Escreva em MIPS um algoritmo para realizar as

seguintes manipulações em um vetor V, de 100posições:

1. Percorra o vetor e some todos os elementos,colocando o resultado desta soma em umavariável x;variável x;

2. Localize o maior elemento do vetor;3. Calcule a diferença entre o maior e menor

elemento do vetor (assuma que não existamelementos repetidos);

� Considere a variável x no registrador $s1 e oendereço-base de A em $s0

68

Page 69: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Exercícios Exercícios -- 11i = 0;enquanto i < 100 faça

x = x + V[i];fim-enquanto;

addi $t0, $zero, 100addi $t1, $zero, $zero

repita: slt $s2, $t1, $t0beq $s2, $zero, fimadd $t2, $t1, $t1add $t1, $t1, $t1

69

add $t1, $t1, $t1add $t1, $t1, $s0lw $t3, 0($t1)add $s1, $s1, $t3addi $t1, $t1, 1j repita

fim: ...

Page 70: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Exercícios Exercícios –– 22i = 1;maior = V[0];enquanto i < 100 faça

se V[i] > maiormaior = V[i];

addi $t0, $zero, 1addi $t1, $zero, 100lw $t2, 0($s1)

repita: slt $s1, $t0, $t1beq $s1, $zero, fimadd $s2, $t0, $t0add $s2, $s2, $s2add $s3, $s2, $s1maior = V[i];

fim-se;fim-enquanto;

70

add $s3, $s2, $s1lw $t3, 0($s3)addi $t0, $t0, 1slt $t4, $t2, $t3beq $t4, $zero, repitalw $t2, 0($s3)j repita

fim: ...

Page 71: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Exercícios Exercícios –– 33i = 1;maior = V[0];Menor = V[0];enquanto i < 100 faça

se V[i] > maiormaior = V[i];

71

maior = V[i];senão

se V[i] < menormenor = V[i];

fim-se;fim-se;

fim-enquanto;diferença = maior – menor;

Page 72: Linguagem de Montagem · 2017-08-03 · A programação em linguagem de montagem requer tanto conhecimentos de lógica quanto do hardware utilizado 2. ... linguagens de alto nível

Exercícios Exercícios –– 33addi $t0, $zero, 1

addi $t1, $zero, 100

lw $t2, 0($s1)

repita: slt $s1, $t0, $t1

beq $s1, $zero, fim

add $s2, $t0, $t0add $s2, $t0, $t0

add $s2, $s2, $s2

add $s3, $s2, $s1

lw $t3, 0($s3)

addi $t0, $t0, 1

slt $t4, $t2, $t3

beq $t4, $zero, repita

lw $t2, 0($s3)

j repita72