Assembly 8086 on linux
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.
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.
- Blallo
- Packager
- Messaggi: 3293
- Iscritto il: ven ott 12, 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
Esiste un modo per compilare assembly 8086 su linux con sintassi intel?
- lennynero
- Linux 3.x
- Messaggi: 590
- Iscritto il: lun mag 03, 2004 0:00
- Nome Cognome: Luigi Picaro
- Slackware: 14.2-x64
- Kernel: 4.4.14
- Desktop: xfce-4.12
- Località: Salerno
- Contatta:
Re: Assembly 8086 on linux
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...
- 414N
- Iper Master
- Messaggi: 2895
- Iscritto il: mer feb 13, 2008 16:19
- Slackware: 14.2
- Kernel: 4.4.19
- Desktop: KDE4
- Località: Bulagna
- Contatta:
Re: Assembly 8086 on linux
Ci sono anche NASM e YASM, con una sintassi simile a quella Intel.
- Blallo
- Packager
- Messaggi: 3293
- Iscritto il: ven ott 12, 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
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

- 414N
- Iper Master
- Messaggi: 2895
- Iscritto il: mer feb 13, 2008 16:19
- Slackware: 14.2
- Kernel: 4.4.19
- Desktop: KDE4
- Località: Bulagna
- Contatta:
Re: Assembly 8086 on linux
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 questoCodice: 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
- phobos3576
- Staff
- Messaggi: 2980
- Iscritto il: dom apr 17, 2005 0:00
- Slackware: 13.1
- Kernel: 2.6.37-smp
- Desktop: KDE 4.5.3
Re: Assembly 8086 on linux
jimmy_page_89 ha scritto:ho provato a dare in pasto a nasm questoCodice: 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
- Blallo
- Packager
- Messaggi: 3293
- Iscritto il: ven ott 12, 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
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
- phobos3576
- Staff
- Messaggi: 2980
- Iscritto il: dom apr 17, 2005 0:00
- Slackware: 13.1
- Kernel: 2.6.37-smp
- Desktop: KDE 4.5.3
Re: Assembly 8086 on linux
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
- Blallo
- Packager
- Messaggi: 3293
- Iscritto il: ven ott 12, 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
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
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
- phobos3576
- Staff
- Messaggi: 2980
- Iscritto il: dom apr 17, 2005 0:00
- Slackware: 13.1
- Kernel: 2.6.37-smp
- Desktop: KDE 4.5.3
Re: Assembly 8086 on linux
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.
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.
- zoros
- Linux 4.x
- Messaggi: 1329
- Iscritto il: lun mag 28, 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
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 ...
- phobos3576
- Staff
- Messaggi: 2980
- Iscritto il: dom apr 17, 2005 0:00
- Slackware: 13.1
- Kernel: 2.6.37-smp
- Desktop: KDE 4.5.3
Re: Assembly 8086 on linux
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/
- zoros
- Linux 4.x
- Messaggi: 1329
- Iscritto il: lun mag 28, 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
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 ...
- phobos3576
- Staff
- Messaggi: 2980
- Iscritto il: dom apr 17, 2005 0:00
- Slackware: 13.1
- Kernel: 2.6.37-smp
- Desktop: KDE 4.5.3
Re: Assembly 8086 on linux
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.