riccardinofuffolo

Calcolatori elettronici - #501

Jun 20th, 2011
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DIM EQU 5                      ; Sarebbe 50.
  2.  
  3. .MODEL small
  4. .STACK
  5. .DATA    
  6.  
  7. PREZZI DW 39, 1880, 2394, 1000, 1590
  8. SCONTO DW 30
  9. SCONTATI DW DIM DUP(0)
  10. TOTSCONTO DW 0
  11.  
  12. .CODE
  13. .STARTUP
  14.  
  15. MOV SI, 0
  16. MOV CX, DIM
  17. SCONTA: CALL SALDO
  18.         ADD SI, 2
  19.         LOOP SCONTA
  20.  
  21. .EXIT  
  22.  
  23. SALDO PROC        
  24.     PUSH AX                    ; Salvataggio dei registri usati nella procedura
  25.     PUSH BX
  26.     PUSH DX
  27.      
  28.     MOV AX, PREZZI[SI]          
  29.     MUL SCONTO                 ; (DX AX) = AX * sconto, già pronto per la div
  30.     MOV BX, 100                
  31.     DIV BX                     ; AX = sconto in EUR = (DX AX) / 100, il resto va in DX
  32.     SHR BX, 2                  ; Mi tengo il 50, "asticella" del resto
  33.     CMP DX, BX                 ; Faccio un confronto sul resto, se è oltre 50 devo tenerne conto!                      
  34.     JB  NONARROT               ; Se DX è sotto 50, non si arrotonda all'euro successivo
  35.     ADD AX, 1                  ; Altrimenti, se sono sopra al 50, aggiungo 1EUR allo sconto
  36.    
  37.     NONARROT: MOV BX, PREZZI[SI]       ; Riprendo il prezzo di partenza
  38.               SUB BX, AX               ; Sottraggo ad esso lo sconto calcolato
  39.               MOV SCONTATI[SI], BX     ; Metto il nuovo prezzo nel vettore degli scontati      
  40.               ADD TOTSCONTO, AX        ; Incremento opportunamente l'accumulatore di sconto  
  41.              
  42.     POP DX                     ; Ripristino dei registri usati nella procedura
  43.     POP BX
  44.     POP AX          
  45.              
  46.     RET
  47. SALDO ENDP  
  48.  
  49. END
Advertisement
Add Comment
Please, Sign In to add comment