|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
[Assembly 8086/C] Compilare file C per 8086
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?
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
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.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
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? |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Puoi fornirmi dei link/esempi o spiegarti meglio? Perchè non ho ben capito come agire.. Quote:
MASM esiste per OSX? Esiste per DOSBOX che, a sua volta, esiste per OSX
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
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
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
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..
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
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
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
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!
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
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.
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:50.



















