riccardinofuffolo

Architetture dei sistemi di elaborazione - 202

Mar 8th, 2014
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Architetture dei sistemi di elaborazione
  2. ; Esercitazione 2 - Esercizio 2
  3. ; Volutamente complicato
  4. .MODEL SMALL
  5. .STACK
  6. .DATA
  7.  
  8. DIM     EQU 8
  9. ;VETT    DD 2,4,-3,6,5,800000FFH,0FFFFFFFFH,-7
  10. VETT    DD 2,4,-3,6,5,80000000H,0FFFFFFFFH,-7   ; OF NEG      
  11. VARP    DD ?
  12. VARN    DD ?
  13.  
  14. .CODE
  15. .STARTUP    
  16.  
  17. ; Prima dell'esecuzione, SP = 256
  18. PUSH DIM                ; Parametro 1, SP = 254
  19. PUSH OFFSET VETT        ; Parametro 2, SP = 252
  20. PUSH OFFSET VARP        ; Parametro 3, SP = 250
  21. PUSH OFFSET VARN        ; Parametro 4, SP = 248
  22. CALL SOMMATORE          ; SP = 246, all'uscita SP = 248
  23. ADD SP, 8
  24.  
  25. .EXIT
  26.  
  27. SOMMATORE PROC
  28.     PUSH BP             ; SP = 244
  29.     MOV BP, SP          ; BP = 244    
  30.    
  31.     ; Salvataggio registri general purpose
  32.     PUSH AX             ; SP = 242
  33.     PUSH BX             ; SP = 240
  34.     PUSH CX             ; SP = 238
  35.     PUSH DX             ; SP = 236
  36.     PUSH SI             ; SP = 234
  37.     PUSH DI             ; SP = 232
  38.    
  39.     MOV SI, [BP + 8]        ; SI = indirizzo partenza vettore
  40.     MOV CX, [BP + 10]       ; CX = numero elementi vettore
  41.     MOV BL, 0FFH            ; BX = flag (PN, F = tutto ok)
  42.     SCORRI:
  43.  
  44.             MOV AX, WORD PTR [SI]
  45.             MOV DX, WORD PTR [SI + 2]
  46.             TEST DX, 10000000B
  47.             JNZ  NEGATIVO
  48.            
  49.             POSITIVO:   TEST BL, 0F0H
  50.                         JZ PROSSIMO
  51.                         MOV DI, [BP + 6]
  52.                         ADD WORD PTR [DI], AX
  53.                         ADC WORD PTR [DI + 2], DX
  54.                         JC  OVERFLOW_P
  55.                         JMP PROSSIMO
  56.            
  57.             NEGATIVO:   TEST BL, 00FH
  58.                         JZ PROSSIMO                        
  59.                         MOV DI, [BP + 4]
  60.                         ADD WORD PTR [DI], AX
  61.                         ADC WORD PTR [DI + 2], DX
  62.                         JC  OVERFLOW_N
  63.                         JMP PROSSIMO
  64.  
  65.             OVERFLOW_N: AND BL, 0F0H
  66.                         MOV DI, [BP + 4]
  67.                         MOV WORD PTR [DI], 0
  68.                         MOV WORD PTR [DI + 2], 0
  69.                         JMP PROSSIMO    
  70.                        
  71.             OVERFLOW_P: AND BL, 00FH
  72.                         MOV DI, [BP + 6]
  73.                         MOV WORD PTR [DI], 0
  74.                         MOV WORD PTR [DI + 2], 0
  75.                         JMP PROSSIMO
  76.            
  77.             PROSSIMO:   ADD SI, 4
  78.            
  79.     LOOP SCORRI
  80.    
  81.     ; Ripristino registri general purpose
  82.     POP DI              ; SP = 234
  83.     POP SI              ; SP = 236
  84.     POP DX              ; SP = 238
  85.     POP CX              ; SP = 240
  86.     POP BX              ; SP = 242
  87.     POP AX              ; SP = 244
  88.                
  89.     POP BP              ; SP = 246
  90.     RET  
  91. SOMMATORE ENDP
  92.  
  93.  
  94. END
Advertisement
Add Comment
Please, Sign In to add comment