1.3.2 – linguagem assembly um programa em linguagem de máquina sofre de total falta de clareza um...

53
1.3.2 – Linguagem Assembly 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina Um programa em linguagem de máquina sofre de total sofre de total falta de clareza falta de clareza O programa é uma sequência de linhas numeradas Cada linha contém uma instrução composta de um ou dois números: Código de operação Endereço de operando É obscura a associação de cada número com a

Upload: internet

Post on 16-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

1.3.2 – Linguagem Assembly1.3.2 – Linguagem Assembly

Um programa em linguagem de máquina sofre Um programa em linguagem de máquina sofre de total de total falta de clarezafalta de clareza

O programa é uma sequência de linhas numeradas

Cada linha contém uma instrução composta de um ou dois números:

•Código de operação •Endereço de operando

É obscura a associação de cada número com a ação ou grandeza por ele representada

Page 2: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

No início dos anos 50, apareceram as No início dos anos 50, apareceram as chamadas chamadas linguagens de montagemlinguagens de montagem, ou , ou linguagens Assemblylinguagens Assembly, ou simplesmente , ou simplesmente Assembly’sAssembly’s

Finalidade:Finalidade: expressar as instruções de expressar as instruções de máquina de máquina de forma mais claraforma mais clara

Códigos de operação expressos por Códigos de operação expressos por mnemônicosmnemônicos

Informações sobre Informações sobre operandosoperandos e seus e seus endereços expressos por endereços expressos por nomesnomes que lembrem que lembrem seu significado (seu significado (endereçamento simbólicoendereçamento simbólico))

Page 3: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Exemplo: Exemplo: mnemônicos do computador mnemônicos do computador primitivoprimitivo

Page 4: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Exemplo: Programa para somar números Exemplo: Programa para somar números inteiros positivos lidosinteiros positivos lidos

Page 5: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Montador ou Assembler: Montador ou Assembler: software que traduz software que traduz um programa escrito em um programa escrito em AssemblyAssembly para para linguagem de máquinalinguagem de máquina

CONST: CONST: não é uma instrução executável mas não é uma instrução executável mas sim umasim uma pseudo-instrução pseudo-instrução

Page 6: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Soma: CONST 0 Soma: CONST 0 e e Numero: CONST 0 Numero: CONST 0

OO Assembler Assembler reserva as palavras reserva as palavras 1010 e e 1111 para para as variáveis as variáveis SomaSoma e e NumeroNumero e coloca ali o e coloca ali o valor valor 00

Page 7: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Soma e Numero são variáveisSoma e Numero são variáveis

Variável: Variável: nome ao qual está associado um local nome ao qual está associado um local na memória, cujo valor pode ser alterado na memória, cujo valor pode ser alterado durante a execuçãodurante a execução

Constante: Constante: idem, só que o valor não pode ser idem, só que o valor não pode ser alterado durante a execuçãoalterado durante a execução

Page 8: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

São dois programas equivalentesSão dois programas equivalentes

Pseudo-instrução END:Pseudo-instrução END: Indica ao Assembler o final do trecho a ser Indica ao Assembler o final do trecho a ser

traduzidotraduzido Contém o rótulo da primeira instrução Contém o rótulo da primeira instrução

executávelexecutável

Page 9: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

A A primeira instruçãoprimeira instrução executável não precisa executável não precisa ser a da ser a da primeira linhaprimeira linha do programa do programa

As pseudo-instruções As pseudo-instruções CONSTCONST não precisam não precisam estar no estar no finalfinal do programa do programa

Page 10: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Cada computador tem sua Cada computador tem sua linguagem de linguagem de máquinamáquina e seu e seu AssemblyAssembly particular, por serem particular, por serem linguagens fortemente dependentes de sua linguagens fortemente dependentes de sua estrutura internaestrutura interna

Atualmente as CPU’s são bem Atualmente as CPU’s são bem mais poderosasmais poderosas, , sendo assim também as sendo assim também as instruçõesinstruções, as , as linguagens de máquinalinguagens de máquina e os e os Assembly’sAssembly’s

Por exemplo, as CPU’s costumam ter diversos Por exemplo, as CPU’s costumam ter diversos registradores de propósitos geraisregistradores de propósitos gerais, podendo , podendo ser acessados através de ser acessados através de instruçõesinstruções

Numa instrução de soma, é necessário Numa instrução de soma, é necessário especificar os especificar os registradores envolvidosregistradores envolvidos

Page 11: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Exercícios 1.3.2:Exercícios 1.3.2:

1.1.Escrever um programa em Assembly para ler Escrever um programa em Assembly para ler vários pares de números inteiros positivos e, para vários pares de números inteiros positivos e, para cada par, calcular e imprimir seu MDC e seu cada par, calcular e imprimir seu MDC e seu MMC. Utilizar os mesmos mnemônicos MMC. Utilizar os mesmos mnemônicos apresentados no início da Seção 1.3.2.apresentados no início da Seção 1.3.2.

2.2.Escrever um programa em Assembly para ler um Escrever um programa em Assembly para ler um conjunto de conjunto de nn números inteiros positivos, em que números inteiros positivos, em que o valor o valor nn deve ser lido inicialmente. O programa deve ser lido inicialmente. O programa deve também calcular e imprimir a soma desses deve também calcular e imprimir a soma desses números e a soma de seus quadrados. Deve ainda números e a soma de seus quadrados. Deve ainda contabilizar e imprimir quantos números ímpares contabilizar e imprimir quantos números ímpares e quantos números pares estão nesse conjunto. e quantos números pares estão nesse conjunto. Utilizar os mesmos mnemônicos apresentados no Utilizar os mesmos mnemônicos apresentados no início da Seção 1.3.2.início da Seção 1.3.2.

Page 12: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

1.3.3 – Linguagens tradicionais de 1.3.3 – Linguagens tradicionais de programaçãoprogramação

Programas escritos em Programas escritos em Assembly Assembly também também carecemcarecem dede clareza clareza

Exemplo:Exemplo:

Não é de imediato que se percebe que é a execução da atribuição

Page 13: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Em 1954 surgiuEm 1954 surgiu Fortran Fortran ( (ForFor-mula -mula trantran--slation ): a primeira linguagem de slation ): a primeira linguagem de propósitos propósitos geraisgerais para a solução de problemas para a solução de problemas matemáticos e científicosmatemáticos e científicos

É uma linguagem intensamente usada É uma linguagem intensamente usada até até hojehoje, principalmente por , principalmente por pesquisadorespesquisadores científicos científicos

Seus mantenedores a têm Seus mantenedores a têm atualizadoatualizado para para mantê-la mantê-la vivaviva, mesmo com o surgimento de , mesmo com o surgimento de linguagens mais modernaslinguagens mais modernas

Page 14: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Cálculo da expressão:

Em Assembly:

Em Fortran:

Page 15: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Com o passar do tempo, linguagens mais bem Com o passar do tempo, linguagens mais bem estruturadasestruturadas e mais e mais poderosaspoderosas foram foram surgindosurgindo

Eis o nome de algumas delas: Eis o nome de algumas delas:

COBOL, ALGOL, PASCAL, Modula-2, PL-1, COBOL, ALGOL, PASCAL, Modula-2, PL-1, C, C, C++, Java, C#, Delphy, LISP, PROLOG, C++, Java, C#, Delphy, LISP, PROLOG, etc.etc.

Page 16: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Esta disciplina utilizará a Esta disciplina utilizará a Linguagem CLinguagem C para para ilustrar os princípios de ilustrar os princípios de programaçãoprogramação aqui aqui abordadosabordados

Foi a linguagem utilizada para desenvolver Foi a linguagem utilizada para desenvolver importantes componentes do importantes componentes do software básicosoftware básico de computadoresde computadores

É uma linguagem que permite a aplicação de É uma linguagem que permite a aplicação de técnicas para técnicas para boa estruturaçãoboa estruturação dos dos programasprogramas

É uma linguagem É uma linguagem vivaviva, ou seja, ainda é muito , ou seja, ainda é muito utilizada para o desenvolvimento de programasutilizada para o desenvolvimento de programas

Page 17: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Exemplo: Programa para somar números Exemplo: Programa para somar números inteiros positivos lidosinteiros positivos lidos

Em Assembly: Em C:

Page 18: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

A programação em C não A programação em C não requer conhecimento da requer conhecimento da estrutura interna do estrutura interna do computadorcomputador

O programador não precisa O programador não precisa saber quantos registradores saber quantos registradores de propósitos gerais possui a de propósitos gerais possui a CPU CPU

No programa ao lado não há No programa ao lado não há qualquer referência ao qualquer referência ao registrador AC ou a qualquer registrador AC ou a qualquer outro de mesma finalidadeoutro de mesma finalidade

Pessoas cada vez menos Pessoas cada vez menos familiarizadas com familiarizadas com Arquitetura de Arquitetura de Computadores podem Computadores podem programá-losprogramá-los

Page 19: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Cada instrução em Cada instrução em Assembly corresponde a Assembly corresponde a uma instrução em uma instrução em linguagem de máquinalinguagem de máquina

É relativamente simples É relativamente simples traduzir de Assembly para traduzir de Assembly para linguagem de máquina linguagem de máquina

Assembly

CLinguagem de

máquina

Page 20: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

A estrutura de um programa A estrutura de um programa em C é totalmente diferente em C é totalmente diferente das outras duasdas outras duas

A tradução de C para A tradução de C para Assembly ou linguagem de Assembly ou linguagem de máquina é bem mais máquina é bem mais complexa complexa

Assembly

CLinguagem de

máquina

Page 21: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Compilador: software que Compilador: software que traduz de uma linguagem de traduz de uma linguagem de programação para Assembly programação para Assembly ou linguagem de máquinaou linguagem de máquina

Assembly

CLinguagem de

máquina

Page 22: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Em muitos ambientes de programação:Em muitos ambientes de programação:

Compilador

Assembler ou

Montador

Programa em linguagem de programação

Programa em Assembly

Programa em linguagem de máquina

Page 23: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

A seguir, os processos de A seguir, os processos de compilaçãocompilação e de e de montagemmontagem serão ilustrados, usando-se um serão ilustrados, usando-se um programa em programa em CC para o cálculo do para o cálculo do fatorialfatorial de de um número lidoum número lido

Antes porém, será comentado sobre a Antes porém, será comentado sobre a divisão divisão de um programa em módulosde um programa em módulos

Page 24: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Divisão de um programa em módulos e sua Divisão de um programa em módulos e sua execução:execução:

O programa principal é obrigatório

Por ele começa a execução

Os outros módulos são auxiliares do principal e não são obrigatórios

Eles são chamados de subprogramas

Fluxo de execução

Page 25: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Exemplo: Compilação do programa do Exemplo: Compilação do programa do fatorialfatorial

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

Primeiramente, reserva de espaço para as constantes 1 e 2

C1: CONST 1C2: CONST 2

Page 26: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

Em seguida, reserva de espaço para as variáveis n, i, fat

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0

Page 27: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

Agora a tradução dos comandos

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0

Page 28: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

Na realidade, a tradução de scanf é algo mais complexo:

É uma chamada de subprograma

Rótulo da 1ª instrução executável:

inic

Page 29: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

Rótulo da 1ª instrução executável:

inic

Page 30: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP escrever

JUMP loop

Rótulo da 1ª instrução executável:

inic

A instrução “loop” deveria ser LD i, mas antes dela e da instrução JUMP, o registrador AC já estará com o valor de “i”

“escrever” é o rótulo da instrução logo após JUMP

Page 31: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

Rótulo da 1ª instrução executável:

inic

Page 32: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITEfat

Rótulo da 1ª instrução executável:

inic

Na realidade, a tradução de printf é algo mais complexo:

É uma chamada de subprograma

Page 33: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITEfat

STOPEND inic

Rótulo da 1ª instrução executável:

inic

Page 34: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

#include <stdio.h>void main ( ){

int n, fat, i;scanf (“%d”, &n);fat = 1;i = 2;while (i <= n) {

fat = fat * i;i = i + 1;

}printf (“%d”, fat);

}

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITEfat

STOPEND inic

Final da compilação

Agora vem a montagem

Page 35: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

rótulo endereço

O Assembler monta uma tabela de rótulos para ajudar a preencher o programa em linguagem de máquina

Page 36: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

rótulo endereço

C1 0

C2 1

n 2

fat 3

i 4

Page 37: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

rótulo endereço

C1 0

C2 1

n 2

fat 3

i 4

inic 5

Page 38: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6 1 0

7 2 3

8 1 1

9 2 4

10

11

12

13

14

15

16

17

18

19

20

rótulo endereço

C1 0

C2 1

n 2

fat 3

i 4

inic 5

Page 39: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6 1 0

7 2 3

8 1 1

9 2 4

10 5 2

11

12

13

14

15

16

17

18

19

20

rótulo endereço

C1 0

C2 1

n 2

fat 3

i 4

inic 5

loop 10

Page 40: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6 1 0

7 2 3

8 1 1

9 2 4

10 5 2

11 14 ???

12

13

14

15

16

17

18

19

20

rótulo endereço

C1 0

C2 1

n 2

fat 3

i 4

inic 5

loop 10

escrever ???

Page 41: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6 1 0

7 2 3

8 1 1

9 2 4

10 5 2

11 14 ???

12 1 3

13 6 4

14 2 3

15 1 4

16 4 0

17 2 4

18 11 10

19

20

rótulo endereço

C1 0

C2 1

n 2

fat 3

i 4

inic 5

loop 10

escrever ???

Page 42: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6 1 0

7 2 3

8 1 1

9 2 4

10 5 2

11 14 19

12 1 3

13 6 4

14 2 3

15 1 4

16 4 0

17 2 4

18 11 10

19 16 3

20

rótulo endereço

C1 0

C2 1

n 2

fat 3

i 4

inic 5

loop 10

escrever 19

Page 43: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6 1 0

7 2 3

8 1 1

9 2 4

10 5 2

11 14 19

12 1 3

13 6 4

14 2 3

15 1 4

16 4 0

17 2 4

18 11 10

19 16 3

20 17 0

rótulo endereço

C1 0

C2 1

n 2

fat 3

i 4

inic 5

loop 10

escrever 19

Page 44: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

C1: CONST 1C2: CONST 2n: CONST 0fat: CONST 0i: CONST 0inic: READ n

LD C1ST fatLD C2ST i

loop: SUB nJP

escreverLD fatMULT iST fatLD iADD C1ST iJUMP loop

escrever:WRITE fat

STOPEND inic

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6 1 0

7 2 3

8 1 1

9 2 4

10 5 2

11 14 19

12 1 3

13 6 4

14 2 3

15 1 4

16 4 0

17 2 4

18 11 10

19 16 3

20 17 0

rótulo endereço

C1 0

C2 1

n 2

fat 3

i 4

inic 5

loop 10

escrever 19

Endereço inicial da execução: 5

Essa informação deve acompanhar o programa em linguagem de máquina

Page 45: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

O programa em linguagem O programa em linguagem de programação é de programação é denominado denominado programa-programa-fontefonte

O programa gerado pelo O programa gerado pelo Assembler é denominado Assembler é denominado programa-objetoprograma-objeto

O programa-objeto foi O programa-objeto foi montado a partir do montado a partir do endereço zeroendereço zero da RAM da RAM

Esse programa é guardado Esse programa é guardado num num arquivo arquivo (extensão (extensão objobj))

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6 1 0

7 2 3

8 1 1

9 2 4

10 5 2

11 14 19

12 1 3

13 6 4

14 2 3

15 1 4

16 4 0

17 2 4

18 11 10

19 16 3

20 17 0

Endereço inicial da execução: 5

Page 46: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

O local para execução é O local para execução é estabelecido pelo estabelecido pelo sistema sistema operacionaloperacional do do computadorcomputador

Esse local depende da Esse local depende da disponibilidadedisponibilidade da RAM da RAM

E se o local E se o local não for o não for o endereço zeroendereço zero (por (por exemplo, endereço 3000)?exemplo, endereço 3000)?

endereço

codop ender

0 1

1 2

2 0

3 0

4 0

5 15 2

6 1 0

7 2 3

8 1 1

9 2 4

10 5 2

11 14 19

12 1 3

13 6 4

14 2 3

15 1 4

16 4 0

17 2 4

18 11 10

19 16 3

20 17 0

Endereço inicial da execução: 5

Page 47: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Os locais para C1, C2, n, fat e i Os locais para C1, C2, n, fat e i não são mais não são mais 00, , 11, , 22, , 33 e e 44, , mas sim mas sim 30003000, , 30013001, , 30023002, , 30033003 e e 30043004

Os rótulos Os rótulos inicinic, , looploop e e escreverescrever mudarão para os mudarão para os endereços endereços 30053005, , 30103010 e e 30193019

Então todos os campos Então todos os campos enderender das instruções estarão com um das instruções estarão com um erro erro (deslocamento de(deslocamento de 3000 3000 posições)posições)

Isso tem de ser Isso tem de ser corrigidocorrigido antes da execuçãoantes da execução

endereço

codop ender

3000 1

3001 2

3002 0

3003 0

3004 0

3005 15 2

3006 1 0

3007 2 3

3008 1 1

3009 2 4

3010 5 2

3011 14 19

3012 1 3

3013 6 4

3014 2 3

3015 1 4

3016 4 0

3017 2 4

3018 11 10

3019 16 3

3020 17 0

Endereço inicial da execução: 3005

Page 48: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Quem corrige isso é o Quem corrige isso é o software denominado software denominado carregador (loader)carregador (loader)

A correção é feita quando o A correção é feita quando o programa for programa for carregadocarregado para ser para ser executadoexecutado

endereço

codop ender

3000 1

3001 2

3002 0

3003 0

3004 0

3005 15 2

3006 1 0

3007 2 3

3008 1 1

3009 2 4

3010 5 2

3011 14 19

3012 1 3

3013 6 4

3014 2 3

3015 1 4

3016 4 0

3017 2 4

3018 11 10

3019 16 3

3020 17 0

Endereço inicial da execução: 3005

Page 49: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Antes de corrigir os endereços do programa-objeto, Antes de corrigir os endereços do programa-objeto, é necessário juntar a ele todos os é necessário juntar a ele todos os subprogramas subprogramas auxiliaresauxiliares pertencentes à pertencentes à bibliotecabiblioteca da linguagem da linguagem

Exemplos: Exemplos: funções para funções para entrada e saídaentrada e saída (scanf, (scanf, printf, etc.), funções printf, etc.), funções matemáticasmatemáticas (sqr, pow, sqrt, (sqr, pow, sqrt, log, sin, cos, etc.)log, sin, cos, etc.)

Esse trabalho de juntar o programa-objeto com tais Esse trabalho de juntar o programa-objeto com tais subprogramas é feito por um software denominado subprogramas é feito por um software denominado editor de ligações (linkage-editor)editor de ligações (linkage-editor)

O produto do editor de ligações é um arquivo O produto do editor de ligações é um arquivo denominado denominado programa-executável programa-executável (extensão (extensão exeexe))

Quando o Quando o executávelexecutável for trazido à RAM para ser for trazido à RAM para ser executado, só então o executado, só então o carregadorcarregador fará a fará a correção correção dos endereçosdos endereços

Page 50: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Exercício 1.3.3:Exercício 1.3.3:

O programa em C a seguir calcula a soma de uma PA, O programa em C a seguir calcula a soma de uma PA, onde o primeiro termo, a razão e o número de termos onde o primeiro termo, a razão e o número de termos são lidos. Escrever um programa em Assembly e um são lidos. Escrever um programa em Assembly e um programa em Linguagem de Máquina para este programa em Linguagem de Máquina para este programa. Utilizar os mesmos mnemônicos e códigos programa. Utilizar os mesmos mnemônicos e códigos de operação apresentados na Seção 1.3.1 e 1.3.2. de operação apresentados na Seção 1.3.1 e 1.3.2. Estudar no livro-texto e utilizar devidamente a pseudo-Estudar no livro-texto e utilizar devidamente a pseudo-instrução instrução BLOCKBLOCK para manipular cadeias de para manipular cadeias de caracterescaracteres..

Page 51: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

1.3.4 – Linguagens aplicativas1.3.4 – Linguagens aplicativas

Os Os propósitospropósitos das linguagens tradicionais de das linguagens tradicionais de programação são programação são gerais e inúmerosgerais e inúmeros

Com elas foram criados programas muito Com elas foram criados programas muito trabalhosos para criar linguagens de trabalhosos para criar linguagens de propósitos específicospropósitos específicos

Nesses programas, a Nesses programas, a entrada de dadosentrada de dados consiste de consiste de comandoscomandos de uma nova de uma nova linguagem, para a execução de determinadas linguagem, para a execução de determinadas tarefas atuando sobre determinados tarefas atuando sobre determinados parâmetrosparâmetros

Page 52: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

Por exemplo, Por exemplo, uma uma linguagem linguagem para para desenho desenho geométrico, geométrico, pode ter pode ter comandos comandos tais como:tais como:

ResultadoResultado

Retângulo: 400 X 250 – canto superior esquerdo [100, 100] – cor [PRETO, AMARELO]

Circulo: raio 100 – centro [200, 150] – cor [MARROM, AZUL]

Reta: [50, 500] [700, 200] – cor VERDE

Page 53: 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza Um programa em linguagem de máquina sofre de total falta

É imensa a quantidade de linguagens para É imensa a quantidade de linguagens para aplicações específicas; exemplos de propósitos aplicações específicas; exemplos de propósitos para essas linguagens:para essas linguagens:

Simulação de fenômenos de natureza diversa

Manipulação de banco de dados

Edição e formatação de textos

Edição de partituras musicais

Manipulação de fórmulas matemáticas

Planilhas de cálculo

Controle dos mais variados tipos de processos industriais

Realização de experimentos, etc.