Escolar Documentos
Profissional Documentos
Cultura Documentos
Sumário
Semana 1 .................................................................................................................................2
Visão Geral............................................................................................................................. 2
Breve História ........................................................................................................................ 4
Modelos de computador ....................................................................................................... 7
Semana 2 -Componentes do Computador ...............................................................................9
Unidade Central de Processamento - CPU ............................................................................. 9
Memória .............................................................................................................................. 10
Sistema de Armazenamento ................................................................................................ 11
Semana 3 - Sistema Operacional e Arquitetura e Organização de Computadores..................12
Gerenciamento de memória: Memória Virtual ................................................................... 13
Técnica de memória virtual: paginação e segmentação ...................................................... 13
Semana 4 - Arquiteturas Paralelas e Arquiteturas Avançadas................................................14
Paralelismo e Memória ........................................................................................................ 15
Pipeline ................................................................................................................................ 16
Semana 7 - Linguagem Assembly ...........................................................................................17
Linguagem Assembly (ASM)................................................................................................. 17
Linguagem C e Linguagem Assembly (ASM)......................................................................... 18
Linguagem Assembly (ASM) em Prática ............................................................................... 19
1
Semana 1
Visão Geral
ESTRUTURA HIERÁRQUICA: O computador possui uma estrutura hierárquica que organiza seus
componentes em diferentes níveis. Essa hierarquia permite que tarefas sejam distribuídas e
realizadas de forma eficiente. Os níveis básicos são geralmente o hardware e o software, mas
dentro de cada um desses níveis, há subníveis que desempenham funções específicas.
2
2. Unidade Lógica e Aritmética: Realiza as operações matemáticas e lógicas, como adições,
subtrações, comparações e deslocamentos, necessárias para processar os dados.
3. Registradores: São pequenas áreas de armazenamento de alta velocidade localizadas na
CPU. Eles armazenam temporariamente dados, endereços de memória e instruções
durante a execução dos programas, tornando o acesso mais rápido do que a memória
principal. Os registradores desempenham um papel fundamental na eficiência do
processador.
4. A Interconexão da CPU é um elemento crucial que realiza a comunicação e a conexão
entre os componentes principais da Unidade Central de Processamento (CPU): a
Unidade de Controle, a Unidade Lógica e Aritmética (ULA) e os Registradores. Essa
interconexão é fundamental para que a CPU funcione de forma coordenada e execute
as tarefas necessárias para processar os dados e executar as instruções do programa em
execução.
3
2. Computadores Digitais: Manipulam dados de forma discreta, representando
informações usando códigos binários (0s e 1s). São amplamente utilizados em diversas
áreas, desde dispositivos pessoais até sistemas complexos.
Breve História
A história dos computadores é uma evolução desde as antigas máquinas mecânicas até os
modernos dispositivos digitais, revolucionando nossa maneira de viver, trabalhar e se conectar
com o mundo. Serão destacados a seguir alguns dos principais marcos dessa trajetória,
entendendo como a busca humana por calcular e processar informações transformou-se em
uma revolução tecnológica ao longo do tempo.
● 1623-1662: Blaise Pascal criou um dispositivo mecânico acionado por uma manivela,
capaz de realizar operações de adição e subtração. Esse dispositivo foi chamado de
"Máquina Aritmética" ou "Pascalina".
4
● 1646-1716: Gottfried Wilhelm von Leibniz desenvolveu uma máquina mecânica capaz
de realizar operações de multiplicação e divisão, além das operações de adição e
subtração.
O Colossus foi um dos primeiros computadores eletrônicos da história, projetado por Alan
Turing e outros cientistas britânicos durante a Segunda Guerra Mundial. Ele foi desenvolvido
com o objetivo de decifrar códigos criptografados pelos nazistas, em particular, os códigos
utilizados pela máquina de criptografia alemã Lorenz SZ40/42.
A Segunda Geração de computadores (1954-1965) foi marcada pela substituição das válvulas
eletrônicas por transistores como principais componentes. Eis alguns destaques desse período:
● PDP-8: A DEC lançou o PDP-8, que se destacou pela inovação de ter um barramento
único. Essa arquitetura de computador de pequeno porte tornou o PDP-8 muito popular
e influenciou o desenvolvimento de sistemas computacionais posteriores. Uma de suas
principais características inovadoras era a utilização de uma arquitetura de "barramento
único". Essa arquitetura consistia em ter apenas um barramento que conectava todos
5
os componentes do computador, incluindo CPU, memória e dispositivos de
entrada/saída.
● 1964: A Control Data Corporation (CDC) lançou o CDC 6600, que era mais rápido que
outros computadores da época. Esse computador apresentava uma CPU com alto grau
de paralelismo, o que o tornava especialmente eficiente em determinados tipos de
cálculos.
● Hardware mais barato (DEC) ou mais rápido (IBM e CDC): A concorrência entre
empresas como a Digital Equipment Corporation (DEC), IBM e Control Data Corporation
(CDC) levou ao desenvolvimento de computadores com foco em diferentes
características, como hardware mais barato (DEC) ou maior desempenho e velocidade
(IBM e CDC).
● Importância do Software: Durante essa geração, a ideia de que o software também era
um componente crucial para o funcionamento eficiente dos computadores começou a
ganhar reconhecimento.
A Terceira Geração de computadores (1965-1980) foi marcada pela invenção dos circuitos
integrados de silício, que possibilitaram a criação de computadores menores, mais rápidos e
mais baratos. Nesse período, ocorreram importantes avanços no campo da computação, com
destaque para os seguintes acontecimentos:
● 1958: Os circuitos integrados de silício foram inventados por dois físicos norte-
americanos. Esses circuitos continham dezenas de transistores em um único chip, o que
representou um grande avanço em relação aos transistores individuais utilizados
anteriormente.
● Computadores Menores e Mais Rápidos: Com os circuitos integrados, os computadores
puderam ser reduzidos em tamanho e alcançaram maior velocidade de processamento,
tornando-os mais eficientes e acessíveis.
● 1964: A IBM lançou a System/360, uma linha de produtos de computação baseados em
circuitos integrados. Essa linha de computadores introduziu conceitos importantes,
como a multiprogramação, permitindo a execução de vários programas na memória ao
mesmo tempo, melhorando o desempenho da CPU e possibilitando o uso de grande
espaço de memória para executar programas.
6
● DEC e a Série PDP-11: A Digital Equipment Corporation (DEC) lançou a série de
computadores PDP-11, que foi o sucessor de 16 bits do popular PDP-8. A PDP-11 foi
especialmente bem-sucedida, encontrando um grande mercado em universidades e
instituições acadêmicas.
● Tecnologia VLSI: Com a tecnologia VLSI, os computadores puderam ser projetados com
circuitos cada vez menores e mais eficientes, resultando em computadores mais
rápidos, poderosos e confiáveis.
● Computadores Menores e Mais Rápidos: A miniaturização dos componentes
possibilitou o desenvolvimento de computadores menores e mais leves, além de
alcançarem maior velocidade de processamento.
● Computador Pessoal (PC): Com a redução de custos da tecnologia VLSI, os preços dos
computadores caíram significativamente, tornando-os acessíveis para cada indivíduo.
Isso marcou o início da era do computador pessoal.
● Apple e IBM: Empresas como a Apple e a IBM desenvolveram computadores pessoais,
como o Apple Macintosh e o IBM Personal Computer (PC), respectivamente, tornando-
se populares e acessíveis ao público em geral.
● Sistema Operacional Windows: A Microsoft desenvolveu o sistema operacional
Windows, que teve um impacto significativo na popularização dos computadores
pessoais e se tornou o sistema operacional mais amplamente utilizado.
● Arquitetura RISC: A arquitetura RISC (Reduced Instruction Set Computer) começou a
substituir a arquitetura CISC (Complex Instruction Set Computer). A arquitetura RISC é
mais simples e otimizada para desempenho, o que contribuiu para a melhoria da
velocidade de processamento dos computadores.
Modelos de computador
O Modelo de Turing, desenvolvido pelo matemático inglês Alan Turing em 1937, é uma
abstração teórica que descreve um dispositivo lógico capaz de executar computações seguindo
uma série de regras predefinidas. A Máquina Universal de Turing, proposta por Turing, é uma
máquina hipotética capaz de simular qualquer outra Máquina de Turing, desde que seja
fornecido o programa apropriado.
Uma das inovações mais importantes do Modelo de Turing foi a ideia de um programa
armazenado, ou seja, um conjunto de instruções que a máquina pode seguir para realizar
diferentes tarefas. Esse conceito de programa armazenado foi uma das bases teóricas para o
desenvolvimento dos computadores modernos.
7
das pedras fundamentais da ciência da computação e influenciou profundamente o
desenvolvimento de tecnologias computacionais modernas.
É verdade que o modelo de Von Neumann, embora tenha sido fundamental para o
desenvolvimento dos computadores modernos, apresenta algumas limitações, especialmente
no que diz respeito à velocidade de processamento em certos tipos de tarefas. Por isso, ao longo
do tempo, surgiram novos modelos e paradigmas de computação que buscavam superar essas
limitações e explorar diferentes abordagens para realizar tarefas computacionais mais eficientes
e complexas. Alguns desses modelos incluem:
8
● Computadores Paralelos: Esses computadores utilizam múltiplos processadores
trabalhando em paralelo para realizar cálculos mais rapidamente, permitindo a
resolução de problemas complexos em tempo reduzido.
Esses modelos de computação têm sido utilizados em diversas áreas da ciência e da tecnologia,
impulsionando avanços significativos na resolução de problemas complexos e no
desenvolvimento de novas aplicações.
Na etapa de busca, a CPU obtém a próxima instrução a ser executada a partir da memória
principal. Uma vez recuperada, a instrução é decodificada na etapa seguinte, onde a CPU
entende qual operação deve ser realizada. Finalmente, na etapa de execução, a CPU executa a
instrução, realizando operações lógicas, aritméticas ou de controle conforme necessário.
As operações realizadas pela CPU podem ser divididas em três categorias principais: operações
lógicas (como AND, OR), operações aritméticas (como adição, subtração) e operações de
controle (que determinam o fluxo das instruções). Essas operações são executadas utilizando os
circuitos eletrônicos dentro da CPU, que manipulam os dados armazenados nos registradores.
No âmbito das conexões de entrada e saída, a CPU interage com dispositivos periféricos, como
teclados, mouses e impressoras, através de interfaces de entrada e saída. Os programas são
sequências de instruções que a CPU executa para processar dados, e a memória, unidades de
controle, barramentos e interfaces de entrada e saída se unem para formar um sistema
integrado.
Uma diferença fundamental existe entre a transmissão paralela e serial. A transmissão paralela
envia vários bits ao mesmo tempo através de vários fios, permitindo altas taxas de transferência,
9
enquanto a transmissão serial envia um bit de cada vez por um único fio, sendo mais eficiente
em termos de cabos, mas com menor taxa de transferência.
Uma das arquiteturas de CPU mais amplamente utilizadas é a arquitetura x86, desenvolvida pela
Intel. Essa arquitetura combina elementos de ambas as abordagens CISC e RISC, oferecendo uma
ampla gama de instruções complexas e reduzidas, o que a torna versátil e capaz de lidar com
uma variedade de tarefas computacionais.
Memória
A memória principal é uma das peças fundamentais do funcionamento de qualquer sistema
computacional, responsável por armazenar programas e dados que são utilizados durante a
operação. Essa memória apresenta características cruciais, como capacidade, tempo de acesso
e custo, que definem seu desempenho e utilidade.
A relação entre tempo de acesso e custo é uma consideração chave. Memórias mais rápidas
tendem a ser mais caras de produzir, o que resulta em uma escolha delicada entre velocidade e
economia. Como a tecnologia avançou, a capacidade das memórias principais também cresceu
significativamente, variando agora entre gigabytes e até mesmo terabytes em sistemas mais
avançados.
Para lidar com a crescente demanda por armazenamento rápido e eficiente, surgiu a hierarquia
de memória. Essa estrutura é uma solução elegante para o desafio de equilibrar velocidade e
capacidade. A hierarquia de memória consiste em diferentes níveis de memória, cada um com
suas próprias velocidades de acesso e capacidades. Memórias mais próximas à unidade central
de processamento (CPU) são mais rápidas, porém, com menor capacidade, enquanto as mais
afastadas têm maior capacidade, mas com tempos de acesso mais longos.
Dentro dessa hierarquia, encontramos a Memória RAM (Random Access Memory) e a Memória
ROM (Read-Only Memory). A RAM é um tipo de memória volátil, que permite leitura e escrita
aleatória. Ela é utilizada para armazenar temporariamente dados e programas em execução. Por
outro lado, a ROM é uma memória apenas de leitura e não volátil, usada para armazenar
informações permanentes, como firmware e instruções de inicialização.
Existem diferentes tipos de memórias ROM, como PROM (Programmable ROM), EPROM
(Erasable Programmable ROM) e EEPROM (Electrically Erasable Programmable ROM). Essas
variações permitem diferentes graus de programação e apagamento, atendendo a várias
necessidades de armazenamento de dados não voláteis.
Para otimizar ainda mais o desempenho do sistema, surge a memória cache. A memória cache
é uma memória intermediária posicionada entre a CPU e a memória principal. Ela armazena
dados frequentemente acessados, reduzindo o tempo médio de acesso e aumentando a
eficiência geral do sistema. A hierarquia de cache inclui níveis como L1, L2 e L3, cada um com
diferentes tamanhos e velocidades.
10
hierarquia de memória, incluindo RAM, ROM e memória cache, trabalha em conjunto para
proporcionar um sistema computacional eficiente e responsivo.
Sistema de Armazenamento
No mundo digital em constante evolução, os sistemas de armazenamento desempenham um
papel crucial em preservar e acessar informações de maneira eficiente e confiável. Enquanto a
memória RAM proporciona rapidez, é efêmera, apagando-se quando a energia é cortada. No
entanto, existem soluções de armazenamento duradouras que vão além das capacidades da
memória RAM.
As trilhas do disco magnético são divididas em setores de tamanho fixo, geralmente em torno
de 512 bytes. Cada trilha abriga uma sequência circular de bits que pode ser lida ou escrita. A
velocidade de rotação dos pratos influencia diretamente na velocidade de acesso aos dados.
Quanto maior a rotação, mais rápido o acesso aos dados armazenados.
Para garantir a segurança dos dados, o RAID (Redundant Array of Independent Disks) é
empregado. Esse sistema distribui e replica os dados em diferentes discos, aumentando a
confiabilidade. Existem vários níveis de RAID, desde o RAID 0, que foca na performance ao dividir
os dados entre os discos, até o RAID 5, que oferece redundância e distribuição.
11
Nos últimos anos, as telas sensíveis ao toque se tornaram uma tendência dominante. Diferentes
tecnologias, como infravermelho, resistivo e capacitivo, permitem a detecção do toque do
usuário. Essas telas são amplamente usadas em dispositivos como smartphones, tablets e
laptops, proporcionando uma experiência intuitiva e interativa.
Uma das funções principais do sistema operacional é simplificar a interação entre o software e
o hardware. Ele atua como um intermediário, traduzindo as solicitações dos programas em
ações que o hardware pode realizar. Isso abstrai a complexidade do hardware subjacente e
permite que os desenvolvedores se concentrem na lógica de seus programas.
Alguns dos sistemas operacionais mais conhecidos são o Linux, Windows e macOS, cada um com
suas características e usos específicos. Independentemente do sistema operacional, sua função
fundamental é facilitar a interação com o hardware e gerenciar os recursos do computador.
12
Os objetivos do escalonamento incluem garantir justiça na distribuição de recursos,
implementar políticas específicas (como prioridades de processos) e manter um equilíbrio na
utilização da CPU. Existem diversos algoritmos de escalonamento, como o First-Come, First-
Served (FCFS), loteria e feedback, cada um com suas vantagens e desvantagens.
A memória, com ideais de ser grande, rápida, não volátil e acessível a baixo custo, apresenta
desafios como a necessidade de compartilhamento entre diferentes processos e uma hierarquia
de armazenamento, desde os registradores até a memória principal e o disco.
A memória virtual surge como uma técnica crucial para otimizar o acesso à memória do disco.
Ela se baseia na exploração dos princípios de localidade espacial (dados próximos tendem a ser
usados) e temporal (dados recentemente usados serão usados novamente). O mapeamento de
endereços virtuais para físicos é facilitado pela Memory Management Unit (MMU), que também
trabalha em conjunto com a cache para melhorar o desempenho.
A memória virtual apresenta vantagens significativas. Ela oferece um espaço virtual maior do
que o espaço físico, permitindo que os programas utilizem mais memória do que realmente está
disponível fisicamente. Além disso, promove o isolamento e a segurança entre processos,
evitando interferências indesejadas. Facilita o compartilhamento de recursos entre processos,
melhorando a eficiência. Por fim, a memória virtual contribui para a melhoria geral do
desempenho do sistema, permitindo que diferentes programas coexistam harmoniosamente.
A paginação é uma técnica que quebra os processos em unidades chamadas páginas, todas com
um tamanho fixo. O endereço virtual é dividido em páginas virtuais, e uma página não contém
dados diferentes. Pode-se pensar nessa divisão de páginas como blocos em uma biblioteca, onde
13
cada página carrega informações específicas. Contudo, o tamanho da página exerce impacto
sobre o controle de endereços, o mapeamento e o desempenho geral do sistema. Páginas
menores resultam em mais controle e precisão, mas podem demandar mais recursos para
mapeamento. Por outro lado, páginas maiores facilitam o mapeamento, mas podem
desperdiçar espaço.
14
instruções e podem trocar mensagens para sincronização. Isso pode ser síncrono ou assíncrono.
A escolha entre memória distribuída e compartilhada depende da estrutura do sistema.
Paralelismo e Memória
Paralelismo em Processadores Únicos:
Linguagens como CUDA e OpenMP permitem aos programadores explicitamente indicar partes
do código que podem ser executadas em paralelo, tirando proveito de GPUs e processadores
com múltiplos núcleos.
15
Multicomputadores de Memória Distribuída:
Nesse cenário, múltiplos computadores independentes estão interligados através de uma rede.
Clusters e supercomputadores são exemplos disso. A programação envolve a comunicação por
troca de mensagens e muitas vezes é facilitada por bibliotecas de rotinas.
Esses processadores são projetados para lidar com cargas de trabalho intensivas, como análise
de dados em data warehouses. Eles apresentam grande escalabilidade e complexidade, muitas
vezes com tolerância a falhas integradas, como observado em sistemas da Intel.
Clusters:
Clusters são compostos por várias estações de trabalho ou PCs interconectados, trabalhando
juntos como uma única entidade de processamento. Eles podem ser centralizados ou
descentralizados, e sua topologia de rede é crucial para o desempenho.
Pipeline
O paralelismo de instrução é a arte de dividir as instruções de um programa em partes menores
e independentes que podem ser executadas simultaneamente em diferentes unidades
funcionais do processador. Para isso, os processadores implementam o conceito de pipeline de
instrução. Esse pipeline é uma estrutura que divide a execução de uma instrução em várias
etapas consecutivas, onde cada etapa é tratada por uma unidade de processamento
especializada.
Pense no pipeline como uma lavanderia com várias etapas: separar as roupas sujas, lavar,
enxaguar, secar e dobrar. Cada etapa representa uma fase no pipeline de instrução. Assim como
diferentes roupas passam pelas várias etapas de lavagem de forma simultânea, várias instruções
podem ser processadas ao mesmo tempo em diferentes etapas do pipeline.
Porém, mesmo nesse ambiente altamente otimizado, surgem desafios. Hazards são situações
em que o pipeline fica temporariamente paralisado devido a conflitos entre instruções. Existem
três tipos principais de hazards:
● Estruturais: quando várias instruções competem pelo mesmo recurso (por exemplo,
uma unidade de processamento), causando um conflito.
● Dados: quando uma instrução depende dos resultados de uma instrução anterior que
ainda não foi concluída.
● Controle: quando uma instrução de salto condicional (como um "if") altera o fluxo
normal do programa, criando incertezas sobre quais instruções devem ser executadas a
seguir.
Para mitigar esses problemas, soluções como busca antecipada (predição de ramificação) e
buffers (armazenamento temporário) são implementadas. A busca antecipada envolve a
previsão de desvios condicionais e a busca de instruções futuras com base nessa previsão. Os
buffers, por sua vez, armazenam temporariamente instruções ou dados, permitindo que o
pipeline continue funcionando, mesmo quando um estágio está temporariamente parado.
16
Linguagem Assembly (ASM)
Diferentes Níveis de Abstração de Linguagens
É importante notar que linguagens como HTML e JSON são exemplos de linguagens declarativas
que não se encaixam diretamente nessa hierarquia de abstração. Elas são projetadas para
descrever dados e estruturas, não para programar logicamente como linguagens de alto nível.
Enquanto as linguagens de programação lidam com algoritmos e operações, as linguagens
declarativas são usadas para definir estruturas e conteúdo.
Registradores da CPU
Os registradores da CPU são pequenos locais de armazenamento interno que a CPU usa para
realizar operações de maneira eficiente. Alguns dos registradores mais importantes incluem o
registrador de instrução, que mantém a próxima instrução a ser executada; o registrador de
dados de memória, que armazena dados temporários; e o registrador de endereço, que mantém
o endereço da memória que está sendo acessada.
17
A linguagem assembly possui instruções básicas, como MOV (movimento), ADD (adição), SUB
(subtração) e JMP (salto condicional). Estas instruções permitem que a CPU realize operações
aritméticas, mova dados e controle o fluxo do programa.
Registrador de Status
Comentários e Rótulos
Comentários são usados para fornecer informações adicionais sobre o código, tornando-o mais
compreensível para os programadores. Rótulos são usados como pontos de referência no
código, permitindo que instruções de salto condicional sejam direcionadas a locais específicos.
Uma das habilidades mais valiosas que um programador pode adquirir é a capacidade de
incorporar código Assembly em programas C. Isso permite que partes críticas do código sejam
escritas em Assembly, que é uma linguagem de baixo nível conhecida por sua eficiência e
controle sobre o hardware. Essa fusão é possível graças às funções Assembly.
O especificador "inline" é uma ferramenta fundamental nesse processo. Ele instrui o compilador
a incorporar o corpo de uma função Assembly diretamente no local em que ela é chamada, em
vez de criar uma chamada de função normal. Isso elimina a sobrecarga de chamadas de função
e permite a otimização do código.
As funções Assembly têm uma estrutura fundamental que inclui o uso de instruções de
montagem para realizar tarefas específicas. Além disso, elas declaram operandos de entrada e
saída, especificando quais valores serão usados como entrada e quais serão modificados como
saída. Restrições de operandos ajudam a definir como esses valores podem ser usados e
modificados.
Os modificadores de restrição são essenciais para indicar que um operando é de saída e apenas
de gravação. Isso garante que os valores corretos sejam atualizados após a execução da função
Assembly.
18
Desenvolver em Assembly requer um ambiente adequado. Certifique-se de que um compilador
e depurador para Assembly estejam disponíveis. Ferramentas como o Visual Studio Code podem
ser excelentes para escrita de código Assembly e oferecem suporte a várias linguagens. Verificar
a instalação do compilador via linha de comando é essencial para garantir que tudo funcione
conforme o esperado.
Ao incorporar código Assembly, é vital lembrar que as alterações nos registradores podem afetar
o restante do programa. Portanto, é essencial conservar os registradores após a execução do
código Assembly. O uso de instruções com efeitos colaterais que não modificam registradores é
uma prática recomendada para evitar problemas inesperados.
Uso de especificadores ASM para instruir o compilador a copiar o corpo da função em cada
chamada
O uso de especificadores "ASM" não apenas permite a inclusão de código Assembly, mas
também instrui o compilador a copiar o corpo da função Assembly em cada chamada. Isso evita
o overhead de chamadas de função e pode resultar em um desempenho mais eficiente,
especialmente em operações críticas. No entanto, é importante usar essa abordagem com
cautela, pois pode tornar o código menos legível e portátil.
19
para operações e armazena o resultado de uma adição entre valores em registradores. O "EBX"
age como um ponteiro para dados. O resultado dessa operação é então atualizado em uma
variável externa, demonstrando a capacidade das funções Assembly em interagir com o
ambiente externo do programa C.
#include <stdio.h>
int soma(int x, int y){
return (x+y);
}
int main(){
int resultado=0, resultado2=0, x=3, y=5;
__asm__ (
"movl %1, %%eax;"
"movl %2, %%ebx;"
"addl %%ebx, %%eax;"
: "=r" (resultado)
: "a" (x), "b" (y));
__asm__ (
"addl %%ebx, %%eax;"
: "=r" (resultado2)
: "a" (x), "b" (y));
printf("resultado = %d\n",resultado);
printf("resultado2 = %d\n",resultado2);
Exemplo de Código
global _start
_start:
mov eax, 1
mov ebx, 42
mov ebx, 29
int 0x80
Compilação e Execução
20
./ex1
echo $?
Um programa Assembly consiste em uma série de instruções de baixo nível que controlam o
comportamento do processador. Essas instruções podem incluir movimentação de valores
para registradores, operações aritméticas, controle de fluxo e chamadas de sistema.
mov ebx, 123 ; ebx = 123
mov eax, ebx ; eax = ebx
add ebx, ecx ; ebx += ecx
sub ebx, edx ; ebx -= edx
mul ebx ; eax *= ebx
div edx ; eax /= edx
21