Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Didattica > Didattica in generale > Archivio > Progetto della sicurezza di rete > [NASM] un programma semplice e commentato
  Last Thread   Next Thread
Author
Thread    Expand all | Contract all    Post New Thread    Post A Reply
Collapse
quakkaro
.arcimaestro.

User info:
Registered: Mar 2005
Posts: 363 (0.05 al dì)
Location: Città
Corso: Corso di Studi
Anno: Anno di Corso
Time Online: 1 Day, 22:48:42 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
[NASM] un programma semplice e commentato

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:

__________________
--------railed------->

Last edited by quakkaro on 08-11-2006 at 15:49

08-11-2006 15:46
Click Here to See the Profile for quakkaro Click here to Send quakkaro a Private Message Visit quakkaro's homepage! Find more posts by quakkaro Add quakkaro to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 00:55.    Post New Thread    Post A Reply
  Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
 

Powered by: 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
Pagina generata in 0.027 seconds (76.46% PHP - 23.54% MySQL) con 30 query.