Domanda

Per la mia classe di linguaggio assembly, stiamo scrivendo programmi DOS usando DPMI. Sfortunatamente, non ho sempre accesso a una macchina Windows a 32 bit. Ho una macchina virtuale Debian installata su quasi tutti i computer che uso.

Ho installato sia DOSBox che DOSEMU. Esiste un modo per assemblare e compilare i programmi in Linux piuttosto che in DOS? Sto usando nasm, quindi non ho alcun problema a farlo assemblare in formato DOS. Tuttavia, ho problemi a eseguirlo attraverso il compilatore con il mio codice C e ottenere un eseguibile DOS (usando gcc o MinGW).

Esiste un modo per farlo o devo praticamente installare tutti gli strumenti in DOS?

È stato utile?

Soluzione

Non sono nemmeno sicuro che tu possa compilare applicazioni DOS usando GCC. Molto tempo fa c'era una variante del compilatore gcc chiamata DJGPP (o qualcosa del genere). Non l'ho mai fatto funzionare.

Le possibilità di compilare un GCC per DOS in questi giorni sono quasi zero.

Ti suggerisco di provare il vecchio Watcom Compiler. È un compilatore DOS nativo e la sua implementazione DPMI funziona anche come un incantesimo sotto DosBox. Nemmeno l'interfaccia con i file oggetto compilati della NASM non è un problema (l'ho fatto un paio d'anni)

Oggi il compilatore è stato reso open source e chiamato OpenWatcom.

http://www.openwatcom.org/index.php/Main_Page

Altri suggerimenti

BCC è in debian ed è in grado di produrre un codice decente per 8080 fino a 80386. Utilizzare l'opzione -Md per produrre un file binario MS-DOS.

Probabilmente il modo più semplice per te è usare gli strumenti DOS standard per l'attività.

DOSBOX è un ottimo emulatore.

DJGPP è ridicolmente facile da installare, sono necessari almeno tre .ZIP:

  1. BNU219B.ZIP (assemblatore, linker, bibliotecario)
  2. GCC441B.ZIP (compilatore C)
  3. DJDEV204.ZIP (libc, header)

http://www.delorie.com/djgpp/getting.html

unzip *.zip -d c:\djgpp && 
set DJGPP=c:\djgpp\djgpp.env &&
path c:\djgpp\bin;%PATH%

gcc myfile.c -o myfile.exe

Per produrre un output compatibile con DOS, dovrai usare il compilatore ospitato da DOS in DOSEMU (non DOSBox !! troppo lento e difettoso, pensato solo per i giochi) o usare un compilatore incrociato ospitato da Linux (DJ's sito ha gli RPM per quello).

Tuttavia, se desideri un codice al 16% al 16 bit, dovrai usare qualcos'altro (ad esempio OpenWatcom). OpenWatcom supporta anche host e target Linux (beta !!) (senza librerie condivise, IIRC), ma potresti doverlo compilare tu stesso con GCC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top