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
C/C++ - Eseguire codice assembly in C
Forum - C/C++ - Eseguire codice assembly in C

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Salve a tutti. Volevo sapere se era possibile, all'interno di un sorgente scritto in C, del codice assemby e, se si, come fare. Grazie.

PM Quote
Avatar
c_programmer (Normal User)
Newbie


Messaggi: 14
Iscritto: 27/12/2009

Segnala al moderatore
Postato alle 18:02
Venerdì, 01/01/2010
crto che si può , puoi utilizzare l'inline assembly :

Codice sorgente - presumibilmente C/C++

  1. int main() {
  2.  
  3.  __asm__ ("movl %eax, %ebx"
  4.           "movl $56, %esi"
  5.           "movl %ecx, $label(%edx,%ebx,$4)"
  6.           "movb %ah, (%ebx)");
  7. return 0;
  8.  
  9. }



oppure semplicemente
Codice sorgente - presumibilmente C/C++

  1. ...
  2. ..
  3. asm movl %eax, %ebx
  4. asm movl $56, %esi
  5. ...
  6. ..


PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:09
Venerdì, 01/01/2010
Grazie per la risposta.:k:

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 13:53
Domenica, 03/01/2010
Piccolo problema. Premetto che utilizzo GCC su Linux. Se compilo il codice, ad esempio:
Codice sorgente - presumibilmente C/C++

  1. main()
  2. {
  3. asm mov ah,2;
  4. }



restituisce questi errori:
a.c: In function ‘main’:
a.c:5: error: expected ‘(’ before ‘mov’
a.c:5: error: ‘mov’ undeclared (first use in this function)
a.c:5: error: (Each undeclared identifier is reported only once
a.c:5: error: for each function it appears in.)
a.c:5: error: expected ‘;’ before ‘ah’

Se invece inserisco le parentesi tonde in questo modo:
Codice sorgente - presumibilmente C/C++

  1. main()
  2. {
  3. asm (mov ah,2);
  4. }



restituisce l'errore
a.c: In function ‘main’:
a.c:5: error: expected string literal before ‘mov’

da cosa può essere dovuto?:-?

PM Quote
Avatar
Astaroth (Normal User)
Newbie


Messaggi: 19
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:44
Domenica, 03/01/2010
In alcuni compilatori per usare l'inline assembly devi inserire la direttiva:

#pragma inline

Ultima modifica effettuata da Astaroth il 03/01/2010 alle 21:50
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:29
Domenica, 03/01/2010
Già inserita ma l'errore è sempre lo stesso... comunque ho risolto scrivendo __asm__{"..."};
l'alternativa che mi avevi proposto.

PM Quote
Avatar
Astaroth (Normal User)
Newbie


Messaggi: 19
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:35
Domenica, 03/01/2010
ottimo. comunque non sono io ad aver proposto l'alternativa, ma c_programmer ;)

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:13
Domenica, 03/01/2010
Testo quotato

Postato originariamente da Astaroth:

ottimo. comunque non sono io ad aver proposto l'alternativa, ma c_programmer ;)



Scusa non avevo fatto caso... avevo visto l'immagine predefinita in entrambi ed il modo di scrivere era simile e mi sono confuso...:blush:

PM Quote
Avatar
c_programmer (Normal User)
Newbie


Messaggi: 14
Iscritto: 27/12/2009

Segnala al moderatore
Postato alle 13:37
Lunedì, 04/01/2010
solitamente __asm__ è definita come macro che accetta delle stringhe, se non mi sbaglio...
mentre asm e una keyword del c

PM Quote