CAP.
3- Tradução de Programas
Compiladores e interpretadores
Linguagem de Montagem(Assembly)
Docente: Elsa Salombuey
OBJECTIVOS
Objectivos das aulas práticas de Arquitectura
de Computadore sem Assembly:
- Introduzir os conceitos associados à linguagem
Assembly.
- Aprender a linguagem Assembly do processador
8086.
- Compriender instruções expressas em Assembly
com PIC (CPU) 8086.
- Executar programas em Assembly e ver os
resultados. 2
• linguagem de máquina - É a comunicação em forma de códigos
binários referente aos comandos que os circuitos eletrônicos do
processador podem executar.
• Para que um problema possa ser resolvido pelo computador, é
necessário criar um algoritmo computacional, composto por uma
sequência de passos que determinam a solução do problema e a
respectiva codificação, usando uma linguagem de alto nível, que é
mais fácil de ser escrita. Essa codificação transforma o algoritmo
num programa (software).
• Software - são os programas com sequência de instruções que serão
interpretadas e executadas pelo processador.
- As principais etapas de um algoritmo para a obtenção de uma
solução computacional são:
a) Elaboração do algoritmo computacional referente ao problema.
b) Codificação do algoritmo numa linguagem de alto nível (programa
fonte).
c) Tradução ou compilação do programa fonte para o código
correspondente em linguagem de máquina (programa objeto).
d) Execução do programa objeto (executável) pelo computador.
NOTA: Aatualmente, a maioria dos programas são desenvolvidos
utilizando uma linguagem de alto nível, a qual é traduzida para
linguagem de máquina através da interpretação ou da compilação do
programa fonte.
• Na interpretação, cada instrução expressa em linguagem de alto
nível é interpretada por um programa específico que está em
execução (interpretador).
• Este, por sua vez, executa a instrução correspondente, através do
hardware do computador.
Interpretador – atua no momento em que cada instrução é
executada.
Objetivo: transformar determinada instrução de alto nível no código
máquina que o processador executa.
Desvantagem: o processo da interpretação torna mais lenta a
execução dos programas “interpretados”
No processo de compilação:
- um Programa Fonte (source program) , escrito em linguagem de
alto nível, é transformado em instruções básicas de um processador;
- um Programa Objecto (object program) : trata-se do programa
obtido depois da compilação.
Essas instruções básicas são executadas diretamente pelos
circuitos eletrônicos do computador.
CARACTERISTICAS
COMPILADOR:
• Atua como tradutor
• Transforma “texto” escrito numa linguagem,
num outro texto, escrito noutra linguagem
INTERPRETADOR:
• Atua como intérprete
• Traduz no momento estabelecendo o ponto
entre dois interlocutores 6
Compilador e interpretador
7
Assembly - Introduçao
Assembly é uma linguagem de baixo nível, chamada
frequentemente de “linguagem de montagem”
É uma linguagem considerada difícil, principalmente porque
o programador precisa conhecer a estrutura da máquina
para usá-la , o nome dado a este dialeto é assembly e não
assembler.
Assembler significa assemblador, ou seja é o nome inglês
dado ao programa que traduz as mnemônica (abreviaturas
compreensíveis pelo ser humano) em código binário
diretamente compreensível pelo computador. 8
Assembly – Introduçao Cont.
• A linguagem Assembly é atrelada à arquitetura
de uma certa CPU, ou seja, ela depende
completamente do hardware (HW).
• Cada família de processador tem sua própria
linguagem assembly (Ex: Em8086, 8088, ARM,
SPARC, MIPS, etc.)
• Por essa razão, Assembly não é uma linguagem
portável, ao contrário da maioria das linguagens
de alto nível.
9
Assembly - História
• As primeiras linguagens Assembly
surgiram na década 50, na chamada
segunda geração das linguagens de
programação.
• A segunda geração visou libertar os
programadores de dificuldades como
lembrar códigos numéricos e calcular
endereços.
10
Assembly - História
• Assembly foi muito usada para várias aplicações até nos anos 80,
quando foi substituída pelas linguagens de alto nível.
• Isso aconteceu principalmente pela necessidade do aumento da
produtividade de softwares.
• Atualmente Assembly é usada para manipulação direta de
hardwares e para sistemas que necessitem de performance
crítica.
• Device drivers, sistemas embarcados de baixo nível e sistemas de
tempo real são exemplos de aplicações que usam Assembly.
Sistema embarcado – é um sistema microprocessado em que o PC esta anexado
ao sistema que ele controla. Estes sistemas operam em máquinas que podem trabalha
por varios anos sem parar e em alguns casos, possuem capacidade de autocorreção.
Alguns exemplos de dispositivos que recebem aplicações de sistemas embaca-
dos: telefones, roteadores, equipamentos hospitalares, alguns eletrodomesticos
, Impressoras, videogames, calculadoras, etc.
11
Assembly - História
• A linguagem Assembly é de baixo nível,
porém ainda precisa ser transformada na
linguagem que a máquina entende
• Quem faz isso é o Assembler (linguagem de
máquina).
• O Assembler é um utilitário que traduz o
código Assembly para a máquina.
12
Sistemas Numéricos
- Sistema Decimal: sistema natural do homem.
- No assembly um número decimal pode terminar com um d.
Ex: 64223d ou 64223D.
- Sistema Binário: representado por bits(0 ou 1)
• Agrupamento dos bits:
– Nibble:4 bits
– Byte:8 bits
– Palavra (word): 16 bits
– Palavra dupla (doubleword): 32 bits
• No assembly um número binário deve terminar com um b.
Ex:1110101b ou 1110101B. 13
Sistemas Numéricos
• Sistema Hexadecimal: 1 algarismo hexadecimal = 4
bits
- (ex: 0011|1101b = 3Dh)
• No assembly um número hexadecimal deve começar
com um número decimal e terminar com um h.
14
– Ex:9Fh, 6FFAh.
Programação
Computador executa programas criados pelos
programadores. Programas = conjunto de instruções.
• Programa:
– Sequencia de instruções, cada uma das quais
especifica uma ou mais operações que o computador
deve executar.
Instruções dizem ao computador o que fazer para resolver
determinado problema.
• Elementos de uma instrução:
- Opcode: define a operação a ser realizada
- Operandos: dados necessários para realizar a operação
15
desejada.
Programação
• Normalmente, os operandos das instruções que
exigem mais do que um são separados por
virgulas (,).
• Tanto um registo, como um endereço ou um
dado imediato são operandos.
• Um dado imediato é um dado que não provém
de um registo ou de uma leitura à memória.
• Exemplos deste tipo de dados são: uma
constante, números e caracteres.
16
Programação
• Por exemplo, a instrução:
- MOV AH, 10H
• Coloca o valor 10H em AH, ao passo que:
- MOV BH, ‘G’
• Coloca o valor 71 em BH, o qual é o codigo ASCII para a
letra ‘G’. Ambas estão a usar dados imediatos. Note que
cada instrução exige dois operandos, os quais estão
separados por uma virgula.
17
Programação
• Nome ou Label – tem de começar sempre com uma letra ou um
caracter especial e nunca com um digito. Se um ponto for
utilizado, este deverá ser o primeiro caracter do nome. Um nome
não pode ter pontos, hifenes ou espaços no seu meio. Também
não é possivel usar carateres acentuados num nome.
• Normalmente utiliza-se um traço de sublinhado para tornar
nomes compostos e legiveis.
- Ex: são legais nomes como – Nome1, Salto, @3,
Escreve_Linha, etc. e ilegais nomes como - .Um, 3Letras, etc.
Mnemónico – é um conjunto de letras simbolizando uma
instrução para o processador ou uma pseudo-operação (ou
pseudo-operando). As primeiras - são instruções que o
processador deve executar e as segundas - são diretivas dadas ao
assemblador, para lhe indicar que deve reservar espaço ou outra
indicação similar.
- Ex: MOV , PUSH, RET, INT, etc
Programação
EXERCICIO – INDIVIDUAL
1- Diga em cada uma das alineas de 1 a 5:
Quantos operandos, mneomónicos, comentarios ,
dados imediatos, nome ou label, endereço possuem e
demonstre-os?
1. ;Rotina para escrever o texto no ecrã
2. ESCREVE: MOV AH, 9H ; Vamos usar DOS
3. MOV DX, [TEXTO]
4. INT 21H
5. RET ; Regressamos da rotina
2- Quando se fala que um determinado computador
que é de 8, 16, 32 ou 64 bits, a que está se referindo?
3- Considere um computador que possua uma CPU
de 16 bits. Suas instruções possuem dois operandos
do mesmo tamanho (16 bits cada), além do código
de operação.
• a) Qual é o tamanho da instrução?