Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DIM EQU 6
- .MODEL small
- .STACK
- .DATA
- ANNI DW 1945, 2008, 1800, 2006, 1748, 1600
- RISULTATO DB DIM DUP(0)
- .CODE
- .STARTUP
- LEA SI, ANNI ;
- LEA DI, RISULTATO ; Parametri di input
- MOV BX, DIM ;
- CALL BISESTILI
- .EXIT
- BISESTILI PROC
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- ; SI e DI li salvo?
- MOV CX, BX ; Contatori fuori dai cicli, sennò cicli verso l'infinito.
- BISESTO: MOV AX, [SI] ; Pongo l'anno in DX AX
- MOV DX, 0
- MOV BX, 100
- DIV BX ; Verifico se è divisibile per 100. Il resto è in DX
- CMP DX, 0 ; E' divisibile per 100? Se sì / no, devo fare ulteriori test.
- JE QUATTROCENTO ; E' divisibile per 100, devo vedere se anche per 400.
- JNE QUATTRO ; Non è divisibile per 100, devo vedere se per 4. Niente JMP.
- QUATTROCENTO: MOV AX, [SI] ; Analogo a prima.
- MOV DX, 0
- MOV BX, 400
- DIV BX
- CMP DX, 0 ; Se arrivo qui è sicuramente divisibile per 100
- JE BISESTILE ; Qui anche per 400.
- JNE NONBISESTILE ; Qui non per 400. Non c'è bisogno di JMP.
- QUATTRO: MOV AX, [SI] ; Tutto uguale
- MOV DX, 0
- MOV BX, 4
- DIV BX
- CMP DX, 0
- JNE NONBISESTILE ; Mi risparmio un salto
- BISESTILE: INC [DI] ; Se è bisestile o se l'ultimo salto fallisce, va qui
- NONBISESTILE: ADD SI, 2 ; Se non è bisestile passo al prossimo anno
- INC DI ; Occhio a non fare ADD DI, 2, sono byte!
- LOOP BISESTO ; e ripeto il procedimento
- POP DX
- POP CX
- POP BX
- POP AX
- RET
- BISESTILI ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment