Sistemi E Reti

Complemento A Due

Emu8086: Rappresentazione dei numeri interi relativi in Assembly x86. Approfondimento sul Complemento a Due e gestione dei numeri con segno nei registri a 8 bit.

Durata

50 minuti

Software

emu8086

All'interno di una CPU non esiste un simbolo grafico per il segno meno (-). Tutto deve essere rappresentato tramite 0 e 1. Il metodo universale utilizzato dall'architettura x86 è il Complemento a Due.

Il Bit di Segno (MSB): In una sequenza di 8 bit (un byte), il bit più a sinistra è chiamato MSB (Most Significant Bit).

  • Se MSB = 0: il numero è positivo.
  • Se MSB = 1: il numero è negativo.

Come si ottiene un numero negativo?

Per trasformare un numero positivo nel suo corrispondente negativo, la CPU esegue due passaggi logici:

  • Inversione (NOT): Si invertono tutti i bit (0 diventa 1, 1 diventa 0).
  • Incremento (+1): Si aggiunge 1 al risultato ottenuto.
Decimale Binario (8 bit) Inversione (NOT) Aggiungi 1 (+1) Risultato (Negativo) Hex (emu8086)
1 0000 0001 1111 1110 + 1 1111 1111 FFh
5 0000 0101 1111 1010 + 1 1111 1011 FBh
10 0000 1010 1111 0101 + 1 1111 0110 F6h
127 0111 1111 1000 0000 + 1 1000 0001 81h

LABORATORIO

Esercitazione: Visualizzare i negativi in emu8086

Osserveremo come l'emulatore interpreta i valori esadecimali alti come numeri negativi.


1 Analisi del valore FFh

Esegui questo codice e osserva attentamente il registro AL:


ORG 100h
MOV AL, -1    ; Carico meno uno
RET

Osservazione: AL conterrà FF. Se apri il "Converter" di emu8086 e scrivi FF in esadecimale, vedrai che nel campo "signed 8-bit" appare proprio -1.


2 Esercizio: Il "Giro Completo"

Cosa succede se aggiungiamo 1 a un registro che contiene FFh (-1)?


ORG 100h
MOV AL, 0FFh  ; Rappresenta -1
ADD AL, 1     ; -1 + 1 dovrebbe fare 0
RET

Riflessione: AL diventa 00h. La CPU ha eseguito correttamente l'operazione aritmetica ignorando il riporto finale, dimostrando che il complemento a due funziona perfettamente per le somme algebriche.


3 Sfida Matematica

Calcola manualmente su carta il complemento a due del numero decimale 5 (usa 8 bit) e poi verifica il risultato scrivendo MOV BL, -5 nell'emulatore. Quale valore esadecimale appare in BL?






Complemento a due, Numeri negativi, Overflow, Sistemi e Reti, Assembly,