Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Montagem
Assembly
➔
Por que usar Assembly?
➔
Por que aprender Assembly?
➔
Uso no dia a dia
➔
O que é um Sistema Computacional?
➔
Qual suas partes?
➢
Processador cental
➢
Memória Principal
➢
Unidades de Entrada e Saída
➢
Unidades de Memórias Auxiliares
Conceitos Básicos de
Assembly – Informações no
Computadores
➔
Unidades de informação
➔
Conversão de números binários para decimais
➔
Conversão de decimais para binários
➔
Sistema Hexadecimal
Conceitos Básicos de
Assembly – Métodos de
Representação de Dados
➔Representação de dados
➔ASCII
➔BCD
➔Ponto Flutuante
Conceitos Básicos de
Assembly – DEBUG
➔
Existe um programa DEBUG para Assembly?
➔
Quais comandos que podem ser executados no DEBUG?
➢
A - montar instruções simbólicas em código de máquina
➢
D – mostrar o conteúdo de uma área de memória
➢
E – entrar dados na memória, iniciando num endereço
específico
➢
G – rodar um programa executável na memória
➢
N – dar nome a um programa
➢
P – proceder, ou executar um conjunto de instruções
relacionadas
➢
Q – sair do programa debug
➢
R – mostrar o conteúdo de um ou mais registradores
➢
T – executar passo a passo as instruções
➢
U – desmontar o código de máquina em instruções simbólicas
➢
W – gravar um programa em disco
Conceitos Básicos de
Assembly – Estrutura
➔
Nas linhas de código em Linguagem Assembly há duas partes: a
primeira é o nome da instrução a ser executada; a segunda, os
parâmetros do comando.
➔
Exemplos:
➢
MOV EAX, 7770
➢
MOV EAX, EBX
➔
INC (registrador) incrementa “soma” o valor do registrador em
1
➔
Exemplos:
➢
INC EAX
➢
INC EBX
Conceitos Básicos de
Assembly – Comandos
Básicos
➔
Comandos de saltos
➔
JUMP – obtém o endereço da próxima execução baseado em
uma condição
➔
JZ, JNZ, JS, JNS, JNO <LABEL>
➔
Exemplos:
➢
Laco1:
➢
INC EAX
➢
JNO Laco1
Programação em
Linguagem de Montagem
Todo computador tem uma ISA (Instruction Set Architecture –
arquitetura do conjunto de instruções), que é um conjunto de
registradores, instruções e outras características visíveis para
seus programadores de baixo nível. Essa iSA costuma ser
denominada linguagem de máquina, embora o termo não seja
de todo exato.
●
Quando um programa em linguagem de
montagem é alimentado em um programa
denominado assembler, este o converte em um
programa binário adequado para a execução
propriamente dita. Então, ele pode ser
executado no hardware em questão.
●
Simulador, interpretador ou rastreador (debug)
Linguagem de Montagem
_EXIT =1 ! 1
_WRITE = 4 ! 2
_STDOUT = 1 ! 3
.SECT .TEXT ! 4
start: ! 5
MOV CX,de-hw ! 6
PUSH CX ! 7
PUSH hw ! 8
PUSH _STDOUT ! 9
PUSH _WRITE ! 10
SYS ! 11
ADD SP,8 ! 12
SUB CX,AX ! 13
PUSH CX ! 14
PUSH _EXIT ! 15
SYS ! 16
.SECT .DATA ! 17
hw: ! 18
.ASCII "Hello World\n" ! 19
de: .BYTE 0 ! 20
.SECT .BSS
Linguagem de Montagem
A tela do rastreador, mostrada na figura abaixo,
contém sete janelas, cada uma com informações
diferentes sobre o estado do programa binário que
está sendo executado.
Linguagem de Montagem
Z – resultado é zero
S – resultado é negativo (bit de sinal)
V – resultado gerou um excesso
C – resultado gerou um vai-um
A – vai-um auxiliar (vai-um do bit 3)
P – paridade do resultado
Registradores de ponteiros
1. O segmento de código.
2. O segmento de dados.
3. O segmento de pilha.
4. O segmento extra.
Organização da memória e
segmentos
O segmento de código contém as instruções do
programa. O conteúdo do registrador PC é sempre
interpretado como um endereço de memória no
segmento de código. Um valor de PC igual a 0 refere-
se ao endereço mais baixo no segmento de código e
não ao endereço absoluto de memória zero. O
segmento de dados contém os dados inicializados e
não inicializados para o programa.
Organização da memória e
segmentos
●
Compilar:
./as88 nome.s (não é necessário a extensão .s)
●
Executar código binário:
./s88 nome
●
Debug (debugger-tracer / rastreador):
./t88 nome
Compilação e Montagem
●
Montando o código objeto:
ld -m elf_i386 nome.o -o nome
●
Executar código binário:
./nome
CRÉDITOS
NOME DO SETOR
NOMES DAS EQUIPES/CARGOS
E-MAILS
TELEFONES