Assembly
Prof. Suzana Mota
*Baseado no material do Prof. Petrônio
Assembly Assembler
Linguagem de
Programação
Compilador da
linguagem Assembly
Linguagens de Montagem
● Como desenvolviam sistemas os pioneiros da
computação?
● Não existiam ainda linguagens de alto nível como C,
C++ e Java.
● O desenvolvimento era feito em Assembly, ou seja, a
linguagem de máquina de um determinado processador.
Assembly
● Linguagem não estruturada
● Compilada
● Baixo Nível
● Alto Desempenho
Linguagens Não Estruturadas
● Não possuem estrutura usuais de controle.
● Conjunto de instruções de um processador
específico.
● Baixíssima Produtividade.
Grandes Projetos
Projeto Apollo 11 – Que levou o homem
pela primeira vez a lua em 1969.
Margaret Hamilton diretora da Divisão de
Software com todo o código Assembly do
Projeto Apollo 11
Github: https://github.com/chrislgarry/Apollo-11
Processador Intel 8086
● Iniciou linha de sucesso
entre processadores e foi
o precursor dos chips
atuais.
Processador
Processador
Registradores
de uso geral
Ponteiro de
Instruções
Ponteiro de
Pilha
Bits que
Indicam condições
Processador
Porta Periférico
10h Teclado
20h Monitor
30h Disco
Como funciona?
Como funciona?
Primeiro programa em Assembly
Somar dois números, sendo o valor
do primeiro 2 e do segundo 3
Primeiro programa em Assembly
Somar dois números, sendo o valor
do primeiro 2 e do segundo 3
MOV AX, 3 // Insere o valor 3 em AX
MOV BX, 2 // Insere o valor 2 em BX
ADD AX,BX // Soma BX a AX
HLT // Finaliza o programa
Simulador
https://schweigi.github.io/assembler-simulator/
Segundo programa em Assembly
Somar três números, sendo o valor
do primeiro 2 e do segundo 3 e do
terceiro 10.
Exercício
Somar três números, sendo o valor
do primeiro 2 e do segundo 3 e do
terceiro 10.
MOV A, 3 // Insere o valor 3 em AX
MOV B, 2 // Insere o valor 2 em BX
MOV C, 10 // Insere o valor 10 em CX
ADD A,B // Soma BX a AX
ADD C,A // Soma AX a CX
HLT // Encerra o programa
Instruções: Entrada e Saída
Exercício: Entrada e Saída
Somar as idades de dois usuários
Exercício: Entrada e Saída
Leias as idades de dois usuarios no
teclado e some-as
IN 10h // Ler o valor do teclado
MOV B,A // Copia o valor de AX para BX
IN 10h // Ler o valor do teclado
MOV C,A // Copia o valor de AX para CX
ADD B,C // Soma o valor de CX a BX
MOV A,B // Copia o valor de BX para AX
OUT 20h // Imprime o valor de AX
HLT // Finaliza o programa
Instruções: Lógico Matemáticas
Exercício
A = 10
B = 20
C = 30
A = A+B
A = A -C
Exercício
A = 10
B = 20
C = 30
MOV A, 10
MOV B, 20
MOV C, 30
ADD A,B
SUB A,C
HLT
A = A+B
A = A -C
Instruções: Lógico Matemáticas
Exercício
A = 10
B = 20
C = 30
D = 2
B = A*B
C = B + C
A = B / D
Exercício
A = 10
B = 20
C = 30
D = 2
MOV A, 10
MOV B, 20
MOV C, 30
MOV D, 2
MUL B
MOV B,A
ADD C,B
DIV D
HLT
B = A*B
C = B + C
A = B / D
Pilhas
A pilha é uma estrutura de
dados do tipo
LIFO - Last In, First Out
Comandos:
PUSH – Envia o dado para a
pilha
POP – Recupera o dado da
pilha
Instruções: Manipulação de Memória
Exercício
A = 2
B = 3
Coloque os dois na pilha
E recupere o valor da pilha
C = A e D = B
Exercício
A = 2
B = 3
Coloque os dois na pilha
E recupere o valor da pilha
C = A e D = B
MOV A, 3
MOV B, 2
PUSH A
PUSH B
POP B
MOV C,B
POP A
MOV D,A
HLT
Labels
●Um label (etiqueta) é um nome ou rótulo dado à
uma posição de memória.
●Dessa forma, ao invés de nos referirmos ao
endereço da memória podemos nos referir ao
label
Sub-rotinas
●Um bloco de código que faz determinada tarefa,
exatamente como um procedimento ou uma
função.
●Cada chamada de dentro do Programa Principal
causa um desvio automático para o endereço da
sub-rotina chamada.
Sub-rotinas
●O endereço de retorno da Sub-rotina é
armazenado na Pilha no endereço apontado pelo
Stack Pointer (SP).
● Comando:
CALL NOME-SUB-ROTINA
Outras Instruções
Exercício
Faça um contador de 0 a 10
Exercício
Faça um contador de 0 a 10
start:
MOV C, 0
MOV D, 10
CALL multiplica
HLT
multiplica:
INC C
.loop:
INC C
CMP c, d ; Check if end
JNZ .loop ; jump if not
RET
Exercícios
1. Faça um programa em Assembly onde:
A = 10
B = 15
C = 5
A = A + B + C
B = B – A – C
2. Faça um programa em Assembly que defina um semáforo onde:
1 = Semáforo ligado
0 = Semáforo desligado
Ligue o semáforo A
Desligue o semáforo B
Conte até 10
Desligue o semáforo A
Ligue o semáforo B
Exercícios
Enviar para:
suzana.svm@gmail.com

Linguagem Assembly

Notas do Editor

  • #28 Conceito
  • #32 Como fazer Pilhas em Assembly
  • #33 Como fazer Pilhas em Assembly
  • #34 Como fazer Pilhas em Assembly