riccardinofuffolo

Calcolatori elettronici - #303 v.2

Jun 7th, 2011
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .MODEL SMALL
  2. .STACK
  3. .DATA
  4.  
  5. a DW 4            
  6. b DW -16            ; [-32768; +32767], b^2 = 1.073.676.289 --> DD [-2.147.483.648; +2.147.483.647]
  7. c DW 5              ; [-32768; +32767], max(|4ac|) = 4.294.967.296 --> DQ [-9,22E18; +9,22E18]
  8.  
  9. ; Conclusioni: la gestione del caso limite è impossibile con l'8086 (vado su 64 bit e la MUL me
  10. ; ne può gestire al più 32). Assumo i risultati su 32 bit corretti.
  11.  
  12. REA DB "Soluzioni reali.", 0DH, 0AH, "$"
  13. CPX DB "Soluzioni complesse.", 0DH, 0AH, "$"    
  14.  
  15. .CODE
  16. .STARTUP
  17.            
  18. MOV AX, b
  19. IMUL AX                      ; b^2, risultato su DX,AX.
  20. PUSH AX                      ; AX e DX mi servono per le successive moltiplicazioni -> uso lo stack
  21. PUSH DX
  22.  
  23. MOV AX, c
  24. IMUL a                       ; DX,AX = ac
  25.                              ; Ora devo moltiplicare per 4 un numero su 32 bit
  26.                    
  27. MOV CX, 2                    ; 4 = 2^2, 2 operazioni di shift  
  28. MUL4:     MOV BX, 0          ; Variabile temporanea per salvare il CF (vedi sotto)
  29.           SHL AX, 1          ; Shift a sinistra della parte bassa, MSB nel CF  
  30.           ADC BX, 0          ; In BX ho il CF che col successivo shift perderei
  31.           SHL DX, 1          ; Shift a sinistra della parte alta
  32.           ADD DX, BX         ; Sommo solo CF a DX shiftato a sinistra di 1  
  33.           LOOP MUL4          ; Ripeto l'operazione due volte. In DX,AX alla fine ho 4ac
  34.          
  35. POP CX                       ; DX della prima moltiplicazione
  36. POP BX                       ; AX della prima moltiplicazione
  37.  
  38. CMP CX, DX                   ; Confronto fra le parti alte
  39. JE LOW_PARTS                 ; Se uguali, non posso dire niente
  40. JG SOLUT_REA                 ; Se CX è più grande, b^2 > 4ac. 2 soluzioni reali
  41. JL SOLUT_CPX                 ; Se CX è più piccolo b^2 < 4ac. Soluzioni complesse coniugate.    
  42.          
  43. LOW_PARTS: CMP BX, AX        ; Confronto fra le parti basse
  44. JGE SOLUT_REA                ; Se BX è maggiore o uguale di AX, b^2 >= 4ac. 1/2 soluzioni reali.
  45. JL SOLUT_CPX                 ; Se BX è minore di AX, b^2 < 4ac. Soluzioni complesse coniugate.
  46.  
  47. SOLUT_REA: LEA DX, REA       ; Output a schermo del risultato.      
  48. JMP STAMPA
  49. SOLUT_CPX: LEA DX, CPX
  50.  
  51. STAMPA: MOV AH, 09D
  52.         INT 21H
  53.        
  54. .EXIT
  55. END
Advertisement
Add Comment
Please, Sign In to add comment