Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .686 ;Pentium Pro
- .model flat, C ;modello memoria "piatto", no segmenti, convenzione chiamata funzioni stile "C"
- .stack 4096 ;alloca memoria nello stack
- includelib msvcrt.lib ;libreria che contiene scanf, printf,...
- includelib kernel32.lib ;altra libreria di funzioni
- includelib legacy_stdio_definitions.lib
- extrn printf:PROC ;"prende" la funzione printf da stdio.h
- extrn scanf:PROC ;"prende" la funzione scanf da stdio.h
- extrn getchar:PROC
- .data ;spazio per la dichiarazione di variabili
- strOutput DB "=> Sviluppato da Rubini Angelo", 13, 10, 0
- strOutput1 DB "Inserire un numero 'N' positivo: ", 0
- strOutput2 DB "Numeri pari compresi da 0 e %d: ", 13, 10, 0
- strOutput3 DB "Numero pari: %d", 10, 0
- strInput DB "%d", 0
- iNum DD 0
- iIndex DD 0
- .code ;spazio per le istruzioni del programma
- main PROC ;inizio del processo (o funzione) "main"
- ; Istruzioni per usare lo stack in modo "sicuro"
- push EBP
- mov EBP,ESP
- ; Scrivi a schermo
- push offset strOutput1
- call printf
- ; Leggi il valore inserito dall'utente
- push offset iNum
- push offset strInput
- call scanf
- ; Muovi nel registro EBX 'iNum' (serve per scrivere a schermo)
- MOV EBX, iNum
- ; Scrivi a schermo
- push EBX
- push offset strOutput2
- call printf
- ; "Pulisci" lo stack
- add ESP, 20
- ciclo:
- mov EAX, iIndex ; Muovi nel registro EAX 'iIndex' (serve per scrivere a schermo)
- cmp iIndex, EBX ; Compara l'index al valore contenuto in EBX (ovvero 'iNum')
- JAE fine_ciclo ; Se 'iIndex' รจ maggiore di EBX allora termina il ciclo
- push EAX
- push offset strOutput3
- call printf ; Scrivi a schermo il numero 'iIndex'
- add iIndex, 2 ; Incrementa index di 2 (N + 2 => N sempre pari solo se N parte da un'altro numero pari)
- add ESP, 8 ; "Pulisce" lo stack
- JMP ciclo ; Ripete il ciclo
- fine_ciclo:
- push offset strOutput
- call printf
- add ESP, 4
- call getchar ; Termina il programma solo se l'utente preme invio
- mov ESP,EBP
- pop EBP
- ret
- main ENDP ;termina il processo (o funzione) "main"
- END ;fine programma
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement