Mostrando postagens com marcador Introdução. Mostrar todas as postagens
Mostrando postagens com marcador Introdução. Mostrar todas as postagens

As 3 Formas de Usar CSS no HTML: Inline, Interno e Externo (Guia Prático)

As 3 Formas de Usar CSS no HTML: Inline, Interno e Arquivo Externo

Fala, futuro mestre do Front-End! Se você acompanhou a nossa introdução sobre o que é CSS e para que serve, você já deve estar convencido de que a era do HTML puro, feio e monocromático ficou no passado. É simplesmente impossível ser um Webmaster ou Web Designer profissional sem dominar completamente as folhas de estilo.

Neste tutorial prático da nossa apostila de CSS, nós vamos colocar a mão na massa. Como tudo no desenvolvimento Web, o HTML é flexível e nos oferece diferentes caminhos para chegar ao mesmo resultado. Hoje, você vai descobrir as três maneiras exatas de conectar o CSS ao seu HTML e entender por que uma delas é a favorita absoluta do mercado e do Google!

Como inserir CSS no HTML?

Como aplicar CSS no HTML? Existem três formas de inserir CSS em uma página web: 1. CSS Inline: Usando o atributo style diretamente na tag HTML. 2. CSS Interno: Escrevendo as regras dentro da tag <style> no <head> do documento. 3. CSS Externo: A melhor prática, que consiste em criar um arquivo .css separado e importá-lo no HTML usando a tag <link>.

1. CSS Inline (Usando `style` como atributo)

A maneira mais direta (e muitas vezes a mais trabalhosa a longo prazo) de pintar um elemento no seu site é usando o CSS Inline (em linha). Isso significa que você vai escrever o código de design dentro da própria tag HTML, como se fosse um atributo comum.

Por exemplo, se quisermos escrever uma frase usando a tag de cabeçalho H2 na cor azul, e com a fonte um pouco maior, fazemos assim:

<!-- Estilização Inline: Atributo style dentro da tag H2 -->
<h2 style="color: #2563eb; font-size: 24px;">Meu título azul e grande!</h2>

Veja como essa sintaxe funciona: colocamos o valor dentro de aspas (style="..."). Lá dentro, escrevemos a propriedade (ex: color), colocamos dois pontos (:) e inserimos o valor (ex: #2563eb que é um tom moderno de azul). Para adicionar uma segunda regra, basta separar com ponto e vírgula (;).

⚠️ Alerta de Má Prática (Evite o Inline): Misturar CSS diretamente no HTML quebra a regra de "Separação de Contextos". Se o seu site tiver 50 títulos e você quiser mudar a cor de todos, terá que alterar 50 tags manualmente. O CSS Inline só deve ser usado para testes rápidos ou estilos injetados dinamicamente via JavaScript!

2. CSS Interno (A tag `< style >`)

Para resolver o problema do trabalho braçal, o HTML nos permite criar um "bloco de regras" no topo da página. Em vez de estilizar cada tag individualmente, nós agrupamos tudo dentro da tag <style>, que deve ser declarada obrigatoriamente dentro do <head> do seu documento.

Veja como fica o código. Nós avisamos o HTML que vamos usar CSS (type="text/css") e ditamos as regras para as tags h1 e h2:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Exemplo de CSS Interno</title>
    
    <!-- O Bloco de CSS Interno fica AQUI! -->
    <style type="text/css">
        h1 { 
            color: #dc2626; /* Vermelho */
        }
        h2 { 
            color: #2563eb; /* Azul */
            font-size: 20px; 
        }
    </style>
</head>
<body>

    <h1>Este título ficará vermelho automaticamente!</h1>
    <h2>E este subtítulo ficará azul!</h2>
    
    <h1>Qualquer outro H1 da página também será vermelho.</h1>

</body>
</html>

Fantástico, não? Você pode usar quantas tags H1 e H2 quiser no <body>, e todas elas vão herdar a cor que você definiu apenas uma vez no topo. Você acabou de automatizar o seu trabalho!


Cansado de "decorar" códigos e quer aprender de verdade? 🚀

A teoria da internet é vasta, mas para arrumar um emprego na área de Front-End, você precisa de projetos reais. Pare de depender de conexão com a internet e anúncios pulando na tela. Tenha o conhecimento definitivo na palma da sua mão.

Banner Curso HTML Progressivo
Apostila Completa HTML e CSS Digital

"A apostila mastigou a diferença entre HTML e CSS de um jeito que a faculdade nunca conseguiu. Hoje consigo criar menus, alinhamentos e layouts completos sem precisar copiar do Google!" - Carlos, Desenvolvedor.

3. CSS Externo: O Padrão Ouro do Mercado (Tag ``)

O CSS Interno resolve o problema de uma página. Mas e se o seu site, como um grande portal de notícias, tiver 10 mil páginas? Você teria que copiar e colar o bloco <style> 10 mil vezes? É claro que não!

A terceira forma — e a única aceita profissionalmente em projetos reais — é criar um Arquivo Externo de CSS. Nós tiramos todas as regras de dentro do HTML, criamos um arquivo novo no Bloco de Notas (ou no VS Code) e salvamos com a extensão .css (por exemplo: estilo.css).

Passo 1: Criando o arquivo `estilo.css`

Dentro desse arquivo, nós colocamos APENAS as regras. Nada de tags HTML:

/* Este é o conteúdo do seu arquivo estilo.css */
body {
    background-color: #f4f4f9;
    font-family: Arial, sans-serif;
}

h1 { 
    color: #dc2626; 
}

h2 { 
    color: #2563eb; 
    font-size: 20px; 
}

Passo 2: Conectando o CSS ao HTML (A tag ``)

Agora, no seu HTML, dentro da tag <head>, você cria uma "ponte" dizendo onde o navegador deve ir buscar a roupa visual do site. Fazemos isso com a tag <link>:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>CSS Externo: O Padrão Profissional</title>
    
    <!-- A Mágica Acontece Aqui: Importando o CSS Externo -->
    <link rel="stylesheet" type="text/css" href="estilo.css" />
    
</head>
<body>

    <h1>Eu herdei o vermelho do arquivo externo!</h1>
    <h2>Eu herdei o azul e o tamanho do arquivo externo!</h2>

</body>
</html>

O Resultado Vivo na Tela:

Eu herdei o vermelho do arquivo externo!

Eu herdei o azul e o tamanho do arquivo externo!

🛠️ Curiosidade de SEO (Por que o Google ama isso?): Quando você usa um arquivo .css externo, o navegador do usuário baixa esse arquivo no primeiro acesso e faz um Cache (guarda na memória). Quando o usuário clica em outras páginas do seu site, elas carregam instantaneamente, pois o CSS já está salvo no computador dele! Isso dispara suas métricas de velocidade no Google!



Perguntas Frequentes (FAQ)

Qual a diferença entre a tag style e a tag link no HTML?

A tag <style> é usada para escrever o código CSS diretamente dentro do documento HTML (método Interno). Já a tag <link> não contém código CSS em si; ela atua como uma âncora, indicando o caminho (URL) de um arquivo .css externo que o navegador deve baixar e aplicar na página atual.

Posso usar CSS Inline, Interno e Externo ao mesmo tempo?

Sim! Se você fizer isso, o navegador vai aplicar a regra do "Efeito Cascata" e da "Especificidade". Em caso de conflito (ex: o externo diz que a fonte é preta, mas o inline diz que é verde), a regra que estiver mais "próxima" do elemento vence. O CSS Inline tem prioridade máxima e vai sobrescrever o arquivo externo.

Por que a tag link vai dentro do head e não no body?

O <head> é carregado pelo navegador antes de ele começar a desenhar o conteúdo do <body> na tela do usuário (processo de renderização). Se o CSS fosse importado no final, o usuário veria a página feia, sem estilo, por alguns milissegundos, dando um "pulo" na tela quando a maquiagem fosse aplicada. Isso é chamado de FOUC (Flash of Unstyled Content).



🎯 O que estudar a seguir:

Agora que seu ambiente está configurado e ligado, é hora de entender as regras do jogo. Siga para as próximas aulas essenciais:

  • O Efeito Cascata do CSS: Entendendo como o navegador resolve conflitos
  • Seletores CSS Básicos: Como mirar em IDs e Classes no HTML
  • Cores no CSS: Diferenças entre Hexadecimal, RGB e Nomes

Introdução ao CSS: O que é, Para que Serve e Como Funciona na Prática

Introdução ao CSS: O que é, de onde veio e por que mudou a internet

Chegou a hora de deixarmos a internet "feia" para trás! Este é o tutorial inicial sobre CSS do nosso curso completo de Front-End. Se você chegou até aqui, assumimos que você já estudou a base do HTML5, já entende o que são tags, formulários e listas.

Até agora, você aprendeu a colocar conteúdo na tela, mas provavelmente seus sites estão com um visual de "documento de Word dos anos 90" (texto preto no fundo branco). O CSS é a linguagem mágica que vai pegar esse esqueleto e transformá-lo em uma obra de arte responsiva, colorida e interativa. Prepare-se para a revolução!

O que é CSS? (O Fim do Trabalho Manual)

O que é e para que serve o CSS? CSS significa Cascading Style Sheets (Folhas de Estilo em Cascata). Enquanto o HTML estrutura o conteúdo do site (textos, imagens, links), o CSS é responsável pelo design, aparência e layout da página (cores, fontes, espaçamentos e responsividade para celulares), permitindo estilizar milhares de páginas de uma só vez através de um único arquivo.

Antes do CSS existir, as coisas eram muito tristes na internet. Se um webmaster quisesse que todos os títulos do site fossem vermelhos e em negrito, ele precisava digitar a tag <font color="red"><b>Título</b></font> em cada um dos mil artigos do blog.

E se o chefe da empresa resolvesse que a cor da marca agora seria azul? O pobre programador teria que abrir mil arquivos HTML, um por um, e trocar a palavra "red" para "blue". Isso era insustentável. O CSS nasceu para separar a estrutura (HTML) da apresentação visual (Design).

💡 Analogia Perfeita (Construção Civil): O HTML é o pedreiro levantando a casa: ele define onde fica a parede (estrutura), a porta e a janela. O CSS é o arquiteto e decorador: ele diz de que cor a parede será pintada, qual a largura da porta e que tipo de vidro a janela vai ter!

Dê o salto de Iniciante para Front-End Profissional 🚀

A teoria é boa, mas o mercado de trabalho exige prática. Se você quer dominar o CSS Moderno (Flexbox, Grid, Animações e Responsividade) sem perder meses caçando vídeos soltos na internet, você precisa do material definitivo.

Slogan Curso HTML Progressivo
Apostila Completa HTML e CSS Digital

"A didática da apostila é fantástica! Eu li no ônibus voltando do trabalho e, no dia seguinte, já estava conseguindo alinhar elementos e criar menus responsivos que antes me davam dor de cabeça." - Rafael, Desenvolvedor Web.

Como funciona a comunicação entre HTML e CSS?

A ideia é absurdamente simples e genial. Você cria o seu conteúdo (HTML) sem se preocupar com cores. Depois, você cria um arquivo separado, geralmente chamado style.css (sua "Folha de Estilos").

Nesse arquivo CSS, você escreve as "regras" ou ordens para o navegador. É como se você estivesse conversando com o Chrome ou o Edge e dizendo:

  • "Navegador, todo título H1 do meu site deve ter a fonte Arial e a cor azul."
  • "Quando o usuário passar o mouse por cima do botão (hover), mude a cor dele para vermelho."
  • "Atenção! Se o usuário acessar o site pelo celular (tela pequena), esconda o menu lateral e faça os textos ficarem maiores!"

Então, no cabeçalho (<head>) do seu arquivo HTML, você coloca uma tag chamando esse arquivo CSS. Magicamente, todas as suas páginas vestem a mesma "roupa", mantendo um visual profissional e coeso.

A Prova Prática (O Ganho de Tempo)

Voltemos ao exemplo do chefe que mandou mudar a cor do site de mil páginas. Se o seu site inteiro foi construído usando CSS, tudo o que você precisa fazer é abrir UM ÚNICO ARQUIVO (o arquivo .css), mudar a palavra "red" para "blue" e salvar. Instantaneamente, milhares de páginas ficam azuis. Entendeu agora por que a internet não vive sem ele?

⚠️ Atenção ao SEO Moderno: O Google ama sites rápidos. Manter o CSS em um arquivo externo (separado do HTML) é uma excelente prática de SEO chamada caching. O navegador do usuário baixa o arquivo CSS no primeiro acesso e o guarda na memória. Quando o usuário clica na próxima página, ela carrega quase instantaneamente!

Uma pequena degustação de Código (Sneak Peek)

Não se preocupe em entender a sintaxe exata agora (vamos mastigar isso na próxima aula), mas veja a diferença entre o HTML sujo das antigas e a limpeza do CSS moderno:

<!-- ❌ O jeito ANTIGO e ERRADO (O HTML dita a aparência) -->
<h1><font color="blue" face="Arial">Bem-vindo ao meu site</font></h1>

<!-- ✅ O jeito MODERNO (O HTML só cuida do conteúdo) -->
<h1 class="titulo-principal">Bem-vindo ao meu site</h1>
/* 🎨 E no seu arquivo CSS, você dita as regras visuais: */
.titulo-principal {
    color: blue;
    font-family: Arial, sans-serif;
    text-align: center; /* Centraliza na tela num passe de mágica! */
}



Perguntas Frequentes (FAQ)

CSS é uma linguagem de programação?

Não. Assim como o HTML, o CSS não é uma linguagem de programação, pois não possui lógicas de decisão (if/else), repetições (loops) ou conexão com bancos de dados. O CSS é classificado tecnicamente como uma "Linguagem de Estilização" (Style Sheet Language). Para criar lógica na web, usamos o JavaScript e o PHP.

O que quer dizer o "C" (Cascata) no CSS?

"Cascading" (em Cascata) refere-se à forma como o navegador decide qual regra aplicar se houver um conflito. Funciona como a água de uma cachoeira que cai de cima para baixo. Se você disser no início do arquivo CSS que o fundo é "azul" e, lá no final do arquivo, disser que o fundo é "vermelho", a regra de baixo (que vem por último na cascata) substitui a primeira, e o fundo ficará vermelho.

Preciso decorar todas as propriedades do CSS?

De forma alguma! Existem centenas de propriedades CSS e nem os desenvolvedores Sêniores sabem todas de cabeça. O foco deste curso é fazer você entender a lógica e a sintaxe. No dia a dia, você sempre usará documentações oficiais (como a MDN) ou mecanismos de busca para consultar propriedades específicas quando precisar.



🎯 O que estudar a seguir:

A empolgação bateu? Agora vamos sujar as mãos de código! Veja a trilha sugerida para continuar seus estudos:

Como programar em Assembly no Linux – Instalando o Assembler NASM

Para começarmos a programar na linguagem de programação Assembly, precisamos de um programando chamado Assembler, que irá converter nosso código para um código que a máquina irá entender.

Vamos usar o NASM (NetWide Assembler), que pode ser usado no Windows ou no Linux.

Nesse tutorial de nosso curso de Assembly, vamos ensinar como instalar esse Assembler no sistema operacional Linux.

Para programar em Assembly, iremos usar corriqueiramente o terminal do Linux, tanto na instalação como na montagem de nossos códigos-fonte, para criar os programas.


Baixando o NASM

Para baixar o NASM vá na página oficial do Netwide Assembler:

Como o projeto continua se desenvolvendo, não podemos especificar uma versão, pois no momento que você estiver lendo esse tutorial de Assembly a versão oficial do NASM pode ser diferente da versão usada pelo Assembly Progressivo.

Portanto, ao entrar no website, clique na seção de Downloads, e em seguida abra o diretório da versão mais recente.
Lá você verá um vários diretórios com nome dos mais diversos sistemas operacionais.

Aqui iremos baixar, descompactar e utilizar o NASM para GNU/Linux.





























Como instalar o NASM no Linux

Dentro da seção de Downloads você encontrará os arquivos para instalação no Linux, eles estão no formato nasm-xxx.tar.yy, onde xxx é a versão, e yy a extensão compactada.

Os arquivos nasm-xxx-xdoc.tar.yy  se referem a documentação oficial do Assembler NASM.


Já dentro do diretório linux/ você encontrará os arquivos rpm para instalar em distribuições Linux do tipo Red Hat, como o Fedora.


Após baixar e descompactar, pelo Terminal vá na pasta do NASM e rode o script para configurar a instalação, com o seguinte comando:

./configure


Para construir, digite o comando:

make


Após terminar o make, para instalar o NASM digite:

make install


E seu Assembler estará instalado em seu sistema operacional Linux.


PS: caso ocorra erros em sua instalação, efetue-a como super usuário, ou através do comando sudo antes de cada comando.


As vantagens e benefícios do Assembly

Agora que você já leu sobre as desvantagens e dificuldades da linguagem Assembly, vamos falar sobre onde  essa linguagem é usada e seus benefícios.

Assembly é eficiente

Se você mandar duas pessoas, equipes ou empresas, fazerem
os mesmos softwares, verá que é impossível o código delas serem iguais.
Programar é raciocinar, é criatividade, depende do intelecto, experiência e
raciocínio dos programadores e chefes.
É por isso que existem navegadores Web bons e ruins,
Sistemas Operacionais lentos e rápidos, jogos bem feitos e mal feitos etc.

Isso tudo é eficiência: fazer um programa que rode mais
rápido, que consuma pouco processamento ou que exija o mínimo de memória
possível. E isso o Assembly é único.
Um programa bem feito em Assembly é simplesmente
imbatível.

Sim, é trabalhoso.
Sim, é demorado.
Sim, é, algumas vezes, entediante. Mas uma vez feito, e
bem feito, você terá feito um ótimo trabalho e poderá ter a certeza que vai
tirar o máximo de sua máquina.

Não é à toa que é Assembly é uma linguagem muito usada em
situações críticas, como em alguns trechos da construção de sistemas
operacionais, como o Linux (em sua grande parte é feito em C, mas em algumas
partes é necessário usar Assembly).




















Assembly é rápido

O gerenciamento de memória na linguagem Java, por exemplo,
é feito de forma automática.
A vantagem disso é que o programador não precisa lidar
com ponteiros, endereços de memória, alocação e liberação de memória (o que é
considerado por muitos como as coisas mais difíceis em programação).
A desvantagem é que isso não é perfeito, e não passa nem
perto de ser algo 100% eficiente.

Em Assembly não existe nada automático assim, é você
programador que vai mandar e controlar tudo. E isso é essencial, ter o controle
de tudo, quando é necessário funcionamento máximo, como em microcontroladores e
sistemas eletrônicos (imagina um sistema lento em uma aeronave? Não dá, em
questões e sistemas de segurança, precisamos de processamento máximo).



Assembly exige menos memória

Por dar total acesso e uso de cada espaço de memória ao
programador, o Assembly permite que as aplicações feitas nessa linguagem possam
ocupar e usar o mínimo de memória possível.

“Com tantos computadores poderosos de gigas e gigas de
memória e processamento, por quê se preocupar com o tanto de memória utilizada?”
pode se perguntar o leitor e programador de linguagens de alto nível.

A linguagem de Assembly não é somente para computadores.
Existem microcontroladores com meros kilobytes de
memória, em que não é possível fazer nem um “Hello world” em diversas outras
linguagens de programação, e só é possível programar neles, e em outros
dispositivos digitais, com Assembly.

Do ponto de vista prático, nenhum empresário vai gastar
Megas de memória em simples circuitos, como de calculadores, freezer e outros
sistemas digitais, quando se pode gastar apenas poucos Kb usando a linguagem
Assembly.
Se assembly usa menos memória, mais barato irá sair o
projeto. Isso não é importante, é essencial para todos os engenheiros.
Ser eficiente só na teoria não adianta, tem que ser
eficiente e economicamente viável.


Assembly dá acesso direto ao hardware

Nem todo equipamento é bonitinho e perfeito para se
trabalhar como um computador.
Existem dispositivos sem teclado, sem tela, com tipos
diferentes de memória, de processador e com arquiteturas e funcionamentos
diferentes. Obviamente, a grande maioria das outras linguagens de programação
não seriam nem cogitadas para se usar nesses sistemas.

Embora hoje em dia os vídeo-games sejam tão potentes quanto os computadores, eles não são feitos da mesma maneira que os PC's e Notebooks. Eles não tem as mesmas peças, acessórios e recursos que facilitam a programação neles.
Ou seja, em alguns casos, SÓ É POSSÍVEL DE SE TRABALHAR
COM ASSEMBLY.
Em décadas passadas, não só o hardware dos vídeo games eram controlador por mas os jogos eram feitos inteiramente com o uso da linguagem Assembly.


Os programas em Assembly são menores

Embora os códigos tendam a ser bem maiores que os das
outras linguagens, depois de pronto, os aplicativos em Assembly são bem menores
em tamanho.

Isso se deve ao fato do programa em Assembly ser muito
eficiente e consumir pouca memória.
Além de não ter outras aplicações atuando por debaixo dos
panos, como acontece em outras linguagens.


Segurança no Assembly: uma faca de dois gumes

Esse tópico pode ser tanto uma vantagem como uma
desvantagem.

Sistemas feitos em linguagens de alto nível são freqüentemente
burlados por hackers, pois as aplicações que fazem uso de tais linguagens não
mostram nem oferecem tudo aos programadores. A gigantesca maioria desses
profissionais não sabe ao que está ocorrendo em baixo nível.
E mesmo que soubessem, a maioria das linguagens
simplesmente não oferece a possibilidade de se trabalhar próximo ao hardware.

Como um aplicativo em Assembly age nos mais baixos e
fundamentais níveis, um programa bem feito nessa linguagem é bem mais seguro em
outras linguagens, pois você pode programar e controlar manualmente cada
detalhe do sistema, e de sua máquina.

Porém, como dissemos anteriormente, códigos em Assembly
são grandes e complexos.
Á medida que as aplicações e sistemas forem ficando
maiores, o controle sobre tudo vai ficando cada vez menor.

Ou seja, um bom programador Assembly pode prover segurança
e controle que nenhum outro pode ter. Porém, ele também pode abrir brechas que
outras linguagens não abririam.
Fica óbvio o motivo de vários aplicativos de cunho hacker e cracker usarem Assembly.


Assembly serve para aprender como as coisas funcionam

Há pessoas que estudam não por serem obrigadas, por
estarem na faculdade ou por ser necessário para ganhar dinheiro em sua
profissão.
Há pessoas que simplesmente gostam de estudar, seja por
paixão, hobbie ou tédio.

A definição correta de hacker é daquele indivíduo que quer saber como e porque as coisas
funcionam. Costuma-se chamar escovador de
bits
aquele que é curioso, tem interesse em saber e mexer nos computadores
em níveis mais fundamentais possíveis.

Não importa se programa em C, Java, .NET ou até mesmo
para Web, saber Assembly vai te dar uma noção de como as coisas realmente
funcionam, vai abrir sua mente, melhorar seu raciocínio e compreensão sobre
computadores e dispositivos digitais, deixando você, por natureza, diferenciado
dos outros profissionais que simplesmente usam as tecnologias, sem saber o que
está ocorrendo debaixo de seu nariz.

“Não sou louco em
querer entender como funciona um carro. Louco é quem senta em cima de toneladas
de ferro que possuem a força de centenas de cavalos, sem saber o que está
acontecendo logo abaixo.”

As desvantagens e dificuldades do Assembly

Agora que você já leu sobre ‘A melhor linguagem de programação’, e sabe da santa verdade, vamos entrar em detalhes sobre o uso do
Assembly.

Nesse artigo vamos discutir as as
desvantagens da linguagem.
Vamos mostrar os problemas de se programar nessa linguagem e que vão pesar na hora de você decidir que tecnologia deve usar para seu sistema.

Quando não se deve usar Assembly

Embora seja uma poderosa e importantíssima linguagem,
louvar e querer usar sempre o Assembly, para qualquer tarefa, é algo totalmente
inviável.
Para deixarmos o leitor da apostila Assembly Progressivo informado e realista, vamos começar falando das desvantagens dessa linguagem de
programação.

Complexidade dos programas em Assembly

Não vamos mentir nem tentar esconder nada: Assembly é a
linguagem mais difícil sim.
Não é tão óbvia e simples de se aprender, como Python ou
Visual Basic.
Isso não quer dizer que é impossível de se programar em
Assembly, só quer dizer que você terá que se dedicar mais ao estudo da
linguagem.

Configurações específicas para programar em Assembly

A grande diferença, ou sacada, da linguagem Java é que é
multi-plataforma.
Ou seja, criando um programa em Windows, ele rodará num
sistema Linux ou MacOS, não importando a arquitetura de seu computador.
Aliás, não precisa nem ser computador, várias outras
linguagens rodam dispositivos móveis, tablets, TV Digital etc.

Como explicamos no artigo sobre Como Programar em Assembly, precisamos programar especificamente para cada tipo de arquitetura,
pois há diferenças nos tipos de Assembly.
Logo, Assembly não é portável. Você não pode criar um programa
em Assembly e garantir que ele vá rodar em outros sistemas.

Essa é uma das grandes vantagens de programação voltadas
para web, como PHP, JavaScript e a linguagem de marcação HTML, elas só dependem
do navegador, não dependem do sistema operacional, muito menos de um tipo
específico de processador, como precisa as variáveis do Assembly.


























Baixa produtividade do programador Assembly

Quem é iniciante ou programa por hobbie, provavelmente
nunca se preocupou com produtividade.
Mas quem trabalha e depende disso como meio de vida, sabe
que não basta usar bem uma linguagem de programação ou saber muito de
computação: você terá chefe e prazos.

As vezes deixamos de lado uma linguagem poderosa e
eficiente (como Assembly, C ou C++) e optamos por uma mais lenta e menos poderosa,
como Java ou C# simplesmente porque precisamos ser produtivos, ou seja,
precisamos produzir mais em menos tempo.

Uma aplicação que você faz em algumas horas em Java,
Python ou Perl, levaria semanas ou meses para fazer em Assembly. Os códigos em
Assembly são longos, cheios de detalhes e pormenores, o programador fica a
cargo de tudo.

Assembly é uma linguagem crua e com poucos ‘recursos’

Não importa qual seja o programa que vá criar, para uma
empresa, loja ou um jogo, boa parte do que você precisa já está feito em Java
ou C#, na forma de API’s e Frameworks, que são recursos prontos que você pode
usar em suas aplicações.

Já em Assembly as coisas não vêm prontas, não há uma
infinidade de bibliotecas, funções e recursos feitos e prontos do jeito, e do
tanto, que as linguagens de alto nível. Logo, é necessário criar mais códigos e
programas para fazer algo nessa linguagem.

Difícil manutenção de código Assembly

Os iniciantes talvez não vão entender bem isso, mas em
empresas, não basta apenas escrever o código para o programa funcionar. Códigos
fonte sempre são alterados com o tempo.
Por isso é importante fazer um código ‘legível’, de fácil
entendimento, comentado e documentado para que outras pessoas (ou você no
futuro) possam ler e entender depois.

Como os códigos em Assembly geralmente são grandes, não
são tão óbvios e fáceis de entender (em algumas linguagens, como Python, basta
passar o olho no código para entender o que está ocorrendo).  Portanto, códigos em Assembly costumam dar
trabalho para se fazer a manutenção.

Assembly é a melhor linguagem de programação?

É comum vermos na internet, principalmente em fóruns,
pessoas falando que linguagem X é melhor que Y, que Y paga melhor que a
linguagem Z, que linguagem isso é
mais ‘foda’ que linguagem aquela.

Ignore, totalmente, esses tipos de comentários e pessoas.
Não existe melhor linguagem, existem linguagens e
tecnologias mais indicadas para cada tipo de problema.


Qual é a melhor linguagem de programação?

Vamos traçar um paralelo, com veículos de locomoção.

Um avião é bem mais veloz que um carro, óbvio não?
Além disso, é mais eficiente e seguro. Mas isso vai exigir
um custo (financeiro, burocrático, estudo etc) bem maior.
Devemos usar, então, o avião para viajar? Depende da viagem.





Já um carro é bem mais barato e não é tão caro pra manter
quanto um avião.
Mas é bem mais lento, perigoso e menos eficiente.
Mas é fácil de dirigir um, e não precisa de muito estudo,
apenas temos que tirar a carteira de habilitação.
Ora, se é mais barato e prático, devemos usar carros para
viajar? Depende da viagem.

Já uma bicicleta é bem, mas bem, mais barata. Não precisa
gastar dinheiro para usá-la, nem é necessário ter uma idade mínima, habilitação
ou sequer idade mínima para se deslocar numa bike.
Ora, se é praticamente de graça viajar em uma bicicleta,
devemos usá-la para viajar?
Depende da viagem.

Tenho certeza que você entendeu os dependes dos exemplos
anteriores, bem como tem bom senso suficiente para saber quando usar um ou
outro.
Para viagens longas entre lugares distantes, avião sem
dúvidas é a melhor opção.
Para ir a outra cidade, ou viajar para o interior ou
literal, é mais cômodo ir de carro.
Já para ir pra escola ou andar alguns quarteirões, a
bicicleta é a melhor alternativa.

Então, qual desses veículos é o melhor?
A resposta é: não existe melhor, existe solução mais
adequada para cada tipo de situação.

Com esse exemplo, é bem fácil entender, mas geralmente as
pessoas não levam isso para o mundo da programação, e nesse âmbito a situação é
a mesma: você tem que ver seu problema e analisar qual a melhor solução para
ele
.No caso, qual melhor linguagem, tecnologia e o melhor
meio para abordar tal problema.
Portanto, dizer que linguagem A ou B é melhor, é dar um
atestado de sua ignorância e estará carimbando seu documento de leigo poser.

Porém, a linguagem Assembly é bastante respeitada e
considerada por muitos como a melhor, principalmente por engenheiros,
escovadores de bits (pessoas que amam computação, e querem saber tudo que
ocorre, nos mínimos detalhes, em suas máquinas) e por hackers.

No próximo artigo de Assembly entraremos em detalhes sobre
as vantagens dessa linguagem, bem como suas desvantagens.
Sim, como todas as linguagens, há desvantagens em usar o
Assembly. Não se iluda.

























Como começar a programar em Assembly

Conforme foi explicado no tutorial passado, sobre os
níveis de abstração da programação na computação, existem vários tipos de
Assembly pois essa linguagem trabalha diretamente no hardware, e como você
sabe, existem diversos tipos de hardwares (processadores, para sermos mais
específicos).

Portanto, é necessário que seja feita algumas escolhas.
Vamos escolher as mais comuns, abrangentes e de fácil
acesso possível.


Arquitetura usada: IA-32 (Intel Architecture 32-bit)

Vamos ensinar a linguagem Assembly para processadores da
Intel.




Embora os de 64 bits sejam os que estão crescendo e
ocupando seu lugar no mercado, para iniciar, ainda é mais indicado os estudos
pelos processadores de 32 bits.
Aqui você encontra uma lista de processadores da Intel:

Embora a tecnologia tenha avançado bastante, os conjuntos
de instruções não mudaram a ponto de ser necessário um novo aprendizado. Embora
os primeiros microprocessadores da Intel de 32 bits, tenham quase 30 anos, seu ‘jeitão’
continua o mesmo, e amplamente usado.
O que vêm mudando é capacidade e velocidade de
processamento dos mesmos.

“E se meu processador for diferente?”


É quase impossível não ter acesso a um computador com
processador Intel hoje em dia, mas se você não tiver, deve ou estudar por um
material mais específico para sua máquina ou estudar para os processadores da Intel,
pois embora seja diferente, a linguagem Assembly difere nos detalhes, sendo possível
o aprendizado da linguagem.

Esse tipo de arquitetura também foi implementada em
processadores da AMD, por exemplo.
Esses conjuntos de instruções de diversos processadores
diferentes obedecem a um conjunto de instruções da mesma arquitetura, que são
conhecidos como x86-32, i386 ou
simplesmente x86 (subtende-se que se
trata de 32 bits, pois os processadores de 16 bits estão em desuso).

Assembler: mnemônicos e opcode (operation code)

Como já dissemos, os computadores em si só ‘entendem’ e
obedecem uma série de comandos representados por números 0 e 1.
Obviamente, poderíamos escrever 0’s e 1’s diretamente
para nossas máquinas, mas o trabalho e as chances disso dar errado são
gigantescas.

Por isso, é comum trabalharmos com números hexadecimais
em Assembly (base numérica de 16 elementos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,
C, D, E e F). Porém, embora ajude bastante, ainda é algo extremamente
enfadonho.

Para superar essas barreiras, a linguagem de Assembly
possui palavras reservados chamada mnemônicos, que servem para o humano
programar com maior facilidade, sem ter que usar números o tempo inteiro.



























Por exemplo, até mesmo linguagem C podemos trabalhar com
endereços de memória.
Mas endereços são números (e geralmente grandes), então
para evitar decorar e escrever números, damos nomes as nossas variáveis e
passamos a tratar elas por esse nome, e não pelo seu endereço.

Então, o mnemônico é um nome que usamos para substituir
diversos comandos, é como se fosse um atalho: estamos escrevendo com nomes diferentes,
mas a ação é a mesma, pois é mais fácil tratar uma pessoa pelo seu nome do que
com seu número do RG.

Mas existe uma diferença entre o Assembly e as demais
linguagens: em Assembly, tudo é binário, inclusive as operações com os dados.
Podemos somar um número a outro usando apenas números
binários que representam as etapas da soma. Obviamente isso é extremamente
trabalhoso, e vamos usar o mnemônico add ao invés de números, para tratar
operações de adição.
Por exemplo, a instrução hexadecimal dessa operação é: 83060F000A

Ou seja, com os mnemônicos vamos dar nomes as operações,
dados e instruções, ao invés de trabalhar com os opcodes, que são
instruções diretas de máquinas.

Ou seja, escrevemos na forma ‘humana’(nomes) e ela é
transformada em forma de máquina (binários), e quem faz isso é um programa
chamado Assembler.
O Assembler vai transformar cada instrução feita na
linguagem Assembly para a linguagem de máquina.

Existem diversos tipos de Assemblers no mercado, mas
vamos usar o NASM (Netwide Assembler), pois ele é gratuito, atualizado e
está disponível tanto para as plataformas Linux como para Windows.

Para mais informações sobre como baixar o NASM, acesse
seu site oficial e instale o NASM para seu sistema, para que possa prosseguir
com nosso curso de Assembly: http://www.nasm.us/

Onde o Assembly age: Níveis de abstração na Computação

Para entender um pouco mais de Assembly, precisamos
explanar os diversos níveis de abstração que um computador possui. Dentro dessa
ordem de níveis, o Assembly se encontra mais abaixo, mais próximo do hardware,
por isso é dito ser uma linguagem de baixo nível.

Para entender melhor, vamos começar de cima, de onde você
provavelmente deve estar agora, ao ler esse tutorial de Assembly.


A camada dos softwares e aplicações de alto nível

Aqui é onde está a maioria dos usuários de computadores,
tipicamente lidando com aplicações gráficas, clicando em botões, menus,
minimizando, maximizando, fechando janelas, navegando na  web e outras infinidades de coisas.






Nesse estágio, as coisas são bem simples e voltadas para
o usuário leigo.
Não é necessário saber absolutamente nada sobre o
funcionamento interno dos sistemas. E, de fato, a grande maioria dos usuários
não sabe.

Para o usuário, é tudo a mesma coisa, não importa se ele
esteja no Windows, MacOS, Linux, Android ou TV Digital: ele quer ver menus,
botões, clicar, arrastar, fechar e o mesmo de sempre.
Uma mera tela preta, como a do MS-DOS ou Terminal do
Linux, já seria motivo de espanto e repúdio. Nesse estágio, as coisas são
voltadas para o agrado desse tipo de usuário, que mesmo sendo totalmente
leigos, são os que sustentam o ramo da computação.

E realmente, a grande maioria das pessoas não tem motivos
para entender o que se passa por debaixo dos panos dessas aplicações: são
médicos, advogados, professores exibindo slides nas aulas, caixas de
supermercado e praticamente todo tipo de profissional vai ter contato com essa
camada.

A camada das linguagens de alto nível

Quando pensamos em programar, geralmente pensamos em criar
um super jogo, um programa bem útil ou aplicação móbile. Pensamos em criar algo
para a camada de softwares de alto nível, pois é o que mais estamos acostumados
a lidar.

Para fazer programas desse tipo, de alto nível, usamos
linguagens de programação de alto nível, como Java, linguagem C, C++, C#, Python, Pascal,
Delphi, Visual Basic, JavaScript, PHP e outras linguagens famosas.

Os programados dessas linguagens são capazes de criar
entender como funcionam os softwares de alto nível em um nível não muito
profundo, pois não é necessário entender muito do funcionamento dos sistemas
operacionais.

Na linguagem de programação Java, por exemplo, você nem
precisa se importar com o sistema, pois é uma linguagem multi-plataforma, ou
seja, uma aplicação feita em Java pode rodar em Windows, Linux, Mac, celulares
etc, com poucas ou nenhuma alterações.

Essas duas camadas de abstração são, portanto,
independente da arquitetura do sistema.
Um programador Java, por exemplo, não precisa saber qual
o processador da máquina que vai programar, e nem como funciona a arquitetura
de seu sistema. São níveis de abstração que não dependem do sistema.























Camada da linguagem Assembly

Essa camada é o objetivo de nossa apostila de Assembly, e
diferente das outras linguagens, precisamos saber que tipo de arquitetura vamos
trabalhar.

Isso porque os comandos e códigos que vamos usar na
linguagem Assembly são diferentes e específicos para cada tipo de processador.
Ou seja, o nível de abstração da camada da linguagem Assembly é dependente do
sistema.
É tão dependente que até precisamos saber como é
organizada e o funcionamento da memória da máquina onde vamos programar.

Por isso não existem cursos para todos os tipos de
Assembly, a linguagem varia de acordo com cada máquina. Diferente da linguagem
Java ou C++, que não importa o tipo de computador para programar.

Por estar abaixo das aplicações gráficas, das linguagens
que criam essas aplicações e ser dependendo do sistema, a linguagem de
programação Assembly é dita de baixo nível.

A camada do código de máquina

Você já deve ter ouvido falar que tudo, absolutamente
tudo, em computação, é feito de números 1 e 0. E isso é verdade.
O computador (no sentido bem baixo da palavra, ou seja, o
metal, as peças eletrônicas) só entende e obedece a esses comandos, que nada
mais são que uma série de números binários (1’s e 0’s). Porém, quantas vezes
você já programou ou ouviu falar de alguém que programa em binário?

O objetivo da linguagem Assembly é suprir esse problema
da alta complexidade do binário.
Com o Assembly escrevemos de uma maneira mais ‘humana’,
mais fácil e compreensível, e esse código é convertido para o código de
máquina.

Esse é o limite dos programadores. Porém, há muito, mas
muito mais abaixo do Assembly, que envolvem coisas de elétrica e eletrônica
digital (latches, flip-flops, transistores, circuitos integrados etc). Quem se
interessar por esse meio, poderá adquirir conhecimentos através de cursos como
Engenharia de Computação, Engenharia Elétrica, Engenharia Eletrônica e cursos
do gênero.