Upload
internet
View
114
Download
0
Embed Size (px)
Citation preview
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 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
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>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
#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 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
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.