Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DIM EQU 5 ; Sarebbe 50.
- .MODEL small
- .STACK
- .DATA
- PREZZI DW 39, 1880, 2394, 1000, 1590
- SCONTO DW 30
- SCONTATI DW DIM DUP(0)
- TOTSCONTO DW 0
- .CODE
- .STARTUP
- MOV SI, 0
- MOV CX, DIM
- SCONTA: CALL SALDO
- ADD SI, 2
- LOOP SCONTA
- .EXIT
- SALDO PROC
- PUSH AX ; Salvataggio dei registri usati nella procedura
- PUSH BX
- PUSH DX
- MOV AX, PREZZI[SI]
- MUL SCONTO ; (DX AX) = AX * sconto, già pronto per la div
- MOV BX, 100
- DIV BX ; AX = sconto in EUR = (DX AX) / 100, il resto va in DX
- SHR BX, 2 ; Mi tengo il 50, "asticella" del resto
- CMP DX, BX ; Faccio un confronto sul resto, se è oltre 50 devo tenerne conto!
- JB NONARROT ; Se DX è sotto 50, non si arrotonda all'euro successivo
- ADD AX, 1 ; Altrimenti, se sono sopra al 50, aggiungo 1EUR allo sconto
- NONARROT: MOV BX, PREZZI[SI] ; Riprendo il prezzo di partenza
- SUB BX, AX ; Sottraggo ad esso lo sconto calcolato
- MOV SCONTATI[SI], BX ; Metto il nuovo prezzo nel vettore degli scontati
- ADD TOTSCONTO, AX ; Incremento opportunamente l'accumulatore di sconto
- POP DX ; Ripristino dei registri usati nella procedura
- POP BX
- POP AX
- RET
- SALDO ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment