PDA

View Full Version : [Assembly 8086/C] Compilare file C per 8086


kwb
24-12-2014, 14:35
Per puro scopo didattico, devo fare un programma in C che richiama una procedura in Assembly 8086.
So già come devono essere impostati i file in termini di nomenclatura e scope delle procedure/funzioni.
La mia idea è quella di:
1.A Compilare il C per produrre l'object code
1.B Compilare la procedura in 8086 per produrre l'object code
2. Linkare assieme i due file con il linker di MASM per tirare fuori l'eseguibile finale che funzioni sotto DOS.

Mi sono però imbattuto nel problema di trovare un compilatore C per mac che sia in grado di fare questa cosa: sfortunatamente ho letto che GCC non supporta più l'assembler 8086, producendo quindi un object code non conforme a quanto richiesto dal linker di masm8086.
Ho guardato un po' in giro e ho trovato solo soluzioni per altre piattaforme:
- bcc (Bruce C Compiler): credo sia integrato di default su linux, ma non sembra esserci alcun porting per altri OS.
- Openwatcom: Windows e Linux.
- Digital Mars: Windows

C'è modo?

Daniels118
29-12-2014, 09:38
Potresti cambiare l'assembler e modificare solo le firme delle funzioni in modo da renderle compatibili con gcc, poi sposti gli argomenti nei registri a 16 bit, il resto del codice può restare invariato.

tomminno
29-12-2014, 13:30
Per curiosità a cosa ti serve compilare qualcosa per 8086? Ti interessa studiare il funzionamento in Real Mode?
Sei su Mac, ma non è mai esistito un OS Apple che girasse sugli Intel di quell'epoca. Al massimo potrai trovare qualcosa per compilare per sistemi DOS o Linux, anche perchè immagino che userai DosBox per l'esecuzione, quindi ti servirà un compilatore dos.
Poi parli di MASM che è Microsoft, ma esiste per OSX?

Ad oggi compilare codice a 16 bit è problematico ovunque, anche perchè ha ben poco senso. Non puoi convertire almeno in 32 bit?

kwb
29-12-2014, 14:00
Potresti cambiare l'assembler e modificare solo le firme delle funzioni in modo da renderle compatibili con gcc, poi sposti gli argomenti nei registri a 16 bit, il resto del codice può restare invariato.
Hmm non sono molto pratico di quello che devo fare perchè è la prima volta che faccio una cosa del genere..
Puoi fornirmi dei link/esempi o spiegarti meglio? Perchè non ho ben capito come agire..

Per curiosità a cosa ti serve compilare qualcosa per 8086? Ti interessa studiare il funzionamento in Real Mode?
Sei su Mac, ma non è mai esistito un OS Apple che girasse sugli Intel di quell'epoca. Al massimo potrai trovare qualcosa per compilare per sistemi DOS o Linux, anche perchè immagino che userai DosBox per l'esecuzione, quindi ti servirà un compilatore dos.
Poi parli di MASM che è Microsoft, ma esiste per OSX?

Ad oggi compilare codice a 16 bit è problematico ovunque, anche perchè ha ben poco senso. Non puoi convertire almeno in 32 bit?
Purtroppo no. Devo farlo per un esercizio universitario che mi è stato assegnato e il programma finale deve girare sotto DOS(box) quindi deve essere 16 bit.
MASM esiste per OSX? Esiste per DOSBOX che, a sua volta, esiste per OSX :D

Daniels118
29-12-2014, 14:39
Il metodo che ti avevo proposto ti avrebbe permesso di portare il tuo codice a 32 bit, ma ora capisco che ti serve proprio a 16, quindi non vedo alternative che trovare un compilatore c a 16 bit. Visto che utilizzi il dos, tanto vale prendere un compilatore per dos: http://edn.embarcadero.com//article/20841

kwb
02-01-2015, 23:13
Il metodo che ti avevo proposto ti avrebbe permesso di portare il tuo codice a 32 bit, ma ora capisco che ti serve proprio a 16, quindi non vedo alternative che trovare un compilatore c a 16 bit. Visto che utilizzi il dos, tanto vale prendere un compilatore per dos: http://edn.embarcadero.com//article/20841
Grazie! Proverò, ho scaricato lo zip e già sento che saranno dolori ad installarlo... :D

kwb
03-01-2015, 13:32
Sono riuscito a installare su dosbox turbo c, apparentemente senza problemi.
La compilazione del file c sembra andare senza problemi, ma quando uso il linker della microsoft che viene dato con masm (link.exe) per unire l'obj code del file in asm e l'obj code del file in c, non mi riconosce le librerie che ho utilizzato nel file in c (nello specifico stdio.h e string.h). Credevo che il compilatore turboc si occupasse già di aggiungere le librerie al file obj, ma pare non essere così.
Ho quindi provato a compilare anche le librerie stdio.h e string.h, ottenendo i rispettivi object code files.
Aggiungendoli al linker non risolve il problema..:muro:

kwb
03-01-2015, 15:57
Ma in realtà li ho dati in pasto al compilatore turbo c e ha sputato fuori due object code files...
Era una mossa disperata..
Ho provato a guardare dentro le cartelle di turboc ma non ho trovato alcun stdio.lib o string.lib

kwb
03-01-2015, 17:51
secondo questa pagina sono in C:\TC\LIB...

http://stackoverflow.com/questions/2356687/how-to-fix-unable-to-open-stdio-h-in-turbo-c-error
Grazie!
Sebbene non mi abbia direttamente risolto il problema, mi ha costretto a spulciare tra i vari files, tra i quali ho trovato un readme in cui spiegava il significato dei vari LIB file che c'erano sparsi in giro.
È bastato aggiungere l'objcode per il modello small e il lib del modello small al linker di masm per far andare il tutto!

kwb
24-02-2015, 17:36
giusto per curiosità, sono in C:\TC\LIB? magari se dai maggiori dettagli potrà essere in futuro utile a chi avrà lo stesso problema.. ;)
Purtroppo leggo solo ora e purtroppo ho piallato quel compilatore.
Comunque, andando a memoria, il file readme (che si chiama README o HELP, non ricordo bene) si trova nella cartella TC. Dentro il file (verso il fondo mi pare) c'è scritto in ogni cartella che file ci sono e a cosa servono.