Hardware, Software e Codice Macchina

// obiettivi di apprendimento
Comprendere la differenza tra hardware e software
Spiegare il ruolo del codice macchina nell’esecuzione dei programmi
Descrivere il rapporto tra linguaggi di programmazione e CPU
Interpretare il concetto di istruzione binaria
📄
Slides
Hardware Software e codice macchina

L’elaboratore come sistema integrato

Un elaboratore elettronico, per quanto sofisticato, non è in grado di svolgere alcuna funzione in assenza di un programma. Il sistema è composto da due componenti inscindibili che collaborano costantemente.

⚙ HARDWARE
La componente fisica del sistema.
CPU
Memoria (RAM, ROM)
Periferiche I/O
Bus di sistema
◈ SOFTWARE
L’insieme delle istruzioni che guidano l’esecuzione.
Fornisce istruzioni alla CPU
Gestisce la memoria
Coordina le periferiche
Permette l’interazione con l’utente
// punto chiave
La CPU non “comprende” concetti, variabili o funzioni. Interpreta esclusivamente sequenze di bit. Tutto ciò che scriviamo in un linguaggio di programmazione deve essere tradotto in questa forma prima di poter essere eseguito.

Il linguaggio della CPU — il codice macchina

Ogni istruzione che la CPU esegue è codificata in linguaggio macchina: una rappresentazione binaria che la CPU interpreta direttamente secondo la sua ISA (Instruction Set Architecture).

Ogni istruzione macchina è composta da tre elementi:

01
OPCODE
Il codice operativo — identifica il tipo di operazione (MOV, ADD, SUB…)
02
OPERANDI
I dati su cui opera l’istruzione — registri, valori immediati o indirizzi
03
INDIRIZZAMENTO
Come interpretare gli operandi — diretto, indiretto, immediato…

Esempio di istruzione in codice macchina binario:

; Istruzione binaria — carica un valore in un registro
10110000 01100001
│────────│ │────────│
  opcode    operando (valore da caricare)
// dipendenza dall’architettura
Il codice macchina è strettamente legato all’ISA del processore. Un programma compilato per architettura x86 non è direttamente eseguibile su ARM, RISC-V o MIPS — ogni famiglia di processori ha il proprio set di istruzioni binarie.

Dai linguaggi ad alto livello al binario

Scrivere direttamente in binario è praticamente impossibile per un essere umano. Per questo motivo esistono i linguaggi di programmazione — strumenti che permettono di descrivere algoritmi in forma comprensibile, delegando la traduzione in codice macchina a strumenti automatici.

I livelli di astrazione

LivelloEsempioChi lo leggeStrumento di traduzione
Alto livelloint x = 5 + 3;ProgrammatoreCompilatore / Interprete
AssemblyMOV AL, 05hProgrammatore espertoAssembler
Codice macchina10110000 00000101CPU— (eseguito direttamente)

Esempio completo — da alto livello a binario

Consideriamo l’operazione più semplice: sommare 5 + 3. Vediamo come cambia la rappresentazione ai diversi livelli.

Livello 1 — Linguaggio ad alto livello (C)

// Il programmatore scrive
int x = 5 + 3;

Livello 2 — Assembly (linguaggio intermedio)

; L'assembler traduce in istruzioni simboliche
MOV AL, 05h    ; carica il valore 5 nel registro AL
ADD AL, 03h    ; somma 3 ad AL → AL = 8

Livello 3 — Codice macchina (binario)

; La CPU vede solo sequenze di bit
10110000 00000101    ; MOV AL, 05h
00000100 00000011    ; ADD AL, 03h
// il ruolo dell’Assembly
L’Assembly rappresenta il livello intermedio tra linguaggio umano e codice macchina. Non ha le astrazioni di Python o C, ma usa nomi simbolici (MOV, ADD, AL) invece di sequenze di bit — rendendolo leggibile pur restando vicinissimo all’hardware. È per questo che studiare l’8086 in Assembly è il modo migliore per capire cosa fa davvero una CPU.

L’elaboratore — concetti fondamentali

Al livello più basso, ogni elaboratore è un sistema che:

// memoria
Memorizza dati in forma binaria — ogni informazione è rappresentata come sequenza di 0 e 1
// esecuzione
Esegue istruzioni binarie — opera esclusivamente su bit secondo il ciclo Fetch → Decode → Execute
// trasformazione
Trasforma segnali elettrici in operazioni logiche e aritmetiche tramite transistor e porte logiche
// perché studiare questo
La comprensione del codice macchina e del rapporto hardware/software è il fondamento per affrontare lo studio del microprocessore 8086. Ogni istruzione Assembly che scriveremo nelle prossime lezioni si tradurrà esattamente in queste sequenze di bit — eseguite direttamente dalla CPU transistor per transistor.

Riepilogo

  • L’elaboratore è un sistema integrato: hardware (componenti fisiche) + software (istruzioni) sono inscindibili
  • La CPU comprende esclusivamente codice macchina binario — nessun nome simbolico, solo bit
  • Ogni istruzione macchina è composta da opcode + operandi + modalità di indirizzamento
  • Il codice macchina è dipendente dall’architettura — un binario x86 non gira su ARM
  • I livelli di astrazione sono: alto livello → Assembly → codice macchina
  • L’Assembly è il livello intermedio tra linguaggio umano e CPU — usa nomi simbolici invece di bit
  • Comprendere il binario è il prerequisito fondamentale per studiare il microprocessore 8086

Lascia un commento