stai adoperando registri AL e CL ovvero 8bit
con 8 bit puoi rappresentare al massimo il numero 256
16*16 che può essere contenuto in un registro a 8 bit:
eseguendo
add al,al ...........
non fai altro che addizionare
c6 che è uguale a 198
quindi al+al = 396
quindi il registro a 8 bit non può contenere il numero 396, ma al massimo 256 che equivale a 0, per questo il flag di overflow è = 1.
Se stampi il risultato 396 con un registro a 8 bit otterrai 140
per stampare correttamente il risultato 396 devi usare un registro a 16 bit, AX, o meglio devi convertire i bit con l'apposita routine
(div / 10) per ottenere il numero in decimale (hehhehee!!)
...... stessa cosa cun la sub dove vai in negativo CF = 1 con riporto del complemento a 1 (studia il complemento a 2 per i numeri negativi)
sub cl,al cl=198 -127 = 71
71 - 99 (63h)
come vedi su 8bit il processore calcola 71-99
hai overflow e cf (carry flag) insomma il riporto come nella normale sottrazione elementare.
Istruisci bene il processore, in qunto tu devi essere di alto livello.............
x r0x
in asm, il calcolatore non sà che cosè un signed o unsigned
non sà nemmeno cosa sono i caratteri, il calcolatore riconosce solo nnumeri.
il registro AX contiene 16 bit, AL contiene gli 8 bit meno significatici di AX, ovvero AL (byte basso o 2 nibble 8 bit)
AH (8 bit più significativi)........ AH e AL possono contenere 256 = 0
AX invece 65536 = 0
AL = 1111 1111 = FF = 255 ............ complemento a 1
AL = 1000 0000 = 80 = 128 ............ complemento a 2