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

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

description

1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total 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 - PowerPoint PPT Presentation

Transcript of 1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza

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

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))

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

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

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

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

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

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

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

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

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.

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

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

Cálculo da expressão:

Em Assembly:

Em Fortran:

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.

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

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

Em Assembly: Em C:

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 de propósitos gerais possui a CPU a CPU

No programa ao lado, não No programa ao lado, não há qualquer referência há qualquer referência explícita ou implícita ao explícita ou implícita ao registrador AC ou a registrador AC ou a qualquer outro de mesma qualquer outro de mesma finalidadefinalidade

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

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

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

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

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

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

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

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

#include <stdio.h>int 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

#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

#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

#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

#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

#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

#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

#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

#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

#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

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

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

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

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

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

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 ???

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 ???

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

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

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

O programa em linguagem de O programa em linguagem de programação é denominado programação é denominado programa-fonteprograma-fonte

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, , ou ou oo, no Code Blocks), no Code Blocks)

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

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

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

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

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

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..

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

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

É 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.