Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Tutto e di + - Direttiva asm in compilatore C/C++
Forum - Tutto e di + - Direttiva asm in compilatore C/C++

Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 15:00
Sabato, 28/11/2009
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?

PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 15:16
Sabato, 28/11/2009
Testo quotato

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:
Codice sorgente - presumibilmente C++

  1. ...
  2.   void outb()
  3.   {
  4.     unsigned char val = 0xFF;
  5.     unsigned short int addr = 0x378;
  6.    
  7.     _asm
  8.     {
  9.       mov dx, addr
  10.       mov al, val
  11.       out dx, al
  12.     }
  13.   }
  14. ...


PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 15:29
Sabato, 28/11/2009
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...

PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 17:09
Sabato, 28/11/2009
Testo quotato

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.

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 18:04
Sabato, 28/11/2009
scusate ma ho risolto il problema(almeno credo)
ho trovato un link in cui, fra le altre cose, si dice che:
Codice sorgente - presumibilmente C++

  1. #pragma  inline  // informa il compilatore: usato inline assembly
  2.  
  3. char p_escl = '!';
  4.  
  5. int stampa(char c)
  6. {
  7.    asm mov ah,2;
  8.    asm mov dl,c;
  9.    asm int 21h;
  10.    asm mov ah,2;
  11.    asm mov dl,p_escl;
  12.    asm int 21h;
  13.    return(1);
  14. }



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.

PM Quote