Você está na página 1de 38

Assembly

Prof. Suzana Mota


*Baseado no material do Prof. Petrônio
Assembly Assembler

Linguagem de Compilador da
Programação 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.
Github: https://github.com/chrislgarry/Apollo-11

Grandes Projetos

Margaret Hamilton diretora da Divisão de


Projeto Apollo 11 – Que levou o homem Software com todo o código Assembly do
pela primeira vez a lua em 1969. Projeto 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 A = A+B
B = 20 A = A -C
C = 30
Exercício

A = 10 A = A+B
B = 20 A = A -C
C = 30

MOV A, 10
MOV B, 20
MOV C, 30

ADD A,B
SUB A,C
HLT
Instruções: Lógico Matemáticas
Exercício
A = 10 B = A*B
B = 20 C=B+C
C = 30 A=B/D
D=2
Exercício
A = 10 B = A*B
B = 20 C=B+C
C = 30 A=B/D
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
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 eD=B
Exercício
A=2
B=3
Coloque os dois na pilha
E recupere o valor da pilha
C=A eD=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

Você também pode gostar