Repository 32bit  Forum
Repository 64bit  Wiki

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.

Assembly 8086 on linux

Messaggioda Blallo » lun mag 10, 2010 1:54

Esiste un modo per compilare assembly 8086 su linux con sintassi intel?
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3226
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Assembly 8086 on linux

Messaggioda lennynero » lun mag 10, 2010 9:21

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
lennynero
Linux 2.6
Linux 2.6
 
Messaggi: 566
Iscritto il: dom mag 02, 2004 23:00
Località: Salerno
Slackware: 14.1-x64
Kernel: 3.10.17
Desktop: xfce-4.10

Re: Assembly 8086 on linux

Messaggioda 414N » lun mag 10, 2010 11:24

Ci sono anche NASM e YASM, con una sintassi simile a quella Intel.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: Assembly 8086 on linux

Messaggioda Blallo » lun mag 10, 2010 13:30

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 :(
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3226
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Assembly 8086 on linux

Messaggioda 414N » lun mag 10, 2010 17:56

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
414N
Iper Master
Iper Master
 
Messaggi: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: Assembly 8086 on linux

Messaggioda phobos3576 » lun mag 10, 2010 19:15

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
phobos3576
Staff
Staff
 
Messaggi: 2980
Iscritto il: sab apr 16, 2005 23:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Assembly 8086 on linux

Messaggioda Blallo » lun mag 10, 2010 22:19

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
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3226
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Assembly 8086 on linux

Messaggioda phobos3576 » lun mag 10, 2010 22:34

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
phobos3576
Staff
Staff
 
Messaggi: 2980
Iscritto il: sab apr 16, 2005 23:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Assembly 8086 on linux

Messaggioda Blallo » lun mag 10, 2010 23:29

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
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3226
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Assembly 8086 on linux

Messaggioda phobos3576 » lun mag 10, 2010 23:39

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
phobos3576
Staff
Staff
 
Messaggi: 2980
Iscritto il: sab apr 16, 2005 23:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Assembly 8086 on linux

Messaggioda zoros » lun mag 10, 2010 23:40

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
zoros
Linux 3.x
Linux 3.x
 
Messaggi: 1302
Iscritto il: lun mag 28, 2007 21:51
Località: Gorizia
Nome Cognome: Fabio∙Zorba
Slackware: 13.37
Kernel: 3.2.5
Desktop: KDE-3.5.10

Re: Assembly 8086 on linux

Messaggioda phobos3576 » lun mag 10, 2010 23:47

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
phobos3576
Staff
Staff
 
Messaggi: 2980
Iscritto il: sab apr 16, 2005 23:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Re: Assembly 8086 on linux

Messaggioda zoros » lun mag 10, 2010 23:57

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
zoros
Linux 3.x
Linux 3.x
 
Messaggi: 1302
Iscritto il: lun mag 28, 2007 21:51
Località: Gorizia
Nome Cognome: Fabio∙Zorba
Slackware: 13.37
Kernel: 3.2.5
Desktop: KDE-3.5.10

Re: Assembly 8086 on linux

Messaggioda phobos3576 » mar mag 11, 2010 0:08

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.
Avatar utente
phobos3576
Staff
Staff
 
Messaggi: 2980
Iscritto il: sab apr 16, 2005 23:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite