Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Didattica in generale > Archivio > Progetto della sicurezza di rete
 
[NASM] un programma semplice e commentato
Clicca QUI per vedere il messaggio nel forum
quakkaro
premessa: AMBIENTE LINUX

-scaricatevi le demo dal questo link : http://www.drpaulcarter.com/pcasm/linux-ex.zip

-create i vostri .asm dentro la cartella che contiene i vostri files scompattati. vi renderà il lavoro piu semplice perche avrete a disposizine il driver.o e asm_io.o necessari per eseguire i vostri super programmi che andrete a creare ed altre fonti per ulteriori copia-incolla!

- create un file e chiamatelo "test1.asm"

-incollategli il seguente codice: (puo essere formattato male a causa della risoluzione del vostro monitor)


%include "asm_io.inc"

segment .data ; inzializzo e assegno le costanti. Non possono essere piu cambiate.
;
;Stringhe di output
;

ask_first_number db "Insert plz the first num: ", 0 ;Diretteva Byte 0 = indica 1 byte (credo e/o spero)
ask_second_number db "Insert plz the second num: ", 0
response_add db "ADD result: ", 0

segment .bss ; segmento contenente le variabili nn inizializzate

input1 resd 1 ; si usa RESX -> d sta per double. in [input1] mettero il primo numero che mi verrà inserito
input2 resd 2 ; in [input2] metterò il secondo valore che verra inserito

segment .text ; segmento contenente lo stack... il codice da eseguire
global asm_main ; lancia il pezzo di codice definito asm_main

asm_main: ;pezzo di codice chiamato asm_main
enter 0,0 ;setup routine --> crea uno stack frame
pusha ; metti tutto il codice nello stack

mov eax, ask_first_number ; sposta nel regitro eax la direttiva di out db
call print_string ; chiamata di routine di asm_io

;Per utilizzare le routine di stampa, occorre caricare in ;EAX il valore corretto e utilizzare l’istruzione CALL
;per invocare la routine. L' istruzione CALL è equivalente
;ad una chiamata di funzione in un linguggio di alto
;livello. CALL sposta l'esecuzione di un'altra sezione di
;codice, e ritorna all' origine della chiamata quando la
;routine è completata
;!!!IMPORTANTE!!!!!
; ricordarsi che funziona solo se i valori sn carcati in EAX

call read_int ; richiedo input all utente
mov [input1], eax ; sposto in [input] il valore di eax
; sposto in [input] il valore di eax (utilizzo le [] per
; indicare il contenuto di input e nn l' indirizzo di
; memoria)


mov eax, ask_second_number ; metto nel registro eax -> ask_second_number
; notare come per questo tipo di direttiva nn indico il suo
; contenuto con le [] Non so il perchè ma è cosi! :|

call print_string ; chiamo la routine di asm_io

call read_int ; chiamo routine di asm_io per prendere dati da tastiera
mov [input2], eax

; faccio l' addizione

mov eax, response_add
call print_string

mov eax, [input1] ; eax = [input1]
add eax, [input2] ; eax = eax + [input2]

call print_int ; stampo a video il risultato
; !!!!ATTENZIONE!!!!!
; è un int ed uso print_int e non print_string


call print_nl ;new line -> va a capo


popa
mov eax, 0 ;ritorna a C
leave ;lascia lo stack
ret ;main return to operating system



- ora assembliamo, compiliamo, linkiamo e lanciamo:

assembliamo:
myro@myro-laptop:~/Università/SIcurezza 2/homeworkNasm$ nasm -f elf test1.asm
compiliamo il driver.c:
myro@myro-laptop:~/Università/SIcurezza 2/homeworkNasm$ gcc -c driver.c
linkiamo:
myro@myro-laptop:~/Università/SIcurezza 2/homeworkNasm$ gcc -o prg_test1 test1.o driver.o asm_io.o
eseguiamo:
myro@myro-laptop:~/Università/SIcurezza 2/homeworkNasm$ ./prg_test1


Insert plz the first num: 3
Insert plz the second num: 3
ADD result: 6


p.s.
il comando gcc -c driver.c serve a compilare. una volta fatto è nn serve più compilarlo

dicendovi di mettere tutto nella cartella delle demo di asm per far girare il tutto in realtà nn è cosi neccessario, perche vi servirebbero solo i files asm_io e driver.
purtroppo copiando solo questi files con le relative estensioni giuste, a me nn va. evidentemente serve qualche altro file che nn ho capito bene quale. se qualcuno sa la risposta, plz posti :oops:

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate