Oppure

Loading
28/11/09 14:00
lorenzo
Usando un compilatore C/C++ si possono inserire manualmente anche istruzioni asm,
usando __asm oppure asm(dipende dal compilatore)

vorrei sapere in che modo il compilatore interpreta la direttiva asm...richiama il compilatore assembler oppure ne ha uno integrato?
perché il problema sarebbe condividere le variabili del C/C++ che si possono usare anche nel codice assembler...


voi che mi dite?
aaa
28/11/09 14:16
GuglielmoS
Postato originariamente da lorenzo:

Usando un compilatore C/C++ si possono inserire manualmente anche istruzioni asm,
usando __asm oppure asm(dipende dal compilatore)

vorrei sapere in che modo il compilatore interpreta la direttiva asm...richiama il compilatore assembler oppure ne ha uno integrato?
perché il problema sarebbe condividere le variabili del C/C++ che si possono usare anche nel codice assembler...


voi che mi dite?

A scuola da me, con il visual studio quando utilizzavamo l'assembly inline, accedevamo tranquillamente alle variabili del programma.
Esempio per accedere alla porta parallela:
...
  void outb()
  {
    unsigned char val = 0xFF;
    unsigned short int addr = 0x378;
    
    _asm
    {
      mov dx, addr
      mov al, val
      out dx, al
    }
  }
...
aaa
28/11/09 14:29
lorenzo
ok, lo so e lo ho scritto. Ma quello che volevo sapere era il comportamente del compilatore C/C++.

tu scrivi le varibili del C nel codice inline assembler, ok. Ma il compilatore che fa? si limita ad una semplice sostituzione di valori? Ha un suo compilatore assembler interno che interpreta il codice asm? Riachiama un secondo compilatore asm separato?

questa era la mia domanda...
aaa
28/11/09 16:09
GuglielmoS
Postato originariamente da lorenzo:

ok, lo so e lo ho scritto. Ma quello che volevo sapere era il comportamente del compilatore C/C++.

tu scrivi le varibili del C nel codice inline assembler, ok. Ma il compilatore che fa? si limita ad una semplice sostituzione di valori? Ha un suo compilatore assembler interno che interpreta il codice asm? Riachiama un secondo compilatore asm separato?

questa era la mia domanda...

Ah ok scusa, è che all'inizio avevo capito come fare ad accedere alle variabili del programma. Per quanto riguarda l'altra domanda, purtroppo non so risponderti.
aaa
28/11/09 17:04
lorenzo
scusate ma ho risolto il problema(almeno credo)
ho trovato un link in cui, fra le altre cose, si dice che:
#pragma  inline  // informa il compilatore: usato inline assembly

char p_escl = '!';

int stampa(char c)
{
   asm mov ah,2;
   asm mov dl,c;
   asm int 21h;
   asm mov ah,2;
   asm mov dl,p_escl;
   asm int 21h;
   return(1);
}


Il compilatore C si occupa di generare il sorgente assembler inserendovi, senza modificarle[5], anche le righe precedute dalla direttiva asm [6], invocando poi l'assemblatore (che effettua su di esse i controlli sintattici del caso) per generare il modulo oggetto. Segmentazione e modelli di memoria sono gestiti dal compilatore stesso come di norma, in modo del tutto trasparente al programmatore.
aaa