Advertisement
SickBtw

Esercizio 1 Sistemi e Reti Rubini Angelo

Jan 5th, 2021
599
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .686                                        ;Pentium Pro
  2. .model flat, C                              ;modello memoria "piatto", no segmenti, convenzione chiamata funzioni stile "C"
  3. .stack 4096                                 ;alloca memoria nello stack
  4.  
  5. includelib msvcrt.lib                       ;libreria che contiene scanf, printf,...
  6. includelib kernel32.lib                     ;altra libreria di funzioni
  7. includelib legacy_stdio_definitions.lib
  8. extrn printf:PROC                           ;"prende" la funzione printf da stdio.h
  9. extrn scanf:PROC                            ;"prende" la funzione scanf da stdio.h
  10. extrn getchar:PROC
  11.  
  12. .data                                       ;spazio per la dichiarazione di variabili
  13.  
  14. strOutput DB "=> Sviluppato da Rubini Angelo", 13, 10, 0
  15. strOutput1 DB "Inserire un numero 'N' positivo: ", 0
  16. strOutput2 DB "Numeri pari compresi da 0 e %d: ", 13, 10, 0
  17. strOutput3 DB "Numero pari: %d", 10, 0
  18. strInput DB "%d", 0
  19. iNum DD 0
  20. iIndex DD 0
  21.  
  22. .code                                       ;spazio per le istruzioni del programma
  23.  
  24. main PROC                                   ;inizio del processo (o funzione) "main"
  25.  
  26.     ; Istruzioni per usare lo stack in modo "sicuro"
  27.     push EBP
  28.     mov EBP,ESP
  29.  
  30.     ; Scrivi a schermo
  31.     push offset strOutput1
  32.     call printf
  33.    
  34.     ; Leggi il valore inserito dall'utente
  35.     push offset iNum
  36.     push offset strInput
  37.     call scanf
  38.  
  39.     ; Muovi nel registro EBX 'iNum' (serve per scrivere a schermo)
  40.     MOV EBX, iNum
  41.  
  42.     ; Scrivi a schermo
  43.     push EBX
  44.     push offset strOutput2
  45.     call printf
  46.  
  47.     ; "Pulisci" lo stack
  48.     add ESP, 20
  49.  
  50.     ciclo:
  51.         mov EAX, iIndex                 ; Muovi nel registro EAX 'iIndex' (serve per scrivere a schermo)
  52.         cmp iIndex, EBX                 ; Compara l'index al valore contenuto in EBX (ovvero 'iNum')
  53.         JAE fine_ciclo                  ; Se 'iIndex' รจ maggiore di EBX allora termina il ciclo
  54.  
  55.         push EAX
  56.         push offset strOutput3
  57.         call printf                     ; Scrivi a schermo il numero 'iIndex'
  58.  
  59.         add iIndex, 2                   ; Incrementa index di 2 (N + 2 => N sempre pari solo se N parte da un'altro numero pari)
  60.         add ESP, 8                      ; "Pulisce" lo stack
  61.  
  62.         JMP ciclo                       ; Ripete il ciclo
  63.  
  64.     fine_ciclo:
  65.     push offset strOutput
  66.     call printf
  67.    
  68.     add ESP, 4
  69.    
  70.     call getchar                    ; Termina il programma solo se l'utente preme invio
  71.  
  72.     mov ESP,EBP
  73.     pop EBP
  74.     ret
  75. main ENDP                               ;termina il processo (o funzione) "main"
  76.  
  77. END                                         ;fine programma
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement