riccardinofuffolo

Architetture dei sistemi di elaborazione - 203

Mar 8th, 2014
125
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 3
  3. ; Se vuoi testare l'altro caso usa VAR  DW 1H
  4. ; TEST: If the result of the AND is 0, the ZF is
  5. ;       set to 1, otherwise set to 0    
  6. .MODEL SMALL
  7. .STACK
  8. .DATA
  9.  
  10. VAR     DW 0BEACH
  11. DIM     DB 16    ; DIM DB TYPE VAR non funziona su EMU8086
  12. RIS     DB 0
  13.  
  14. .CODE
  15. .STARTUP
  16.  
  17. ; SP = 256
  18. ; Salvataggio dei parametri di ingresso nello stack
  19. ; 1) Variabile su cui fare il conteggio di "1"
  20. PUSH VAR            ; SP = 254
  21.  
  22. ; 2) Dimensione della variabile da analizzare
  23. XOR CX, CX
  24. MOV CL, DIM
  25. PUSH CX             ; SP = 252          
  26.  
  27. ; 3) Salvataggio di uno spazio nello stack per il
  28. ;    risultato (ottimizzare a 1 byte anzichè 2?)
  29. SUB SP, 2           ; SP = 250, qui memorizzo RIS
  30.  
  31. CALL CONTA_UNO      ; SP = 248, all'uscita SP = 250
  32.  
  33. ; Metto il risultato della procedura in CL
  34. POP CX              ; SP = 252    
  35. MOV RIS, CL
  36.                              
  37. ; "Svuoto" lo stack                              
  38. ADD SP, 4           ; SP = 256
  39.  
  40. ; Testo il 4° bit
  41. TEST RIS, 00001000B
  42. JNZ NEGA            ; Se NZ allora il 4° bit è 1
  43. JMP NOPE            ; Altrimenti no :)
  44.  
  45. NEGA: NEG RIS
  46. NOPE:
  47.  
  48. .EXIT
  49.  
  50. CONTA_UNO PROC
  51.     PUSH BP         ; SP = 246
  52.     MOV BP, SP      ; BP = 246  
  53.    
  54.     PUSH BX
  55.     PUSH CX
  56.     PUSH DX
  57.    
  58.     XOR BX, BX          ; BL = contatore bit a "1"
  59.     MOV DX, [BP + 8]    ; DX = dato da analizzare
  60.     MOV CX, [BP + 6]    ; CX = dimensione del dato
  61.    
  62.     CICLO:    
  63.        
  64.         SHR DX, 1
  65.         ADC BL, 0  
  66.        
  67.     LOOP CICLO
  68.    
  69.     MOV [BP + 4], BL    
  70.    
  71.     POP DX
  72.     POP CX
  73.     POP BX
  74.    
  75.     POP BP  
  76.     RET  
  77. CONTA_UNO ENDP
  78.  
  79. END
Advertisement
Add Comment
Please, Sign In to add comment