SlideShare ist ein Scribd-Unternehmen logo
1 von 45
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

Weitere ähnliche Inhalte

Was ist angesagt?

Computer Architecture and organization
Computer Architecture and organizationComputer Architecture and organization
Computer Architecture and organization
Badrinath Kadam
 
Sistemas operativos de grande porte
Sistemas operativos de grande porteSistemas operativos de grande porte
Sistemas operativos de grande porte
teacherpereira
 

Was ist angesagt? (20)

Cisc, risc e pipeline
Cisc, risc e pipelineCisc, risc e pipeline
Cisc, risc e pipeline
 
Difference Between CISC RISC, Harward & Von-neuman
Difference Between CISC RISC, Harward & Von-neumanDifference Between CISC RISC, Harward & Von-neuman
Difference Between CISC RISC, Harward & Von-neuman
 
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with DebuggingPART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
 
Processor organization & register organization
Processor organization & register organizationProcessor organization & register organization
Processor organization & register organization
 
SEAC: Um Simulador Online para Ensino de Arquitetura de Computadores
SEAC: Um Simulador Online para Ensino de Arquitetura de ComputadoresSEAC: Um Simulador Online para Ensino de Arquitetura de Computadores
SEAC: Um Simulador Online para Ensino de Arquitetura de Computadores
 
Questões de Sistemas Operacionais
Questões de Sistemas Operacionais Questões de Sistemas Operacionais
Questões de Sistemas Operacionais
 
Advanced Processor Power Point Presentation
Advanced Processor  Power Point  PresentationAdvanced Processor  Power Point  Presentation
Advanced Processor Power Point Presentation
 
Computer Architecture and organization
Computer Architecture and organizationComputer Architecture and organization
Computer Architecture and organization
 
Evolução e Desempenho de Computadores - Arquitetura e Organização de Computad...
Evolução e Desempenho de Computadores - Arquitetura e Organização de Computad...Evolução e Desempenho de Computadores - Arquitetura e Organização de Computad...
Evolução e Desempenho de Computadores - Arquitetura e Organização de Computad...
 
sistemas operativos.ppt
sistemas operativos.pptsistemas operativos.ppt
sistemas operativos.ppt
 
8085 branching instruction
8085 branching instruction8085 branching instruction
8085 branching instruction
 
Microprocessor 8086
Microprocessor 8086Microprocessor 8086
Microprocessor 8086
 
Sistemas operativos de grande porte
Sistemas operativos de grande porteSistemas operativos de grande porte
Sistemas operativos de grande porte
 
Introdução - Arquitetura e Organização de Computadores
Introdução - Arquitetura e Organização de ComputadoresIntrodução - Arquitetura e Organização de Computadores
Introdução - Arquitetura e Organização de Computadores
 
Linha do tempo da Informatica
Linha do tempo da InformaticaLinha do tempo da Informatica
Linha do tempo da Informatica
 
Arquitetura de computadores: Apostila de pipeline
Arquitetura de computadores: Apostila de pipelineArquitetura de computadores: Apostila de pipeline
Arquitetura de computadores: Apostila de pipeline
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Introduction to Computer Architecture and Organization
Introduction to Computer Architecture and OrganizationIntroduction to Computer Architecture and Organization
Introduction to Computer Architecture and Organization
 
Addressing modes presentation
Addressing modes presentationAddressing modes presentation
Addressing modes presentation
 
Computer architecture
Computer architectureComputer architecture
Computer architecture
 

Ähnlich wie Assembly

Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
Luciano Borges
 
Sapo sessions linux power tools
Sapo sessions linux power toolsSapo sessions linux power tools
Sapo sessions linux power tools
Armando Reis
 
Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1
Pedro Augusto
 
2. Operadores Booleanos E Partes Do Computador
2. Operadores Booleanos E Partes Do Computador2. Operadores Booleanos E Partes Do Computador
2. Operadores Booleanos E Partes Do Computador
susana12345
 

Ähnlich wie Assembly (20)

Assembly PDFs Eduardo Cj como usar o assembly
Assembly PDFs Eduardo Cj como usar o assemblyAssembly PDFs Eduardo Cj como usar o assembly
Assembly PDFs Eduardo Cj como usar o assembly
 
Engenharia Reversa no Linux
Engenharia Reversa no LinuxEngenharia Reversa no Linux
Engenharia Reversa no Linux
 
Sistemas logicos programaveis
Sistemas logicos programaveisSistemas logicos programaveis
Sistemas logicos programaveis
 
Snep arquitetura
Snep arquiteturaSnep arquitetura
Snep arquitetura
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
 
Introdução a Exploração de Software
Introdução a Exploração de SoftwareIntrodução a Exploração de Software
Introdução a Exploração de Software
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
The Language VolcanX - ABMSL
The Language VolcanX - ABMSLThe Language VolcanX - ABMSL
The Language VolcanX - ABMSL
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Curso Gratuito de Shell Script
Curso Gratuito de Shell ScriptCurso Gratuito de Shell Script
Curso Gratuito de Shell Script
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 
Sapo sessions linux power tools
Sapo sessions linux power toolsSapo sessions linux power tools
Sapo sessions linux power tools
 
Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1
 
2. Operadores Booleanos E Partes Do Computador
2. Operadores Booleanos E Partes Do Computador2. Operadores Booleanos E Partes Do Computador
2. Operadores Booleanos E Partes Do Computador
 
Pho Aula 02
Pho Aula 02Pho Aula 02
Pho Aula 02
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 

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