PDA

View Full Version : [C] inline assembly


sandor78
07-10-2004, 16:49
Da un po di tempo sto imparando a programmare in C, ed ultimamente mi sono appasionato alla gestione a baso livello del calcolatore.
Però in questa parte sto riscontrando una moltitudine di problemi,
sopratutto se voglio usare l'inline assembly (__asm).

Non so se conoscete il manuale Tricky C, in questo libro ci sono molti esempi in cui si fanno uso di istruzioni in Assembler, o di Interrupt della libreria "dos.h."

Il primo problema che ho avuto,e che nella libleria "dos .h" del visualstudio 6 non sono definite le "union REGS", però tale problema lo superato facilmente ridefinendole all'interno del programma stesso.
Il secondo problema e stato l'uso dell'istruzione assembler "int" realizzata nel seguente modo:

__asm int "n. interrupt"

naturalmente prima ho caricato i vari registri per indicare i dati che servono e il numero della funzione relativa all'interrupt, ad esempio con le seguenti istruzioni:

__asm mov ax,2
__asm mov dl,var

Però il compilatore mi segna sempre errore alla chiamata dell'interrupt fatta nel modo precedente.
Ho provato anche su altri comilatori di realizzare qualcosa di simile ma niente ad esempio il Turbo C 2.01 non mi permette l'uso dell'inline assembly, il Borland mi tira fuori uno strano errore.

Se qualcuno mi può dare un aiuto in qualche maniera lo ringrazio vivamente, anche consigliandomi un compilatore di C adatto..

bgpop
20-10-2004, 10:10
Il tricky C, come già detto altrove, utilizza costrutti che sotto windows non funzionano più (retaggio del vecchio dos).
Se vuoi usare l'inline asm, devi cercare qualcosa di compatibile con win (non saprei consigliarti un manuale, purtroppo :( )

71103
21-10-2004, 16:27
veramente in Visual C++ sotto Windows il blocco __asm funziona senza problemi; in rari casi l'ho usato pure io.
Nel compilatore Borland invece mi pare che c'era qualche limitazione circa l'uso di alcuni registri, come ad esempio EBP, che però è meglio non usare neanche in VC++ xkè lo usa il compilatore x gestire lo stack.