|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Aug 2004
Messaggi: 23
|
[C] inline assembly
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.. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2000
Città: Hinterland (MI)
Messaggi: 1414
|
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 ![]() |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Oct 2004
Città: Roma
Messaggi: 124
|
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. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:48.