🚀 Capítulo 01: Arquitetura de Von Neumann e Representação Numérica

🎯 Objetivos da Aula

Ao final desta aula, você será capaz de:

  1. Compreender o funcionamento interno de um computador baseado na Arquitetura de Von Neumann.
  2. Identificar as funções da CPU (ALU, UC, Registradores), Memória Principal (RAM) e Barramentos.
  3. Converter valores entre os sistemas de numeração Decimal, Binário e Hexadecimal.
  4. Escrever seu primeiro programa em linguagem C para exibir a representação de dados na tela.

🧠 1. Fundamentos Teóricos: A Arquitetura de Von Neumann

Proposta por John von Neumann em 1945, a arquitetura de Von Neumann estabeleceu o modelo onde dados e instruções de programas compartilham a mesma memória principal.

flowchart TD
    subgraph CPU ["Central Processing Unit (CPU)"]
        UC["Unidade de Controle (UC)"]
        ULA["Unidade Lógica e Aritmética (ULA)"]
        REG["Registradores (PC, MAR, MDR, ACC)"]
    end
    
    MEM["Memória Principal (RAM)\n(Instruções + Dados)"]
    IO["Dispositivos de Entrada/Saída\n(Teclado, Monitor, Disco)"]
    
    CPU <-->|"Barramento de Dados / Endereço"| MEM
    CPU <-->|"Barramento de Controle"| IO

O Ciclo de Busca e Execução (Fetch-Decode-Execute)

Toda instrução executada pelo computador passa obrigatoriamente por 3 etapas:

  1. Busca (Fetch): A CPU busca a instrução localizada no endereço de memória apontado pelo Program Counter (PC).
  2. Decodificação (Decode): A Unidade de Controle interpreta a instrução e identifica os operandos necessários.
  3. Execução (Execute): A Unidade Lógica e Aritmética (ULA) realiza a operação (ex.: soma, comparação) e armazena o resultado em um registrador ou na memória.

🔢 2. Representação Numérica na Memória (Bits, Bytes e Bases)

O computador utiliza o sistema Binário (Base 2) devido aos estados elétricos dos transistores: ligado (1) e desligado (0).

  • 1 Bit: Menor unidade de informação (0 ou 1).
  • 1 Byte: Conjunto de 8 Bits ( combinações possíveis, de 0 a 255).
  • Hexadecimal (Base 16): Agrupa 4 bits (nibble) para facilitar a leitura humana (0-9 e A-F).

Tabela de Conversão Rápida

DecimalBinário (8 bits)Hexadecimal
00000 00000x00
150000 11110x0F
1281000 00000x80
2551111 11110xFF

💻 3. Prática Guiada em C: Exibindo Dados na Tela

Vamos escrever o programa clássico primeiro_programa.c para verificar o funcionamento do compilador e imprimir valores decimais e hexadecimais.

#include <stdio.h>
 
int main() {
    int valor = 255;
    
    printf("=========================================\n");
    printf("   BEM-VINDO AO CURSO DE COMPUTACAO C   \n");
    printf("=========================================\n");
    printf("Valor em Decimal     : %d\n", valor);
    printf("Valor em Hexadecimal : 0x%X\n", valor);
    printf("Tamanho na Memoria  : %lu Byte(s)\n", sizeof(valor));
    printf("=========================================\n");
    
    return 0;
}

Compilação e Execução via Linha de Comando:

gcc primeiro_programa.c -o primeiro_programa
./primeiro_programa

⚔️ 4. Desafios Práticos (Exercícios 30/50/20)

🥉 Nível Bronze (Fixação)

  1. Converta o número decimal 42 para Binário e Hexadecimal no papel.
  2. Explique a diferença entre a função da Unidade Lógica e Aritmética (ULA) e a Unidade de Controle (UC).

🥈 Nível Prata (Aplicação)

  1. Escreva um programa em C que declare três variáveis inteiras com os valores 10, 31 e 100 e imprima cada uma delas nos formatos Decimal e Hexadecimal.

🥇 Nível Ouro (Desafio)

  1. Modifique o programa para utilizar o operador sizeof() e exibir o tamanho na memória dos tipos primitivos char, short, int, long e double.

💡 Gabaritos Sanfonados de Resposta

💡 Ver Gabarito do Nível Bronze
  1. Decimal 42:
    • Binário: 0010 1010 ()
    • Hexadecimal: 0x2A
  2. Diferença: A UC gerencia o fluxo de instruções e decodifica o que deve ser feito. A ULA realiza os cálculos matemáticos e comparações lógicas reais.
💡 Ver Gabarito do Nível Prata & Ouro (Código C)
#include <stdio.h>
 
int main() {
    printf("Tamanho char   : %lu Byte(s)\n", sizeof(char));
    printf("Tamanho short  : %lu Byte(s)\n", sizeof(short));
    printf("Tamanho int    : %lu Byte(s)\n", sizeof(int));
    printf("Tamanho long   : %lu Byte(s)\n", sizeof(long));
    printf("Tamanho double : %lu Byte(s)\n", sizeof(double));
    return 0;
}

📚 Referências Teóricas Oficiais

  • STALLINGS, William. Arquitetura e Organização de Computadores. 10ª Edição. Pearson, 2017. Cap. 3.
  • KERNIGHAN, Brian W.; RITCHIE, Dennis M.. A Linguagem de Programação C. Campus/Elsevier, 1989. Cap. 1.

⬅️ Voltar ao Sumário da Fase 01 | Próximo Capítulo (Linguagem C) ➡️