Assembly 8086 on linux

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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.
Rispondi
Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Assembly 8086 on linux

Messaggio da Blallo »

Esiste un modo per compilare assembly 8086 su linux con sintassi intel?

Avatar utente
lennynero
Linux 3.x
Linux 3.x
Messaggi: 641
Iscritto il: lun 3 mag 2004, 0:00
Nome Cognome: Luigi Picaro
Slackware: 15.0-x64
Kernel: 6.1
Desktop: Xfce-4.16
Località: Salerno

Re: Assembly 8086 on linux

Messaggio da lennynero »

as e as86 sono compilatori assembly già presenti in slackware, penso che con opportuni flag si potrebbe ottimizzare la compilazione per intel, anche se non sono molto ferrato sull'argomento. Facendo una rapida ricerca ho trovato questo: http://www.niksula.cs.hut.fi/~mtiihone/intel2gas/, potrebbe esseeti utile...

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: Assembly 8086 on linux

Messaggio da 414N »

Ci sono anche NASM e YASM, con una sintassi simile a quella Intel.

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: Assembly 8086 on linux

Messaggio da Blallo »

414N ha scritto:Ci sono anche NASM e YASM, con una sintassi simile a quella Intel.
ho provato a dare in pasto a nasm questo

Codice: Seleziona tutto

.MODEL small
.STACK
.DATA
    VAR DW ?
.CODE
.STARTUP
    MOV VAR, 0
.EXIT
END
ma non ne vuole sapere di compilare :(

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: Assembly 8086 on linux

Messaggio da 414N »

jimmy_page_89 ha scritto:
414N ha scritto:Ci sono anche NASM e YASM, con una sintassi simile a quella Intel.
ho provato a dare in pasto a nasm questo

Codice: Seleziona tutto

.MODEL small
.STACK
.DATA
    VAR DW ?
.CODE
.STARTUP
    MOV VAR, 0
.EXIT
END
ma non ne vuole sapere di compilare :(
Ah, che nostalgia l'ASM! :)
Avevo detto che supportano una sintassi simile Intel. Quelle macro che usi sinceramente non so da quale "standard" derivino.
Qui trovi qualche esempio di applicaizioni al livello di hello world per nasm: http://www.csee.umbc.edu/portal/help/nasm/sample.shtml

Avatar utente
phobos3576
Staff
Staff
Messaggi: 2980
Iscritto il: dom 17 apr 2005, 0:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Assembly 8086 on linux

Messaggio da phobos3576 »

jimmy_page_89 ha scritto:ho provato a dare in pasto a nasm questo

Codice: Seleziona tutto

.MODEL small
.STACK
.DATA
    VAR DW ?
.CODE
.STARTUP
    MOV VAR, 0
.EXIT
END
ma non ne vuole sapere di compilare :(
Prova:

Codice: Seleziona tutto

section	.text
    global _start			; dichiara l'entry point

_start:					    ; entry point

	mov	var, 0
	
	mov	eax,1	         ; system call (sys_exit)
	int	0x80	          ; chiama il kernel per l'uscita

section	.data

   var	resw   1         ; riserva 1 WORD a var

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: Assembly 8086 on linux

Messaggio da Blallo »

phobos3576 ha scritto:Prova:

Codice: Seleziona tutto

section	.text
    global _start			; dichiara l'entry point

_start:					    ; entry point

	mov	var, 0
	
	mov	eax,1	         ; system call (sys_exit)
	int	0x80	          ; chiama il kernel per l'uscita

section	.data

   var	resw   1         ; riserva 1 WORD a var

Codice: Seleziona tutto

6: error: invalid combination of opcode and operands
13: warning: uninitialized spacedeclared in non-BSS section `.data': zeroing

Avatar utente
phobos3576
Staff
Staff
Messaggi: 2980
Iscritto il: dom 17 apr 2005, 0:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Assembly 8086 on linux

Messaggio da phobos3576 »

jimmy_page_89 ha scritto:

Codice: Seleziona tutto

6: error: invalid combination of opcode and operands
13: warning: uninitialized spacedeclared in non-BSS section `.data': zeroing
Errori madornali dovuti alla fretta di rispondere.

1) In NASM, var è l'indirizzo della variabile, mentre [var] è il suo contenuto; quindi, bisogna scrivere:

Codice: Seleziona tutto

mov word [var], 0
word è necessario per specificare la dimensione del trasferimento dati (da valore immediato a memoria).

2) In Linux, la section .data è per i dati inizializzati; per i dati non inizializzati bisogna usare section .bss

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: Assembly 8086 on linux

Messaggio da Blallo »

grazie mille, ora funziona
ma ciò comunque non risolve il mio problema...
ma oggi il prof ci ha detto che quel codice va su MASM
al massimo chiederò lumi domani

Avatar utente
phobos3576
Staff
Staff
Messaggi: 2980
Iscritto il: dom 17 apr 2005, 0:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Assembly 8086 on linux

Messaggio da phobos3576 »

Si ma, attenzione a non confondere la struttura del programma con il suo contenuto.

La struttura di un programma Assembly varia a seconda del sistema operativo; ad esempio, quando programmi sotto Linux devi usare apposite sezioni per codice e dati che sono differenti da quelle usate sotto Windows.
Il contenuto del programma invece lo puoi scrivere seguendo la sintassi Intel che viene pienamente supportata da NASM e YASM.

Avatar utente
zoros
Linux 4.x
Linux 4.x
Messaggi: 1361
Iscritto il: lun 28 mag 2007, 22:51
Nome Cognome: Fabio`Zorba`
Slackware: 14.1
Kernel: 3.10.30-smp
Desktop: KDE-3.5(works!)
Località: Gorizia
Contatta:

Re: Assembly 8086 on linux

Messaggio da zoros »

jimmy_page_89 ha scritto:Esiste un modo per compilare assembly 8086 su linux con sintassi intel?
caro jimmy_page_89,
ti consiglio anch'io nasm, ci sono delle differenze ma si sta poco a trasformare un listato masm in nasm ...

non capisco perché usi "var" ... per allocare uno spazio ram basta un db, dw, ecc. ...

se invece vuoi usare l'originale MASM c'è sempre dosbox ...
vorrei riavere le mie firme ...

Avatar utente
phobos3576
Staff
Staff
Messaggi: 2980
Iscritto il: dom 17 apr 2005, 0:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Assembly 8086 on linux

Messaggio da phobos3576 »

zoros ha scritto:non capisco perché usi "var" ... per allocare uno spazio ram basta un db, dw, ecc. ...
In questo caso var è un nome di variabile e non una keyword.
zoros ha scritto:se invece vuoi usare l'originale MASM c'è sempre dosbox ...
Infatti, sotto DosBox o DosEmu girano MASM, TASM e praticamente tutti i programmi destinati al DOS.

In epoca preistorica avevo scritto un tutorial sull'Assembly dove ci sono anche istruzioni sulla sintassi NASM, MASM, TASM e su come installare ed usare DosEmu sotto Linux.

http://xoomer.virgilio.it/ramsoft/

Avatar utente
zoros
Linux 4.x
Linux 4.x
Messaggi: 1361
Iscritto il: lun 28 mag 2007, 22:51
Nome Cognome: Fabio`Zorba`
Slackware: 14.1
Kernel: 3.10.30-smp
Desktop: KDE-3.5(works!)
Località: Gorizia
Contatta:

Re: Assembly 8086 on linux

Messaggio da zoros »

phobos3576 ha scritto:
zoros ha scritto:non capisco perché usi "var" ... per allocare uno spazio ram basta un db, dw, ecc. ...
In questo caso var è un nome di variabile e non una keyword.
sì, ho letto frettolosamente il codice ... mi suonava male il "resw" ... io avrei scritto:
var dw 0 ; riserva 1 WORD a var
chiaro che var è un identificatore ... brutta scelta direi ;) ...
vorrei riavere le mie firme ...

Avatar utente
phobos3576
Staff
Staff
Messaggi: 2980
Iscritto il: dom 17 apr 2005, 0:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Assembly 8086 on linux

Messaggio da phobos3576 »

zoros ha scritto: sì, ho letto frettolosamente il codice ... mi suonava male il "resw" ... io avrei scritto:
var dw 0 ; riserva 1 WORD a var
chiaro che var è un identificatore ... brutta scelta direi ;) ...
Se devi definire dati inizializzati devi appunto usare DB, DW e così via; siccome jimmy_page_89 voleva definire un dato non inizializzato, allora secondo la sintassi NASM bisogna usare RESB (reserve bytes), RESW (reserve words) e così via.

Rispondi