Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Architetture dei sistemi di elaborazione
- ; Esercitazione 2 - Esercizio 2
- ; Volutamente complicato
- .MODEL SMALL
- .STACK
- .DATA
- DIM EQU 8
- ;VETT DD 2,4,-3,6,5,800000FFH,0FFFFFFFFH,-7
- VETT DD 2,4,-3,6,5,80000000H,0FFFFFFFFH,-7 ; OF NEG
- VARP DD ?
- VARN DD ?
- .CODE
- .STARTUP
- ; Prima dell'esecuzione, SP = 256
- PUSH DIM ; Parametro 1, SP = 254
- PUSH OFFSET VETT ; Parametro 2, SP = 252
- PUSH OFFSET VARP ; Parametro 3, SP = 250
- PUSH OFFSET VARN ; Parametro 4, SP = 248
- CALL SOMMATORE ; SP = 246, all'uscita SP = 248
- ADD SP, 8
- .EXIT
- SOMMATORE PROC
- PUSH BP ; SP = 244
- MOV BP, SP ; BP = 244
- ; Salvataggio registri general purpose
- PUSH AX ; SP = 242
- PUSH BX ; SP = 240
- PUSH CX ; SP = 238
- PUSH DX ; SP = 236
- PUSH SI ; SP = 234
- PUSH DI ; SP = 232
- MOV SI, [BP + 8] ; SI = indirizzo partenza vettore
- MOV CX, [BP + 10] ; CX = numero elementi vettore
- MOV BL, 0FFH ; BX = flag (PN, F = tutto ok)
- SCORRI:
- MOV AX, WORD PTR [SI]
- MOV DX, WORD PTR [SI + 2]
- TEST DX, 10000000B
- JNZ NEGATIVO
- POSITIVO: TEST BL, 0F0H
- JZ PROSSIMO
- MOV DI, [BP + 6]
- ADD WORD PTR [DI], AX
- ADC WORD PTR [DI + 2], DX
- JC OVERFLOW_P
- JMP PROSSIMO
- NEGATIVO: TEST BL, 00FH
- JZ PROSSIMO
- MOV DI, [BP + 4]
- ADD WORD PTR [DI], AX
- ADC WORD PTR [DI + 2], DX
- JC OVERFLOW_N
- JMP PROSSIMO
- OVERFLOW_N: AND BL, 0F0H
- MOV DI, [BP + 4]
- MOV WORD PTR [DI], 0
- MOV WORD PTR [DI + 2], 0
- JMP PROSSIMO
- OVERFLOW_P: AND BL, 00FH
- MOV DI, [BP + 6]
- MOV WORD PTR [DI], 0
- MOV WORD PTR [DI + 2], 0
- JMP PROSSIMO
- PROSSIMO: ADD SI, 4
- LOOP SCORRI
- ; Ripristino registri general purpose
- POP DI ; SP = 234
- POP SI ; SP = 236
- POP DX ; SP = 238
- POP CX ; SP = 240
- POP BX ; SP = 242
- POP AX ; SP = 244
- POP BP ; SP = 246
- RET
- SOMMATORE ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment