Confronto di due signed (in compl. a 2) Caso 1: numeri dello stesso segno Non ci può essere overflow (sottraendo, viene fuori un numero più piccolo in modulo) OF=0 Es. (rappres. su 4 bit, range rappresentabile [–8, 7]) A=0101 (+5)A - B = = 0010 B=0011 (+3)CF=1 SF=0 OF=0 ZF=0 A=1011 (-5)A - B = = 1110 B=1101 (-3)CF=0 SF=1 OF=0 ZF=0 Basta esaminare il segno del risultato (SF)
Confronto di due signed (in compl. a 2) Caso 2: numeri di segno opposto, nessun overflow (OF=0) Es. (rappres. su 4 bit, range rappresentabile [–8, 7]) A=0101 (+5)A - B = = 0110 B=1111 (-1)CF=0 SF=0 OF=0 ZF=0 A= 1111 (-1)A - B = = 1010 B= 0101 (+5)CF=1 SF=1 OF=0 ZF=0 Basta esaminare il segno del risultato (SF)
Confronto di due signed (in compl. a 2) Caso 3: numeri di segno opposto, overflow (sottraendo un negativo da un positivo viene fuori un negativo, o sottraendo un positivo da un negativo viene fuori un positivo) (OF=1) Es. (rappres. su 4 bit, range rappresentabile [–8, 7]) A=0011 (+3)A - B = = 1000 B=1011 (-5)CF=0 SF=1 OF=1 ZF=0 A= 1100 (-4)A - B = = 0111 B= 0101 (+5)CF=1 SF=0 OF=1 ZF=0
Confronto di due signed (in compl. a 2) Caso 3: numeri di segno opposto, overflow In questo caso (OF=1): se SF=1, si e avuto overflow da positivi negativi. Quindi si e sottratto un negativo da un positivo il primo numero e maggiore del secondo se SF=0, si e avuto overflow da negativi positivi. Quindi si e sottratto un positivo da un negativo il primo numero e minore del secondo
Confronto di due signed (in compl. a 2) Mettendo tutto insieme: Il primo numero e maggiore del secondo se ~(OF ^ SF) e TRUE In realtà va anche verificato che il risultato non sia nullo (la precedente e la condizione TRUE quando il primo numero è >= del secondo) Quindi: A > B se A - B (o il compare, che è lo stesso) setta i flag in maniera tale che ~ (OF ^ SF) & ~ZF == TRUE