| 
      Sezione | 
      
       
   
    
      Indirizzi Base
    
    
    
      Registri Interni
    
      | 
    
| Schede del Tutorial | 
| Numeri e Logica Binaria | 
      SCHEDA n° 09 [ 5 di 20]  | 
   
  | 
| 
       | 
      
      Aggiornato 4 ottobre 2010 | 
| 
     | 
    
  | 
  
| L'aritmetica sui numeri binari senza segno prevede naturalmente anche sottrazione, anche in questo caso del tutto simile a quella decimale; la cifra del minuendo è sottratta dalla cifra del sottraendo colonna dopo colonna, tenendo conto dell'eventuale prestito da sottrarre con gli eventuali operandi della colonna adiacente a sinistra. | 
| La regola da applicare a ciascuna colonna è, nei 4 casi possibili: | 
| 
     
  | 
      
| 
         Binario  | 
        Decimale | 
| 
         0-0= 0 con prestito di 0  | 
        (00)2 0-0= 0 | 
| 
         
   0-1= 
  1 
  con prestito di 
  1 
  
    | 
        (10)2 2-1= 1 | 
| 
         1-0= 1 con prestito di 0  | 
        (01)2 1-0= 1 | 
| 
         1-1= 0 con prestito di 0  | 
        (01)2 1-1= 0 | 
| 
     
  | 
      
| L'interpretazione decimale della tabella mostra che la seconda sottrazione non può essere fatta se lo 0 del sottraendo non viene inteso come quello del numero 2, (10)2, ottenuto col tacito accordo di avere un prestito da togliere alle "decine" (la colonna adiacente a sinistra). | 
| Vediamo alcuni esempi: | 
| 
     
  | 
      
| 
         Binario  | 
        Decimale | 
| 
         
       100 -  | 
        
       4 - 3 = ---------- 1  | 
      
| 
     
  | 
      
| 
         Binario  | 
        Decimale | 
| 
         
       110 -  | 
        
       6 - 3 = ---------- 3  | 
      
| 
     
  | 
      
| 
         Binario  | 
        Decimale | 
| 
         
      1101 -  | 
        
      13 - 3 = ---------- 10  | 
      
| 
     
  | 
      
| Il processore 80x86 prevede 2 istruzioni specifiche, la SUB (Sottrazione aritmetica tra numeri interi) e la SBB (Sottrazione aritmetica tra numeri interi, con prestito), eseguita in pochi nanosecondi con operandi di tutte le dimensioni (a 8, 16, 32 bit, ...); a maggior ragione non è il caso perdere ulteriore tempo, data la particolare paranoia di questa operazione | 
| 
     
  | 
      
| Segnalo soltanto la possibilità di avere problemi di overflow (trabocco dei limiti consentiti) anche nell'esecuzione della sottrazione; in questo caso l'errore si manifesta quando si tenta di sottrarre un minuendo più grande del sottraendo. | 
| 
     
  | 
      
| La flag Carry assume in questo caso comunque il valore del prestito (borrow) della differenza di numeri binari della stessa dimensione ed è facilmente consultabile (insieme ad altri bit dello stesso tipo) in un particolare Registro del processore 80x86, a disposizione del programmatore assembly. | 
| 
     
  | 
      
| In ultimo possiamo mostrare la Tabella di Verità di una sottrazione aritmetica tra 2 numeri da 1 bit ciascuno: | 
| 
     
  | 
      
| A | B | Differenza | Prestito | 
| 0 | 0 | 0 | 0 | 
| 0 | 1 | 1 | 1 | 
| 1 | 0 | 1 | 0 | 
| 1 | 1 | 0 | 0 | 
  | 
| 
      
       |     
    Scheda n° 09 | 
      
       | 
    Numeri e Logica Binaria | 
     | 
    
    
     | 
    
     | 
 ||
| Scheda n° 09 - 5 | 
      
  | 
    
| 
     
  | 
  
        
  | 
    
        
  | 
    
| 
      
         
        Home 
     | 
      
  | 
    |||||||
      
  | 
       
          
        Motore Ricerca  | 
      
  |