msg1 db "Ciao a tutti." ; stringa messaggio Lmsg1 $-msg1 ; calcolo Lunghezza stringa messaggio
buf1 resb 256 ; spazio/blocco di 256 byte di memoria RAM
Dovendo ripetutamente compilare i sorgenti nasm è certamente noioso ridigitare continuamente le appropriate righe di comando, come visto in questa parte introduttiva di nasm. Per le esercitazioni correnti conviene utilizzare lo script a che serve ad eseguire, in successione, le operazioni di: compilazione, link, esecuzione. Lo script, inoltre, pur dessendo dedicato a semplici applicazioni didattiche, gestisce automaticamente le varie situazioni che si presentano nel corso dello sviluppo di software asm linux. Lo trovate nel DVD che vi ho distribuito e nelle installazioni Linux di laboratorio, ma non è uno strumento presente nelle normali distribuzioni Linux.
Ecco come si usa lo script:
In caso di segnalazione d'errore occorre intervenire modificando opportunamente il listato di prova.asm, salvando e ripetendo il comando precedente.
Non disponendo dello script a è possibile scaricarlo da Internet, e renderlo poi utilizzabile con qualche passaggio aggiuntivo. Ad esempio, per scaricare lo script a nella propria cartella di lavoro esercizi-nasm basta eseguire i comandi seguenti:
A questo punto per eseguire il ciclo di operazioni compilazione-link-esecuzione, per un generico programma nome.asm, basterà digitare una delle seguenti 2 righe di comando:
La prima riga va usata se il sorgente non contiene chiamate a funzioni di libreria gcc, cioè è scritto in puro assembly. La seconda riga va usata se il listato contiene riferimenti a funzioni gcc. I caratteri ./ anteposti ad a sono indispensabili per obbligare il sistema operativo a cercare il comando nella propria cartella di lavoro esercizi-nasm, anzichè nelle normali cartelle di sistema.
Se si dispone dei diritti di amministrazione è opportuno copiare il file a nella cartella /usr/local/bin evitando, così, la noia di dover premettere tutte le volte i caratteri ./, rendendo di fatto a uno dei normali comandi di sistema. Questo è quanto accade nel DVD che vi ho distribuito e nei computer del laboratorio.
Lo script può essere, ovviamente, migliorato ed esteso a situazioni più complesse, qui trovi il listato di a .
;---------------------------------------- Sezione Dati Inizializzati section .data msg1 db "ABCD" ; stringa espressa tutta con normali caratteri msg1bis db 'ABCD' ; la stessa stringa precedente racchiusa da apici semplici msg1ter db 41h,01000010b,'C',"D" ; la stessa stringa espressa in esadecimale, binario e caratteri msg2 db "ABCD",0Dh,0Ah ; stringa mista, composta da caratteri e codici ASCII esadecimali msg2bis db 41h,42h,43h,44h,0Dh,0Ah ; la stessa stringa espressa solo con codici ASCII hex msg2ter db 65,66,67,68,13,10 ; la stessa stringa espressa solo con codici ASCII dec msg3 times 64 db "x" ; Genera automaticamente una stringa di 64 caratteri "x" msg3bis times 65 db 0 ; Questa volta la stringa contiene 64 codici 0
;--------------------------------------- Sezione Definizione Costanti %define BUFLEN 100 ;---------------------------------------- Sezione Dati NON Inizializzati section .bss buf1 resb 256 ; riserva un blocco di 256 byte buf2 resb BUFLEN ; riserva un blocco di 100 byte
Dacché "i governi hanno origine nella identità morale degli uomini", il riconoscimento di una comune natura umana con interessi comuni deve indurre gli uomini razionali a una comune fratellanza politica; e finché essi non diverranno abbastanza saggi per cooperare volontariamente al comune benessere, non è possibile alcun governo buono.
Ralph Waldo Emerson