Programmare in assembly su linux

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Messaggio da Vito »

neongen ha scritto:
V ha scritto:Allora, te lo dice uno che lavora nel campo dei microcontrollori 8)
L'assemby non viene praticamente più usato, si programa direttamente in C/C++ su qualsiasi piattaforma.
Almeno che tu non lo faccia per scopi di cultura personale, non serve più imparare l'assembly...
ma va?

due righe a casaccio dal kernel linux:

Codice: Seleziona tutto

__asm__ __volatile__ (
		"\n1:\t"
		"movl (%0), %%eax\n\t"
		"movl 4(%0), %%edx\n\t"
		"lock cmpxchg8b (%0)\n\t"
		"jnz 1b"
		: /* no outputs */
		:	"D"(ptr),
			"b"(low),
			"c"(high)
		:	"ax","dx","memory");
è assembly?
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Avatar utente
V
Linux 2.x
Linux 2.x
Messaggi: 313
Iscritto il: gio 23 mar 2006, 10:54

Messaggio da V »

neongen ha scritto:
V ha scritto:Allora, te lo dice uno che lavora nel campo dei microcontrollori 8)
L'assemby non viene praticamente più usato, si programa direttamente in C/C++ su qualsiasi piattaforma.
Almeno che tu non lo faccia per scopi di cultura personale, non serve più imparare l'assembly...
ma va?

due righe a casaccio dal kernel linux:

Codice: Seleziona tutto

__asm__ __volatile__ (
		"\n1:\t"
		"movl (%0), %%eax\n\t"
		"movl 4(%0), %%edx\n\t"
		"lock cmpxchg8b (%0)\n\t"
		"jnz 1b"
		: /* no outputs */
		:	"D"(ptr),
			"b"(low),
			"c"(high)
		:	"ax","dx","memory");
Ehm, non per essere polemico, ma non è NECESSARIO al giorno d'oggi scrivere del codice in assembly, ovviamente alcune parti di codice devono essere scritte in asm in eccezzionali casi(e tu mi parli del kernel).

Ciò non toglie che conoscere l'aasembly ti aiuta a capire meglio la macchina! ;)

@kasher: che sistema vuoi apprendere?

Avatar utente
V
Linux 2.x
Linux 2.x
Messaggi: 313
Iscritto il: gio 23 mar 2006, 10:54

Messaggio da V »

John-Cena ha scritto:
neongen ha scritto:
V ha scritto:Allora, te lo dice uno che lavora nel campo dei microcontrollori 8)
L'assemby non viene praticamente più usato, si programa direttamente in C/C++ su qualsiasi piattaforma.
Almeno che tu non lo faccia per scopi di cultura personale, non serve più imparare l'assembly...
ma va?

due righe a casaccio dal kernel linux:

Codice: Seleziona tutto

__asm__ __volatile__ (
		"\n1:\t"
		"movl (%0), %%eax\n\t"
		"movl 4(%0), %%edx\n\t"
		"lock cmpxchg8b (%0)\n\t"
		"jnz 1b"
		: /* no outputs */
		:	"D"(ptr),
			"b"(low),
			"c"(high)
		:	"ax","dx","memory");
è assembly?
Coraggio non spaventarti per così popo!!!

Avatar utente
kasher
Linux 1.x
Linux 1.x
Messaggi: 175
Iscritto il: gio 20 gen 2005, 0:00
Slackware: 12.2
Kernel: 2.6.27.7
Desktop: kde 3.5.10

Messaggio da kasher »

diciamo che in alcuni casi è meglio utilizzare l' asm perchè hai più padronanza a basso livello, e poi le applicazioni scritte in asm "sono" più veloci, infatti nel kernel acune parti di codice che riguardano l' interfacciamento con i diversi canali di comunicazione son scritti in asm.
@V: PIC16F84A e derivati

Avatar utente
V
Linux 2.x
Linux 2.x
Messaggi: 313
Iscritto il: gio 23 mar 2006, 10:54

Messaggio da V »

kasher ha scritto:diciamo che in alcuni casi è meglio utilizzare l' asm perchè hai più padronanza a basso livello, e poi le applicazioni scritte in asm "sono" più veloci, infatti nel kernel acune parti di codice che riguardano l' interfacciamento con i diversi canali di comunicazione son scritti in asm.
@V: PIC16F84A e derivati
Concordo pienamente sul fattore padronanza, un pò meno sul fatto della velocità: i compilatori moderni riescono ad ottimizzare molto il codice...

Per quanto riguarda quel tipo di microcontrollori, ai tempi dell'itis li usavo e utilizzavo il loro ambiente di sviluppo per windows.
Inoltre puoi farti mandare a casa dei campioni gratuitamente!

Qua un pò di materiale!

http://sourceforge.net/search/?type_of_ ... &words=pic

_NYTRO_
Linux 2.x
Linux 2.x
Messaggi: 419
Iscritto il: sab 8 mag 2004, 0:00

Messaggio da _NYTRO_ »

Su architetture RISC, con una buona gestione delle pipeline e una buona riorganizzata al codice, la differenza tra ASM e C si sente.. ;)

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Messaggio da Vito »

V ha scritto:
John-Cena ha scritto:
neongen ha scritto: ma va?

due righe a casaccio dal kernel linux:

Codice: Seleziona tutto

__asm__ __volatile__ (
		"\n1:\t"
		"movl (%0), %%eax\n\t"
		"movl 4(%0), %%edx\n\t"
		"lock cmpxchg8b (%0)\n\t"
		"jnz 1b"
		: /* no outputs */
		:	"D"(ptr),
			"b"(low),
			"c"(high)
		:	"ax","dx","memory");
è assembly?
Coraggio non spaventarti per così popo!!!
:roll:
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Avatar utente
V
Linux 2.x
Linux 2.x
Messaggi: 313
Iscritto il: gio 23 mar 2006, 10:54

Messaggio da V »

@ _NYTRO_
Assolutamente d'accordo, ma bisogna anche valutare il rapporto (tempo di sviluppo / guadagno di prestazioni), scrivere in assembly è molto più lungo e soggetto ad errori che scrivere codice ad alto livello ;) (ma questa è un'altra storia)

@ John-Cena
Ti consiglio di non scoraggiarti: una volta imparato un'assembly passare ad uno diverso non è tanto dura, l'importante è acquisire la metalità!
E' poi da grandissime soddisfazioni avere il controllo COMPLETO del sistema
Coraggio! Ce la farai!
:study:

Nota: quello non è codice assembly vero e proprio, e codice assembly dentro del codice C

Avatar utente
DaD
Linux 2.x
Linux 2.x
Messaggi: 371
Iscritto il: mer 7 feb 2007, 18:19
Nome Cognome: Antonio Barra
Slackware: 13
Kernel: 3.0
Desktop: KDE 4
Distribuzione: Mac OS X
Contatta:

Messaggio da DaD »

Questo è un hello world in assembly.

Codice: Seleziona tutto

section .text
    global _start
_start:
        mov     edx,len 
        mov     ecx,messaggio 
        mov     ebx,1
        mov     eax,4
        int     0x80
        mov	  ebx,0
        mov     eax,1
        int     0x80
section .data

messaggio     db      "Hello, world!",0xa
len     equ     $ - messaggio
... bello nè?

Avatar utente
V
Linux 2.x
Linux 2.x
Messaggi: 313
Iscritto il: gio 23 mar 2006, 10:54

Messaggio da V »

Codice: Seleziona tutto

section .text                            // Sezione codice
    global _start
_start:
        mov     edx,len                          // Carica la lunghezza della stringa 
        mov     ecx,messaggio                        // Puntatore al messaggio 
        mov     ebx,1                            // Configura per stampa su schermo
        mov     eax,4                            //
        int     0x80                                // Chiama routine di stampa su schermo
        mov	  ebx,0                          //
        mov     eax,1                            //  ????????????????????????
        int     0x80                                //


section .data                                     // Sezione dati

messaggio     db      "Hello, world!",0xa        // Definisci messaggio
len     equ     $ - messaggio                        // Lnghezza del messaggio (posizione attuale - posizione messaggio"

Avatar utente
DaD
Linux 2.x
Linux 2.x
Messaggi: 371
Iscritto il: mer 7 feb 2007, 18:19
Nome Cognome: Antonio Barra
Slackware: 13
Kernel: 3.0
Desktop: KDE 4
Distribuzione: Mac OS X
Contatta:

Messaggio da DaD »

Si ma il commento va con ; :lol:

Avatar utente
V
Linux 2.x
Linux 2.x
Messaggi: 313
Iscritto il: gio 23 mar 2006, 10:54

Messaggio da V »

DaD ha scritto:Si ma il commento va con ; :lol:
:-' :lol:

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Messaggio da Vito »

V ha scritto:@ _NYTRO_
Assolutamente d'accordo, ma bisogna anche valutare il rapporto (tempo di sviluppo / guadagno di prestazioni), scrivere in assembly è molto più lungo e soggetto ad errori che scrivere codice ad alto livello ;) (ma questa è un'altra storia)

@ John-Cena
Ti consiglio di non scoraggiarti: una volta imparato un'assembly passare ad uno diverso non è tanto dura, l'importante è acquisire la metalità!
E' poi da grandissime soddisfazioni avere il controllo COMPLETO del sistema
Coraggio! Ce la farai!
:study:

Nota: quello non è codice assembly vero e proprio, e codice assembly dentro del codice C
Mi incuriosisce molto come linguaggio per la sua vicinanca al linguaggio macchina...:D
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Avatar utente
V
Linux 2.x
Linux 2.x
Messaggi: 313
Iscritto il: gio 23 mar 2006, 10:54

Messaggio da V »

Idem!

Avatar utente
ildiama
Linux 3.x
Linux 3.x
Messaggi: 536
Iscritto il: mar 27 dic 2005, 16:49
Slackware: mine
Kernel: 2.6.alto..
Desktop: KDE4
Località: Senigallia
Contatta:

Messaggio da ildiama »

Faccio una domanda da ignorante in materia, ma che ha provato un pò a districarsi sull'argomento e che almeno (ai tempi di win95/98) sa scrivere un "hello world" e una "moltiplicazione a 32 bit" in asm.
Che io sappia, il codice che avete scritto voi, non è l'assembly che va bene su linux.. ovvero quel codice è quello dei compilatori masm e derivati, che si emulano (emulavano) su macchine win e/o si aggiungeva "inline" a codice C. L'assembly usato su linux (quello di nasm) segue un'altra sintassi, quella ad esempio del codice inline sul kernel e le due sono molto differenti, a cominciare dall'ordine delle variabili..
Che io sappia non ci sono compilatori asm su linux per il codice che avete usato per il simpatico "hello world".

Ma dico giusto??

Rispondi