diff --git a/curso/aula-01.org b/curso/aula-01.org index 43cde7e..471fe1a 100644 --- a/curso/aula-01.org +++ b/curso/aula-01.org @@ -1,13 +1,17 @@ -* Aula 1 – Arquitetura de Computadores +#+title: Aula 1 -- Arquitetura de computadores +#+author: Blau Araujo +#+email: cursos@blauaraujo.com -** Objetivos +#+options: toc:3 + +* Objetivos - Compreender os principais componentes de um computador sob o modelo de von Neumann. - Reconhecer os registradores da arquitetura x86_64. - Entender a relação entre hardware e código Assembly. - Executar o primeiro programa Assembly com uma chamada de sistema. -** Modelo de von Neumann +* Modelo de von Neumann Um computador possui: @@ -32,7 +36,7 @@ Como era antes: - A CPU executa o ciclo: busca → decodifica → executa, mas pode realizar a busca de dados e instruções em paralelo. -*** Influência nas arquiteturas modernas +** Influência nas arquiteturas modernas O modelo de Von Neumann influenciou profundamente as arquiteturas modernas de computadores, estabelecendo a base para a maioria dos designs de sistemas @@ -74,7 +78,7 @@ computacionais atuais. Algumas das principais influências incluem: não estágios do processamento, são executadas simultaneamente. #+end_quote -*** Gargalo de Von Neumann +** Gargalo de Von Neumann O gargalo de Von Neumann é uma limitação de desempenho causada pelo fato de que a CPU e a memória compartilham o mesmo barramento para acessar instruções e @@ -99,7 +103,7 @@ que usa memórias separadas internamente (como em caches) para dados e instruç mantendo um espaço de memória unificado do ponto de vista do programador. #+end_quote -** Arquiteturas x86 +* Arquiteturas x86 A arquitetura x86 é uma família de conjuntos de instruções (ISA – /Instruction Set Architecture/) baseada no modelo de Von Neumann e desenvolvida originalmente @@ -121,7 +125,7 @@ com AMD64. Assim, AMD64 é a origem técnica da arquitetura x86 de 64 bits utili na maioria dos sistemas modernos. #+end_quote -*** Características +** Características - ISA complexa (CISC – /Complex Instruction Set Computing/), com centenas de instruções e modos de endereçamento. @@ -140,7 +144,7 @@ da arquitetura (como troca de contexto e proteção básica), mas a segmentaçã como era usada no MS-DOS, é totalmente evitada. #+end_quote -*** Otimizações em relação ao modelo de Von Neumann +** Otimizações em relação ao modelo de Von Neumann A arquitetura x86 é uma evolução prática do modelo de Von Neumann, com otimizações como: @@ -149,7 +153,7 @@ otimizações como: - Execução fora de ordem (/out-of-order execution/). - /Pipelines/ e paralelismo interno. -*** Comparativo com outras arquiteturas +** Comparativo com outras arquiteturas Todas as arquiteturas modernas seguem, em maior ou menor grau, os princípios do modelo de Von Neumann. No entanto, diferem na forma como organizam e executam @@ -186,7 +190,7 @@ instruções. Veja o comparativo: | ARM | RISC | Média | Baixo | Celulares, IoT, Apple M1+ | | RISC-V | RISC | Baixa | Baixo | Pesquisa, sistemas embarcados | -** Componentes de uma CPU x86_64 +* Componentes de uma CPU x86_64 - Unidade de Controle (/Control Unit/ - CU) :: @@ -248,7 +252,7 @@ instruções. Veja o comparativo: Responsável por lidar com interrupções externas e internas, gerenciando a prioridade e o tratamento adequado das interrupções no sistema. -** Principais registradores e seus propósitos (64 bits) +* Principais registradores e seus propósitos (64 bits) - =RAX=: acumulador/propósito geral - =RBX=: base/propósito geral @@ -264,7 +268,7 @@ instruções. Veja o comparativo: A arquitetura x86_64 ainda inclui oito registradores de propósito geral, de =R8= a =R15=. -** Primeiro exemplo em Assembly x86_64 +* Primeiro exemplo em Assembly x86_64 #+begin_src asm ; Retorna 42 como estado de término @@ -278,7 +282,7 @@ _start: syscall #+end_src -*** Compilação e execução (no terminal) +** Compilação e execução (no terminal) #+begin_example :~$ nasm -f elf64 -o exit42.o exit42.asm @@ -288,13 +292,13 @@ _start: 42 #+end_example -** Exercícios sugeridos +* Exercícios sugeridos 1. Modifique o programa Assembly para retornar "sucesso". 2. Desmonte (=objdump -d=) os binários gerados e compare os códigos de máquina. 3. Use =strace ./exit42= para verificar a chamada de sistema realizada. -** Referências +* Referências - [[https://namazso.github.io/x86/][Intel® 64 and IA-32 Instruction Set Reference]] - [[https://wiki.osdev.org/CPU_Registers_x86-64][OS Dev: CPU Registers x86-64]]