ASSEMBLYASSEMBLY
Lucas AranhaLucas Aranha
lab3@cin.ufpe.brlab3@cin.ufpe.br
AssemblyAssembly
 Assembly é uma linguagem de baixoAssembly é uma linguagem de baixo
nível, chamada freqüentemente denível, chamada freqüentemente de
“linguagem de montagem”“linguagem de montagem”
 É uma linguagem considerada difícil,É uma linguagem considerada difícil,
principalmente porque o programadorprincipalmente porque o programador
precisa conhecer a estrutura daprecisa conhecer a estrutura da
máquina para usá-lamáquina para usá-la
AssemblyAssembly
 A linguagem Assembly é atrelada àA linguagem Assembly é atrelada à
arquitetura de uma certa CPU, ouarquitetura de uma certa CPU, ou
seja, ela depende completamente doseja, ela depende completamente do
hardwarehardware
 Por essa razão Assembly não é umaPor essa razão Assembly não é uma
linguagem portável, ao contrário dalinguagem portável, ao contrário da
maioria das linguagens de alto nívelmaioria das linguagens de alto nível
Assembly - HistóriaAssembly - História
 As primeiras linguagens Assembly surgiramAs primeiras linguagens Assembly surgiram
na década de 50, na chamada segundana década de 50, na chamada segunda
geração das linguagens de programaçãogeração das linguagens de programação
 A segunda geração visou libertar osA segunda geração visou libertar os
programadores de dificuldades comoprogramadores de dificuldades como
lembrar códigos numéricos e calcularlembrar códigos numéricos e calcular
endereçosendereços
Assembly - HistóriaAssembly - História
 Assembly foi muito usada para váriasAssembly foi muito usada para várias
aplicações até os anos 80, quando foiaplicações até os anos 80, quando foi
substituída pelas linguagens de altosubstituída pelas linguagens de alto
nívelnível
 Isso aconteceu principalmente pelaIsso aconteceu principalmente pela
necessidade de aumento danecessidade de aumento da
produtividade de softwareprodutividade de software
Assembly - HistóriaAssembly - História
 Atualmente Assembly é usada paraAtualmente Assembly é usada para
manipulação direta de hardware e paramanipulação direta de hardware e para
sistemas que necessitem de performancesistemas que necessitem de performance
críticacrítica
 Device drivers, sistemas embarcados deDevice drivers, sistemas embarcados de
baixo nível e sistemas de tempo real sãobaixo nível e sistemas de tempo real são
exemplos de aplicações que usamexemplos de aplicações que usam
AssemblyAssembly
Assembly - AssemblerAssembly - Assembler
 A linguagem Assembly é de baixoA linguagem Assembly é de baixo
nível, porém ainda precisa sernível, porém ainda precisa ser
transformada na linguagem que atransformada na linguagem que a
máquina entendemáquina entende
 Quem faz isso é o Assembler. OQuem faz isso é o Assembler. O
Assembler é um utilitário que traduz oAssembler é um utilitário que traduz o
código Assembly para a máquinacódigo Assembly para a máquina
Assembly - AssemblerAssembly - Assembler
 Exemplo:Exemplo:
Antes -> mov al, 061h (Antes -> mov al, 061h (x86x86//IA-32IA-32))
Depois -> 10110000 01100001Depois -> 10110000 01100001
Assembly -Assembly -
FundamentosFundamentos
 Byte, Word e Dword são blocos deByte, Word e Dword são blocos de
dados básicos. O processadordados básicos. O processador
trabalha com o tamanho de dadostrabalha com o tamanho de dados
adequados para executar asadequados para executar as
instruçõesinstruções
 Um byte possui 8 bits, um word possuiUm byte possui 8 bits, um word possui
16 bits ou 2 bytes e um dword possui16 bits ou 2 bytes e um dword possui
32 bits ou 4 bytes32 bits ou 4 bytes
Assembly -Assembly -
FundamentosFundamentos
 Em Assembly é comum representar osEm Assembly é comum representar os
números na forma hexadecimal. Issonúmeros na forma hexadecimal. Isso
acontece porque é interessante visualizar oacontece porque é interessante visualizar o
número na forma de dadosnúmero na forma de dados
 A representação hexadecimal facilita oA representação hexadecimal facilita o
tratamento de números muito grandes etratamento de números muito grandes e
permite saber quais bits estão “ligados” oupermite saber quais bits estão “ligados” ou
“desligados”“desligados”
Assembly -Assembly -
FundamentosFundamentos
 Um algarismo hexadecimal pode serUm algarismo hexadecimal pode ser
representado por quatro algarismosrepresentado por quatro algarismos
bináriosbinários
 Logo um byte pode ser representadoLogo um byte pode ser representado
como dois números hexa, um wordcomo dois números hexa, um word
como quatro números hexa e umcomo quatro números hexa e um
dword como oito números hexadword como oito números hexa
Assembly -Assembly -
FundamentosFundamentos
BinárioBinário HexaHexa DecimalDecimal TipoTipo
1000000010000000 8080 128128 bytebyte
10000000000001000000000000
001001
80018001 32.76932.769 wordword
11111111111111111111111111
111111
FFFFFFFF 65.53565.535 wordword
11111111111111111111111111
11111111111111111111111111
111111111111
FFFFFFFFFFFFFF
FF
4.294.967.4.294.967.
295295
dworddword
Assembly -Assembly -
RegistradoresRegistradores
 Registradores são áreas especiaisRegistradores são áreas especiais
dentro do processador que são maisdentro do processador que são mais
rápidas que operandos de memória.rápidas que operandos de memória.
 Como vamos trabalhar com oComo vamos trabalhar com o
processador Intel, existem apenas 8processador Intel, existem apenas 8
registradores de uso geralregistradores de uso geral
Assembly -Assembly -
RegistradoresRegistradores
 São eles:São eles:
EAX, EBX, ECX, EDX, ESI, EDI, ESP,EAX, EBX, ECX, EDX, ESI, EDI, ESP,
EBPEBP
 Os registradores ESP e EBP sóOs registradores ESP e EBP só
devem ser usados preferencialmentedevem ser usados preferencialmente
para trabalhar com a pilhapara trabalhar com a pilha
Assembly -Assembly -
RegistradoresRegistradores
 Nos registradores de uso geral (Exceto ESINos registradores de uso geral (Exceto ESI
e EDI) é permitido usar três modos dee EDI) é permitido usar três modos de
acesso diferentes, ilustrados pela figuraacesso diferentes, ilustrados pela figura
abaixo:abaixo:
Assembly -Assembly -
RegistradoresRegistradores
 EAX -> Chamado de “Acumulador”,EAX -> Chamado de “Acumulador”,
geralmente é usado para operaçõesgeralmente é usado para operações
aritméticas e para guardar resultadosaritméticas e para guardar resultados
 EBX -> Chamado de “Base”,EBX -> Chamado de “Base”,
geralmente é usado para armazenargeralmente é usado para armazenar
dados em geral e para endereços dedados em geral e para endereços de
memóriamemória
Assembly -Assembly -
RegistradoresRegistradores
 ECX -> Chamado de “Contador”,ECX -> Chamado de “Contador”,
como o nome já diz é usado comocomo o nome já diz é usado como
contador, principalmente paracontador, principalmente para
controlar loopscontrolar loops
 EDX -> Chamado de registrador deEDX -> Chamado de registrador de
dados, é usado geralmente paradados, é usado geralmente para
guardar o endereço de uma variávelguardar o endereço de uma variável
na memóriana memória
Assembly -Assembly -
RegistradoresRegistradores
 ESI e EDI -> Respectivamente “SourceESI e EDI -> Respectivamente “Source
Index” e “Destination Index”, são menosIndex” e “Destination Index”, são menos
usados do que os registradores descritosusados do que os registradores descritos
anteriormente. Geralmente usa-se ESI eanteriormente. Geralmente usa-se ESI e
EDI para movimentação de dados, com ESIEDI para movimentação de dados, com ESI
guardando o endereço fonte de umaguardando o endereço fonte de uma
variável e EDI guardando o endereçovariável e EDI guardando o endereço
destino. Não podem ser acessados emdestino. Não podem ser acessados em
nível de Byte.nível de Byte.
Assembly -Assembly -
RegistradoresRegistradores
 ESP e EBP -> RespectivamenteESP e EBP -> Respectivamente
“Stack Pointer” e “Base Pointer”, só“Stack Pointer” e “Base Pointer”, só
devem ser usados para manipulaçãodevem ser usados para manipulação
da pilha. O Registrador ESP guarda ada pilha. O Registrador ESP guarda a
referência para o topo da pilha,referência para o topo da pilha,
enquanto o registrador EBP é usadoenquanto o registrador EBP é usado
para “andar” pela pilhapara “andar” pela pilha
Assembly -Assembly -
RegistradoresRegistradores
 Entre os registradores que não são de usoEntre os registradores que não são de uso
geral, existe um registrador muito relevantegeral, existe um registrador muito relevante
para o programador, o registrador flagspara o programador, o registrador flags
 Através do registrador flags podemos saberAtravés do registrador flags podemos saber
se dois valores são iguais, se um é maiorse dois valores são iguais, se um é maior
que outro ou se um valor é negativo, alémque outro ou se um valor é negativo, além
de outras informaçõesde outras informações
Assembly -Assembly -
RegistradoresRegistradores
 O => OverflowO => Overflow
 D => DirectionD => Direction
 I => Interrupt EnableI => Interrupt Enable
 T => TrapT => Trap
 S => SignalS => Signal
Assembly -Assembly -
RegistradoresRegistradores
 Z => ZeroZ => Zero
 A => Auxiliar CarryA => Auxiliar Carry
 P => ParityP => Parity
 C => CarryC => Carry
Assembly - PilhaAssembly - Pilha
 Todos os programas fazem uso da pilha emTodos os programas fazem uso da pilha em
tempo de execução, porém nas linguagenstempo de execução, porém nas linguagens
de alto nível não é preciso se preocuparde alto nível não é preciso se preocupar
com o funcionamento da pilhacom o funcionamento da pilha
 Já em Assembly, o programador precisaJá em Assembly, o programador precisa
saber trabalhar com a pilha, pois ela é umasaber trabalhar com a pilha, pois ela é uma
ferramenta importanteferramenta importante
Assembly - PilhaAssembly - Pilha
 A pilha é uma área de dados existenteA pilha é uma área de dados existente
na memória em tempo de execução,na memória em tempo de execução,
na qual seu programa podena qual seu programa pode
armazenar dados temporariamentearmazenar dados temporariamente
• O processador é rápido no acesso àO processador é rápido no acesso à
pilha, tanto para escrever quanto parapilha, tanto para escrever quanto para
lerler
Assembly - PilhaAssembly - Pilha
 As principais funcionalidades da pilha são:As principais funcionalidades da pilha são:
- Preservar valores de registradores em- Preservar valores de registradores em
funçõesfunções
- Preservar dados da memória- Preservar dados da memória
- Transferir dados sem usar registradores- Transferir dados sem usar registradores
- Reverter a ordem de dados- Reverter a ordem de dados
- Chamar outras funções e depois retornar- Chamar outras funções e depois retornar
- Passar parâmetros para funções- Passar parâmetros para funções
Assembly - InstruçõesAssembly - Instruções
 Movimentação de dados:Movimentação de dados:
- mov destino, fonte (Sintaxe Intel)- mov destino, fonte (Sintaxe Intel)
- mov fonte, destino (Sintaxe AT&T)- mov fonte, destino (Sintaxe AT&T)
 Obs: Nas instruções AT&T, é necessárioObs: Nas instruções AT&T, é necessário
informar o tamanho do dado com que seinformar o tamanho do dado com que se
está trabalhandoestá trabalhando
Assembly - InstruçõesAssembly - Instruções
Intel AT&T
mov eax, 1 movl $1, %eax
mov ebx, 0ffh movl $0xff, %ebx
mov eax, [ebx] movl (%ebx), %eax
mov eax, [ebx+3] movl 3(%ebx), %eax
Assembly - InstruçõesAssembly - Instruções
 Instrução de soma:Instrução de soma:
- add destino, fonte (Sintaxe Intel)- add destino, fonte (Sintaxe Intel)
Exemplo: add eax,[ebx+ecx]Exemplo: add eax,[ebx+ecx]
- add fonte, destino (Sintaxe AT&T)- add fonte, destino (Sintaxe AT&T)
Exemplo: addl (%ebx,%ecx),%eaxExemplo: addl (%ebx,%ecx),%eax
Assembly - InstruçõesAssembly - Instruções
 Instrução de subtração:Instrução de subtração:
- sub destino, fonte (Sintaxe Intel)- sub destino, fonte (Sintaxe Intel)
Exemplo: sub eax,ebxExemplo: sub eax,ebx
- sub fonte, destino (Sintaxe AT&T)- sub fonte, destino (Sintaxe AT&T)
Exemplo: subl %ebx,%eaxExemplo: subl %ebx,%eax
Assembly - InstruçõesAssembly - Instruções
 Instruções de operações lógicas:Instruções de operações lógicas:
- and/or/xor destino, fonte (Sintaxe Intel)- and/or/xor destino, fonte (Sintaxe Intel)
Exemplo: and ax,bxExemplo: and ax,bx
- and/or/xor fonte, destino (Sintaxe AT&T)- and/or/xor fonte, destino (Sintaxe AT&T)
Exemplo: andw %bx,%axExemplo: andw %bx,%ax
Assembly - IntruçõesAssembly - Intruções
 Instrução de comparação:Instrução de comparação:
- cmp operando1, operando2 (Sintaxe- cmp operando1, operando2 (Sintaxe
Intel)Intel)
Exemplo: cmp 08h, eaxExemplo: cmp 08h, eax
- cmp operando1, operando2 (Sintaxe- cmp operando1, operando2 (Sintaxe
AT&T)AT&T)
Exemplo: cmp $0x8, %eaxExemplo: cmp $0x8, %eax
Assembly - InstruçõesAssembly - Instruções
 Instruções de jump:Instruções de jump:
““Pulo” incondicional:Pulo” incondicional:
- jmp [100] (Sintaxe Intel)- jmp [100] (Sintaxe Intel)
- jmp eax (Sintaxe Intel)- jmp eax (Sintaxe Intel)
- jmp *100 (Sintaxe AT&T)- jmp *100 (Sintaxe AT&T)
- jmp *%eax (Sintaxe AT&T)- jmp *%eax (Sintaxe AT&T)
Assembly - InstruçõesAssembly - Instruções
““Pulo” condicional:Pulo” condicional:
- je [100] (Sintaxe Intel)- je [100] (Sintaxe Intel)
- jne eax (Sintaxe Intel)- jne eax (Sintaxe Intel)
- je *100 (Sintaxe AT&T)- je *100 (Sintaxe AT&T)
- jne *%eax (Sintaxe AT&T)- jne *%eax (Sintaxe AT&T)
Assembly - InstruçõesAssembly - Instruções
 Instruções de manipulação da pilha:Instruções de manipulação da pilha:
- push eax (Sintaxe Intel)- push eax (Sintaxe Intel)
- push %eax (Sintaxe AT&T)- push %eax (Sintaxe AT&T)
- pop eax (Sintaxe Intel)- pop eax (Sintaxe Intel)
- pop %eax (Sintaxe AT&T)- pop %eax (Sintaxe AT&T)
Assembly - SeçõesAssembly - Seções
 O código Assembly é dividido em seções.O código Assembly é dividido em seções.
As principais seções no Linux são:As principais seções no Linux são:
- section .data -> A seção .data é usada para- section .data -> A seção .data é usada para
declarar variáveis inicializadas. Porémdeclarar variáveis inicializadas. Porém
essas “variáveis” não mudam no decorreressas “variáveis” não mudam no decorrer
do programa. Essa seção é usadado programa. Essa seção é usada
geralmente para definir nomes de arquivos,geralmente para definir nomes de arquivos,
constantes, entre outros.constantes, entre outros.
Assembly - SeçõesAssembly - Seções
- Exemplo:- Exemplo:
section .datasection .data
mensagem: db 'Hello world!'mensagem: db 'Hello world!'
msglength: equ 12msglength: equ 12
Assembly - SeçõesAssembly - Seções
- section .bss -> É a seção usada para- section .bss -> É a seção usada para
declarar as variáveis do programadeclarar as variáveis do programa
- Exemplo:- Exemplo:
section .bsssection .bss
nomearq: resb 230 ;Reserva 230 bytesnomearq: resb 230 ;Reserva 230 bytes
numero: resb 1 ;Reserva 1 bytenumero: resb 1 ;Reserva 1 byte
array: resw 10 ;Reserva 10 wordsarray: resw 10 ;Reserva 10 words
Assembly - SeçõesAssembly - Seções
- section .text -> Essa é a seção onde o código do- section .text -> Essa é a seção onde o código do
programa é escritoprograma é escrito
- Exemplo:- Exemplo:
section .textsection .text
global _startglobal _start
_start:_start: .. . .. .
.. . .. .
.. . .. .
Assembly – InterrupçõesAssembly – Interrupções
 Interrupções são chamadas aoInterrupções são chamadas ao
processador requisitando um serviçoprocessador requisitando um serviço
 O nome interrupção vem do fato deO nome interrupção vem do fato de
que o processador tem sua atividadeque o processador tem sua atividade
atual interrompida quando recebe umatual interrompida quando recebe um
sinal de chamadasinal de chamada
Assembly - InterrupçõesAssembly - Interrupções
 Quando isso acontece, o processador salvaQuando isso acontece, o processador salva
o processo atual e executa a rotina daquelao processo atual e executa a rotina daquela
interrupçãointerrupção
 Após a execução da rotina, que geralmenteApós a execução da rotina, que geralmente
está armazenada em uma tabela naestá armazenada em uma tabela na
memória RAM, o processador retorna aomemória RAM, o processador retorna ao
processo em que estava anteriormenteprocesso em que estava anteriormente
Assembly - InterrupçõesAssembly - Interrupções
 Para se chamar uma interrupção no Linux,Para se chamar uma interrupção no Linux,
é feito o seguinte processo:é feito o seguinte processo:
- Coloca-se o número da interrupção no- Coloca-se o número da interrupção no
registrador EAXregistrador EAX
- Coloca-se os argumentos requeridos pela- Coloca-se os argumentos requeridos pela
interrupção nos devidos registradoresinterrupção nos devidos registradores
- Chama-se a interrupção- Chama-se a interrupção
 O resultado geralmente será retornado emO resultado geralmente será retornado em
EAXEAX
Assembly - InterrupçõesAssembly - Interrupções
- Exemplo (Sintaxe Intel):- Exemplo (Sintaxe Intel):
mov eax,1 ; Interrupção Exitmov eax,1 ; Interrupção Exit
mov ebx,0 ; Argumento em EBXmov ebx,0 ; Argumento em EBX
int 80h ; Chamada da interrupçãoint 80h ; Chamada da interrupção
- Exemplo (Sintaxe AT&T):- Exemplo (Sintaxe AT&T):
movl $1,%eaxmovl $1,%eax
movl $0, %ebxmovl $0, %ebx
int $0x80int $0x80
Assembly - ExemploAssembly - Exemplo
 Hello World (Sintaxe Intel)Hello World (Sintaxe Intel)
section .datasection .data
hello: db 'Hello world!',10 ; A string 'Hello World!‘ e um linefeedhello: db 'Hello world!',10 ; A string 'Hello World!‘ e um linefeed
helloLenght: equ $-hello ; Tamanho da string hellohelloLenght: equ $-hello ; Tamanho da string hello
section .textsection .text
global _startglobal _start
_start:_start:
mov eax,4 ; Interrupção de escrita (sys_write)mov eax,4 ; Interrupção de escrita (sys_write)
mov ebx,1 ; Argumento que indica onde a string vai ser escritamov ebx,1 ; Argumento que indica onde a string vai ser escrita
mov ecx,hello ; Argumento que indica o endereço da stringmov ecx,hello ; Argumento que indica o endereço da string
mov edx,helloLenght ; Argumento que indica o tamanho da stringmov edx,helloLenght ; Argumento que indica o tamanho da string
int 80h ; Chamada da interrupçãoint 80h ; Chamada da interrupção
mov eax,1 ; Interrupção exit (sys_exit)mov eax,1 ; Interrupção exit (sys_exit)
mov ebx,0 ; Argumento da interrupçãomov ebx,0 ; Argumento da interrupção
int 80h ; Chamada da interrupçãoint 80h ; Chamada da interrupção
Assembly - ExemploAssembly - Exemplo
 Hello World (Sintaxe AT&T)Hello World (Sintaxe AT&T)
.data.data
hello: .string "Hello World!n"hello: .string "Hello World!n"
.text.text
.globl main.globl main
main:main:
mov $4,%eaxmov $4,%eax
mov $1,%ebxmov $1,%ebx
mov $hello,%ecxmov $hello,%ecx
mov $13,%edxmov $13,%edx
int $0x80int $0x80
mov $1,%eaxmov $1,%eax
mov $0,%ebxmov $0,%ebx
int $0x80int $0x80
Assembly – ReferênciasAssembly – Referências
www.cin.ufpe.br/~lab3www.cin.ufpe.br/~lab3
No meu public estarei atualizando oNo meu public estarei atualizando o
arquivo “Links-if677.txt” sempre quearquivo “Links-if677.txt” sempre que
encontrar referências interessantesencontrar referências interessantes

Mais conteúdo relacionado

PPT
Ppt informática básica sistema operacioanal
PPTX
Aula 3: Introdução a sistema de arquivos
PDF
Linguagem assembly
PPTX
Memória RAM
PPT
OPERATING SYSTEMS DESIGN AND IMPLEMENTATION
PPT
ApresentaçãO Tipos De Memorias
PDF
RTOS - Real Time Operating Systems
PDF
Análise e Projeto de Sistemas
Ppt informática básica sistema operacioanal
Aula 3: Introdução a sistema de arquivos
Linguagem assembly
Memória RAM
OPERATING SYSTEMS DESIGN AND IMPLEMENTATION
ApresentaçãO Tipos De Memorias
RTOS - Real Time Operating Systems
Análise e Projeto de Sistemas

Mais procurados (20)

PPTX
3 placa mãe
PPTX
Pseudoparalelismo
PDF
RTOS for Embedded System Design
PDF
Sistemas Operacionais - Aula 9 (Gerencia do Processador)
PPTX
INTERRUPTS
PPT
Assembly Language Lecture 1
PPT
Chapter 2 - Computer Evolution and Performance
PDF
Algoritmos e Programação: Estruturas de repetição
PPT
Aula de hardware
PPS
Sistema Operacional
PDF
Sistemas Computacionais - Aula 01 - Apresentação
PPTX
SCSI(small computer system interface)
PDF
Exercicios hardware comentado
PPT
Lecture 2
PPT
Unidade 1.4. os dispositivos de entrada e saida mais comuns
PDF
Programação Orientada A Objectos (Poo)
PPTX
EMBEDDED SYSTEMS SYBSC IT SEM IV UNIT V Embedded Systems Integrated Developme...
PPTX
Computer architecture memory system
PDF
Formatando o computador
PPTX
Placas de expansão
3 placa mãe
Pseudoparalelismo
RTOS for Embedded System Design
Sistemas Operacionais - Aula 9 (Gerencia do Processador)
INTERRUPTS
Assembly Language Lecture 1
Chapter 2 - Computer Evolution and Performance
Algoritmos e Programação: Estruturas de repetição
Aula de hardware
Sistema Operacional
Sistemas Computacionais - Aula 01 - Apresentação
SCSI(small computer system interface)
Exercicios hardware comentado
Lecture 2
Unidade 1.4. os dispositivos de entrada e saida mais comuns
Programação Orientada A Objectos (Poo)
EMBEDDED SYSTEMS SYBSC IT SEM IV UNIT V Embedded Systems Integrated Developme...
Computer architecture memory system
Formatando o computador
Placas de expansão
Anúncio

Semelhante a Assembly (20)

PDF
Assembly PDFs Eduardo Cj como usar o assembly
PPTX
Arquitetura de Computadores: Assembly
PPTX
Assemblyparte1 140320111308-phpapp02
PDF
Assembly para pc-25paginas
PPTX
Módulo 5 Arquitetura de Computadores
PPTX
Programação de Microprocessadores
PDF
05 - linguagemAssemblyIntrodução-Linguagem de maquina
PDF
assembly.pdf
PDF
Cool 3 assembly para linux
PDF
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
PPT
8085 2
PPTX
Linguagem Assembly
DOCX
A linguagem assembly
DOC
Guia rápido mips (1)
PDF
Microcontroladores: Lenguaje de ensamblador de microcontroladores AVR
PDF
Oc2 cap03
PPT
introdução a algoritmos - logica e programação representação
PPT
Processador MIPS Arquitetura e Assembly WANG
PDF
C. Bombardelli - Desassembler routine in text mode built in assembly language
PDF
paradigmas_de_programacao.pdf
Assembly PDFs Eduardo Cj como usar o assembly
Arquitetura de Computadores: Assembly
Assemblyparte1 140320111308-phpapp02
Assembly para pc-25paginas
Módulo 5 Arquitetura de Computadores
Programação de Microprocessadores
05 - linguagemAssemblyIntrodução-Linguagem de maquina
assembly.pdf
Cool 3 assembly para linux
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
8085 2
Linguagem Assembly
A linguagem assembly
Guia rápido mips (1)
Microcontroladores: Lenguaje de ensamblador de microcontroladores AVR
Oc2 cap03
introdução a algoritmos - logica e programação representação
Processador MIPS Arquitetura e Assembly WANG
C. Bombardelli - Desassembler routine in text mode built in assembly language
paradigmas_de_programacao.pdf
Anúncio

Último (20)

PPT
Aula Ciência e Tecnologia dos Materiais - Metais e ligas não ferrosas
DOCX
Ordem de Serviço NR 01 - SILVIO.docxosj
PPTX
Movimento Circular Uniforme..pptx,.......
PPTX
(7) NR10 - SEP - Liberação de instalação para serviços.pptx
PPTX
Cultivo de Cebola e tratos culturais.pptx
DOCX
Cópia de Ordem de Serviço NR 01- Leonardo.docx
DOC
PPRA contru+º+úo civil 3. Construção civil
PPT
fundamentos ondulatorios 2 serie.p....pt
PDF
Aspectos Tecnicos e Legais da Insalubridade.pdf
PPTX
PILOTAGEM-SISTEMAS DE GESTÃO DA CADEIA DE SUPLIMENTOS
PPTX
APOSTILA DE AGENTE DE INSPEÇÃONBR 5426.pptx
PPT
Parking Reception Building Project Presentation.ppt
PPT
Primeiros Socorros e Saúde Ocupacional Ferrosos Sul.ppt
PPTX
AGROECOLOGIA sistemas de ecologia renovable
PDF
Poluição sonora xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PPTX
Reciclagem do Munck.pptxdddddddddddddddd
PPTX
ENGENHARIA DE GESTÃO LOGÍSTICA E DOS TRANSPORTES.pptx
PPT
Aula-Completação de poços de petroleo!
PPT
22a Aula Manejo de Plantas Daninhas(1).ppt
DOC
PPRA Construção civil Construção civil
Aula Ciência e Tecnologia dos Materiais - Metais e ligas não ferrosas
Ordem de Serviço NR 01 - SILVIO.docxosj
Movimento Circular Uniforme..pptx,.......
(7) NR10 - SEP - Liberação de instalação para serviços.pptx
Cultivo de Cebola e tratos culturais.pptx
Cópia de Ordem de Serviço NR 01- Leonardo.docx
PPRA contru+º+úo civil 3. Construção civil
fundamentos ondulatorios 2 serie.p....pt
Aspectos Tecnicos e Legais da Insalubridade.pdf
PILOTAGEM-SISTEMAS DE GESTÃO DA CADEIA DE SUPLIMENTOS
APOSTILA DE AGENTE DE INSPEÇÃONBR 5426.pptx
Parking Reception Building Project Presentation.ppt
Primeiros Socorros e Saúde Ocupacional Ferrosos Sul.ppt
AGROECOLOGIA sistemas de ecologia renovable
Poluição sonora xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Reciclagem do Munck.pptxdddddddddddddddd
ENGENHARIA DE GESTÃO LOGÍSTICA E DOS TRANSPORTES.pptx
Aula-Completação de poços de petroleo!
22a Aula Manejo de Plantas Daninhas(1).ppt
PPRA Construção civil Construção civil

Assembly

  • 2. AssemblyAssembly  Assembly é uma linguagem de baixoAssembly é uma linguagem de baixo nível, chamada freqüentemente denível, chamada freqüentemente de “linguagem de montagem”“linguagem de montagem”  É uma linguagem considerada difícil,É uma linguagem considerada difícil, principalmente porque o programadorprincipalmente porque o programador precisa conhecer a estrutura daprecisa conhecer a estrutura da máquina para usá-lamáquina para usá-la
  • 3. AssemblyAssembly  A linguagem Assembly é atrelada àA linguagem Assembly é atrelada à arquitetura de uma certa CPU, ouarquitetura de uma certa CPU, ou seja, ela depende completamente doseja, ela depende completamente do hardwarehardware  Por essa razão Assembly não é umaPor essa razão Assembly não é uma linguagem portável, ao contrário dalinguagem portável, ao contrário da maioria das linguagens de alto nívelmaioria das linguagens de alto nível
  • 4. Assembly - HistóriaAssembly - História  As primeiras linguagens Assembly surgiramAs primeiras linguagens Assembly surgiram na década de 50, na chamada segundana década de 50, na chamada segunda geração das linguagens de programaçãogeração das linguagens de programação  A segunda geração visou libertar osA segunda geração visou libertar os programadores de dificuldades comoprogramadores de dificuldades como lembrar códigos numéricos e calcularlembrar códigos numéricos e calcular endereçosendereços
  • 5. Assembly - HistóriaAssembly - História  Assembly foi muito usada para váriasAssembly foi muito usada para várias aplicações até os anos 80, quando foiaplicações até os anos 80, quando foi substituída pelas linguagens de altosubstituída pelas linguagens de alto nívelnível  Isso aconteceu principalmente pelaIsso aconteceu principalmente pela necessidade de aumento danecessidade de aumento da produtividade de softwareprodutividade de software
  • 6. Assembly - HistóriaAssembly - História  Atualmente Assembly é usada paraAtualmente Assembly é usada para manipulação direta de hardware e paramanipulação direta de hardware e para sistemas que necessitem de performancesistemas que necessitem de performance críticacrítica  Device drivers, sistemas embarcados deDevice drivers, sistemas embarcados de baixo nível e sistemas de tempo real sãobaixo nível e sistemas de tempo real são exemplos de aplicações que usamexemplos de aplicações que usam AssemblyAssembly
  • 7. Assembly - AssemblerAssembly - Assembler  A linguagem Assembly é de baixoA linguagem Assembly é de baixo nível, porém ainda precisa sernível, porém ainda precisa ser transformada na linguagem que atransformada na linguagem que a máquina entendemáquina entende  Quem faz isso é o Assembler. OQuem faz isso é o Assembler. O Assembler é um utilitário que traduz oAssembler é um utilitário que traduz o código Assembly para a máquinacódigo Assembly para a máquina
  • 8. Assembly - AssemblerAssembly - Assembler  Exemplo:Exemplo: Antes -> mov al, 061h (Antes -> mov al, 061h (x86x86//IA-32IA-32)) Depois -> 10110000 01100001Depois -> 10110000 01100001
  • 9. Assembly -Assembly - FundamentosFundamentos  Byte, Word e Dword são blocos deByte, Word e Dword são blocos de dados básicos. O processadordados básicos. O processador trabalha com o tamanho de dadostrabalha com o tamanho de dados adequados para executar asadequados para executar as instruçõesinstruções  Um byte possui 8 bits, um word possuiUm byte possui 8 bits, um word possui 16 bits ou 2 bytes e um dword possui16 bits ou 2 bytes e um dword possui 32 bits ou 4 bytes32 bits ou 4 bytes
  • 10. Assembly -Assembly - FundamentosFundamentos  Em Assembly é comum representar osEm Assembly é comum representar os números na forma hexadecimal. Issonúmeros na forma hexadecimal. Isso acontece porque é interessante visualizar oacontece porque é interessante visualizar o número na forma de dadosnúmero na forma de dados  A representação hexadecimal facilita oA representação hexadecimal facilita o tratamento de números muito grandes etratamento de números muito grandes e permite saber quais bits estão “ligados” oupermite saber quais bits estão “ligados” ou “desligados”“desligados”
  • 11. Assembly -Assembly - FundamentosFundamentos  Um algarismo hexadecimal pode serUm algarismo hexadecimal pode ser representado por quatro algarismosrepresentado por quatro algarismos bináriosbinários  Logo um byte pode ser representadoLogo um byte pode ser representado como dois números hexa, um wordcomo dois números hexa, um word como quatro números hexa e umcomo quatro números hexa e um dword como oito números hexadword como oito números hexa
  • 12. Assembly -Assembly - FundamentosFundamentos BinárioBinário HexaHexa DecimalDecimal TipoTipo 1000000010000000 8080 128128 bytebyte 10000000000001000000000000 001001 80018001 32.76932.769 wordword 11111111111111111111111111 111111 FFFFFFFF 65.53565.535 wordword 11111111111111111111111111 11111111111111111111111111 111111111111 FFFFFFFFFFFFFF FF 4.294.967.4.294.967. 295295 dworddword
  • 13. Assembly -Assembly - RegistradoresRegistradores  Registradores são áreas especiaisRegistradores são áreas especiais dentro do processador que são maisdentro do processador que são mais rápidas que operandos de memória.rápidas que operandos de memória.  Como vamos trabalhar com oComo vamos trabalhar com o processador Intel, existem apenas 8processador Intel, existem apenas 8 registradores de uso geralregistradores de uso geral
  • 14. Assembly -Assembly - RegistradoresRegistradores  São eles:São eles: EAX, EBX, ECX, EDX, ESI, EDI, ESP,EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBPEBP  Os registradores ESP e EBP sóOs registradores ESP e EBP só devem ser usados preferencialmentedevem ser usados preferencialmente para trabalhar com a pilhapara trabalhar com a pilha
  • 15. Assembly -Assembly - RegistradoresRegistradores  Nos registradores de uso geral (Exceto ESINos registradores de uso geral (Exceto ESI e EDI) é permitido usar três modos dee EDI) é permitido usar três modos de acesso diferentes, ilustrados pela figuraacesso diferentes, ilustrados pela figura abaixo:abaixo:
  • 16. Assembly -Assembly - RegistradoresRegistradores  EAX -> Chamado de “Acumulador”,EAX -> Chamado de “Acumulador”, geralmente é usado para operaçõesgeralmente é usado para operações aritméticas e para guardar resultadosaritméticas e para guardar resultados  EBX -> Chamado de “Base”,EBX -> Chamado de “Base”, geralmente é usado para armazenargeralmente é usado para armazenar dados em geral e para endereços dedados em geral e para endereços de memóriamemória
  • 17. Assembly -Assembly - RegistradoresRegistradores  ECX -> Chamado de “Contador”,ECX -> Chamado de “Contador”, como o nome já diz é usado comocomo o nome já diz é usado como contador, principalmente paracontador, principalmente para controlar loopscontrolar loops  EDX -> Chamado de registrador deEDX -> Chamado de registrador de dados, é usado geralmente paradados, é usado geralmente para guardar o endereço de uma variávelguardar o endereço de uma variável na memóriana memória
  • 18. Assembly -Assembly - RegistradoresRegistradores  ESI e EDI -> Respectivamente “SourceESI e EDI -> Respectivamente “Source Index” e “Destination Index”, são menosIndex” e “Destination Index”, são menos usados do que os registradores descritosusados do que os registradores descritos anteriormente. Geralmente usa-se ESI eanteriormente. Geralmente usa-se ESI e EDI para movimentação de dados, com ESIEDI para movimentação de dados, com ESI guardando o endereço fonte de umaguardando o endereço fonte de uma variável e EDI guardando o endereçovariável e EDI guardando o endereço destino. Não podem ser acessados emdestino. Não podem ser acessados em nível de Byte.nível de Byte.
  • 19. Assembly -Assembly - RegistradoresRegistradores  ESP e EBP -> RespectivamenteESP e EBP -> Respectivamente “Stack Pointer” e “Base Pointer”, só“Stack Pointer” e “Base Pointer”, só devem ser usados para manipulaçãodevem ser usados para manipulação da pilha. O Registrador ESP guarda ada pilha. O Registrador ESP guarda a referência para o topo da pilha,referência para o topo da pilha, enquanto o registrador EBP é usadoenquanto o registrador EBP é usado para “andar” pela pilhapara “andar” pela pilha
  • 20. Assembly -Assembly - RegistradoresRegistradores  Entre os registradores que não são de usoEntre os registradores que não são de uso geral, existe um registrador muito relevantegeral, existe um registrador muito relevante para o programador, o registrador flagspara o programador, o registrador flags  Através do registrador flags podemos saberAtravés do registrador flags podemos saber se dois valores são iguais, se um é maiorse dois valores são iguais, se um é maior que outro ou se um valor é negativo, alémque outro ou se um valor é negativo, além de outras informaçõesde outras informações
  • 21. Assembly -Assembly - RegistradoresRegistradores  O => OverflowO => Overflow  D => DirectionD => Direction  I => Interrupt EnableI => Interrupt Enable  T => TrapT => Trap  S => SignalS => Signal
  • 22. Assembly -Assembly - RegistradoresRegistradores  Z => ZeroZ => Zero  A => Auxiliar CarryA => Auxiliar Carry  P => ParityP => Parity  C => CarryC => Carry
  • 23. Assembly - PilhaAssembly - Pilha  Todos os programas fazem uso da pilha emTodos os programas fazem uso da pilha em tempo de execução, porém nas linguagenstempo de execução, porém nas linguagens de alto nível não é preciso se preocuparde alto nível não é preciso se preocupar com o funcionamento da pilhacom o funcionamento da pilha  Já em Assembly, o programador precisaJá em Assembly, o programador precisa saber trabalhar com a pilha, pois ela é umasaber trabalhar com a pilha, pois ela é uma ferramenta importanteferramenta importante
  • 24. Assembly - PilhaAssembly - Pilha  A pilha é uma área de dados existenteA pilha é uma área de dados existente na memória em tempo de execução,na memória em tempo de execução, na qual seu programa podena qual seu programa pode armazenar dados temporariamentearmazenar dados temporariamente • O processador é rápido no acesso àO processador é rápido no acesso à pilha, tanto para escrever quanto parapilha, tanto para escrever quanto para lerler
  • 25. Assembly - PilhaAssembly - Pilha  As principais funcionalidades da pilha são:As principais funcionalidades da pilha são: - Preservar valores de registradores em- Preservar valores de registradores em funçõesfunções - Preservar dados da memória- Preservar dados da memória - Transferir dados sem usar registradores- Transferir dados sem usar registradores - Reverter a ordem de dados- Reverter a ordem de dados - Chamar outras funções e depois retornar- Chamar outras funções e depois retornar - Passar parâmetros para funções- Passar parâmetros para funções
  • 26. Assembly - InstruçõesAssembly - Instruções  Movimentação de dados:Movimentação de dados: - mov destino, fonte (Sintaxe Intel)- mov destino, fonte (Sintaxe Intel) - mov fonte, destino (Sintaxe AT&T)- mov fonte, destino (Sintaxe AT&T)  Obs: Nas instruções AT&T, é necessárioObs: Nas instruções AT&T, é necessário informar o tamanho do dado com que seinformar o tamanho do dado com que se está trabalhandoestá trabalhando
  • 27. Assembly - InstruçõesAssembly - Instruções Intel AT&T mov eax, 1 movl $1, %eax mov ebx, 0ffh movl $0xff, %ebx mov eax, [ebx] movl (%ebx), %eax mov eax, [ebx+3] movl 3(%ebx), %eax
  • 28. Assembly - InstruçõesAssembly - Instruções  Instrução de soma:Instrução de soma: - add destino, fonte (Sintaxe Intel)- add destino, fonte (Sintaxe Intel) Exemplo: add eax,[ebx+ecx]Exemplo: add eax,[ebx+ecx] - add fonte, destino (Sintaxe AT&T)- add fonte, destino (Sintaxe AT&T) Exemplo: addl (%ebx,%ecx),%eaxExemplo: addl (%ebx,%ecx),%eax
  • 29. Assembly - InstruçõesAssembly - Instruções  Instrução de subtração:Instrução de subtração: - sub destino, fonte (Sintaxe Intel)- sub destino, fonte (Sintaxe Intel) Exemplo: sub eax,ebxExemplo: sub eax,ebx - sub fonte, destino (Sintaxe AT&T)- sub fonte, destino (Sintaxe AT&T) Exemplo: subl %ebx,%eaxExemplo: subl %ebx,%eax
  • 30. Assembly - InstruçõesAssembly - Instruções  Instruções de operações lógicas:Instruções de operações lógicas: - and/or/xor destino, fonte (Sintaxe Intel)- and/or/xor destino, fonte (Sintaxe Intel) Exemplo: and ax,bxExemplo: and ax,bx - and/or/xor fonte, destino (Sintaxe AT&T)- and/or/xor fonte, destino (Sintaxe AT&T) Exemplo: andw %bx,%axExemplo: andw %bx,%ax
  • 31. Assembly - IntruçõesAssembly - Intruções  Instrução de comparação:Instrução de comparação: - cmp operando1, operando2 (Sintaxe- cmp operando1, operando2 (Sintaxe Intel)Intel) Exemplo: cmp 08h, eaxExemplo: cmp 08h, eax - cmp operando1, operando2 (Sintaxe- cmp operando1, operando2 (Sintaxe AT&T)AT&T) Exemplo: cmp $0x8, %eaxExemplo: cmp $0x8, %eax
  • 32. Assembly - InstruçõesAssembly - Instruções  Instruções de jump:Instruções de jump: ““Pulo” incondicional:Pulo” incondicional: - jmp [100] (Sintaxe Intel)- jmp [100] (Sintaxe Intel) - jmp eax (Sintaxe Intel)- jmp eax (Sintaxe Intel) - jmp *100 (Sintaxe AT&T)- jmp *100 (Sintaxe AT&T) - jmp *%eax (Sintaxe AT&T)- jmp *%eax (Sintaxe AT&T)
  • 33. Assembly - InstruçõesAssembly - Instruções ““Pulo” condicional:Pulo” condicional: - je [100] (Sintaxe Intel)- je [100] (Sintaxe Intel) - jne eax (Sintaxe Intel)- jne eax (Sintaxe Intel) - je *100 (Sintaxe AT&T)- je *100 (Sintaxe AT&T) - jne *%eax (Sintaxe AT&T)- jne *%eax (Sintaxe AT&T)
  • 34. Assembly - InstruçõesAssembly - Instruções  Instruções de manipulação da pilha:Instruções de manipulação da pilha: - push eax (Sintaxe Intel)- push eax (Sintaxe Intel) - push %eax (Sintaxe AT&T)- push %eax (Sintaxe AT&T) - pop eax (Sintaxe Intel)- pop eax (Sintaxe Intel) - pop %eax (Sintaxe AT&T)- pop %eax (Sintaxe AT&T)
  • 35. Assembly - SeçõesAssembly - Seções  O código Assembly é dividido em seções.O código Assembly é dividido em seções. As principais seções no Linux são:As principais seções no Linux são: - section .data -> A seção .data é usada para- section .data -> A seção .data é usada para declarar variáveis inicializadas. Porémdeclarar variáveis inicializadas. Porém essas “variáveis” não mudam no decorreressas “variáveis” não mudam no decorrer do programa. Essa seção é usadado programa. Essa seção é usada geralmente para definir nomes de arquivos,geralmente para definir nomes de arquivos, constantes, entre outros.constantes, entre outros.
  • 36. Assembly - SeçõesAssembly - Seções - Exemplo:- Exemplo: section .datasection .data mensagem: db 'Hello world!'mensagem: db 'Hello world!' msglength: equ 12msglength: equ 12
  • 37. Assembly - SeçõesAssembly - Seções - section .bss -> É a seção usada para- section .bss -> É a seção usada para declarar as variáveis do programadeclarar as variáveis do programa - Exemplo:- Exemplo: section .bsssection .bss nomearq: resb 230 ;Reserva 230 bytesnomearq: resb 230 ;Reserva 230 bytes numero: resb 1 ;Reserva 1 bytenumero: resb 1 ;Reserva 1 byte array: resw 10 ;Reserva 10 wordsarray: resw 10 ;Reserva 10 words
  • 38. Assembly - SeçõesAssembly - Seções - section .text -> Essa é a seção onde o código do- section .text -> Essa é a seção onde o código do programa é escritoprograma é escrito - Exemplo:- Exemplo: section .textsection .text global _startglobal _start _start:_start: .. . .. . .. . .. . .. . .. .
  • 39. Assembly – InterrupçõesAssembly – Interrupções  Interrupções são chamadas aoInterrupções são chamadas ao processador requisitando um serviçoprocessador requisitando um serviço  O nome interrupção vem do fato deO nome interrupção vem do fato de que o processador tem sua atividadeque o processador tem sua atividade atual interrompida quando recebe umatual interrompida quando recebe um sinal de chamadasinal de chamada
  • 40. Assembly - InterrupçõesAssembly - Interrupções  Quando isso acontece, o processador salvaQuando isso acontece, o processador salva o processo atual e executa a rotina daquelao processo atual e executa a rotina daquela interrupçãointerrupção  Após a execução da rotina, que geralmenteApós a execução da rotina, que geralmente está armazenada em uma tabela naestá armazenada em uma tabela na memória RAM, o processador retorna aomemória RAM, o processador retorna ao processo em que estava anteriormenteprocesso em que estava anteriormente
  • 41. Assembly - InterrupçõesAssembly - Interrupções  Para se chamar uma interrupção no Linux,Para se chamar uma interrupção no Linux, é feito o seguinte processo:é feito o seguinte processo: - Coloca-se o número da interrupção no- Coloca-se o número da interrupção no registrador EAXregistrador EAX - Coloca-se os argumentos requeridos pela- Coloca-se os argumentos requeridos pela interrupção nos devidos registradoresinterrupção nos devidos registradores - Chama-se a interrupção- Chama-se a interrupção  O resultado geralmente será retornado emO resultado geralmente será retornado em EAXEAX
  • 42. Assembly - InterrupçõesAssembly - Interrupções - Exemplo (Sintaxe Intel):- Exemplo (Sintaxe Intel): mov eax,1 ; Interrupção Exitmov eax,1 ; Interrupção Exit mov ebx,0 ; Argumento em EBXmov ebx,0 ; Argumento em EBX int 80h ; Chamada da interrupçãoint 80h ; Chamada da interrupção - Exemplo (Sintaxe AT&T):- Exemplo (Sintaxe AT&T): movl $1,%eaxmovl $1,%eax movl $0, %ebxmovl $0, %ebx int $0x80int $0x80
  • 43. Assembly - ExemploAssembly - Exemplo  Hello World (Sintaxe Intel)Hello World (Sintaxe Intel) section .datasection .data hello: db 'Hello world!',10 ; A string 'Hello World!‘ e um linefeedhello: db 'Hello world!',10 ; A string 'Hello World!‘ e um linefeed helloLenght: equ $-hello ; Tamanho da string hellohelloLenght: equ $-hello ; Tamanho da string hello section .textsection .text global _startglobal _start _start:_start: mov eax,4 ; Interrupção de escrita (sys_write)mov eax,4 ; Interrupção de escrita (sys_write) mov ebx,1 ; Argumento que indica onde a string vai ser escritamov ebx,1 ; Argumento que indica onde a string vai ser escrita mov ecx,hello ; Argumento que indica o endereço da stringmov ecx,hello ; Argumento que indica o endereço da string mov edx,helloLenght ; Argumento que indica o tamanho da stringmov edx,helloLenght ; Argumento que indica o tamanho da string int 80h ; Chamada da interrupçãoint 80h ; Chamada da interrupção mov eax,1 ; Interrupção exit (sys_exit)mov eax,1 ; Interrupção exit (sys_exit) mov ebx,0 ; Argumento da interrupçãomov ebx,0 ; Argumento da interrupção int 80h ; Chamada da interrupçãoint 80h ; Chamada da interrupção
  • 44. Assembly - ExemploAssembly - Exemplo  Hello World (Sintaxe AT&T)Hello World (Sintaxe AT&T) .data.data hello: .string "Hello World!n"hello: .string "Hello World!n" .text.text .globl main.globl main main:main: mov $4,%eaxmov $4,%eax mov $1,%ebxmov $1,%ebx mov $hello,%ecxmov $hello,%ecx mov $13,%edxmov $13,%edx int $0x80int $0x80 mov $1,%eaxmov $1,%eax mov $0,%ebxmov $0,%ebx int $0x80int $0x80
  • 45. Assembly – ReferênciasAssembly – Referências www.cin.ufpe.br/~lab3www.cin.ufpe.br/~lab3 No meu public estarei atualizando oNo meu public estarei atualizando o arquivo “Links-if677.txt” sempre quearquivo “Links-if677.txt” sempre que encontrar referências interessantesencontrar referências interessantes