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++ - Commenti sqrt() in assembly.
Forum - C/C++ - Commenti sqrt() in assembly.

Avatar
Dante.cpp (Normal User)
Pro


Messaggi: 65
Iscritto: 23/11/2011

Segnala al moderatore
Postato alle 12:45
Domenica, 12/02/2012
Appena sotto ho riportato il codice assembly, del programma:
Codice sorgente - presumibilmente C/C++

  1. #include <math.h>
  2.  
  3. int main() {
  4.         sqrt(6);
  5. }



passando il codice a gdb esso comincerà ad eseguirlo dall'istruzione "movl    $0, %eax", il mio problema è, perché? Inoltre se qualcuno fosse in grado di commentare le seguenti istruzioni gliene sarei molto grato!

Codice sorgente - presumibilmente Plain Text

  1. .file   "Xprovadebug.c"
  2.         .text
  3.         .globl  _start
  4.         .type   _start, @function
  5. _start:movl     $0, %eax
  6. .LFB0:
  7.         .cfi_startproc
  8.         pushl   %ebp
  9.         .cfi_def_cfa_offset 8
  10.         .cfi_offset 5, -8
  11.         movl    %esp, %ebp
  12.         .cfi_def_cfa_register 5
  13.         movl    $0, %eax
  14.         popl    %ebp
  15.         .cfi_def_cfa 4, 4
  16.         .cfi_restore 5
  17.         ret
  18.         .cfi_endproc
  19. .LFE0:
  20.         .size   _start, .-_start
  21.         .ident  "GCC: (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1"
  22.         .section        .note.GNU-stack,"",@progbits



Come si può notare, il codice è stato ricavato con gpp poi ho sostituito l'etichetta main con _start per compilare poi con "as".

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:47
Domenica, 12/02/2012
Ma la domanda è perché il programma viene eseguito dalla prima istruzione?

La risposta è ovvia ...

O non ho capito?



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Dante.cpp (Normal User)
Pro


Messaggi: 65
Iscritto: 23/11/2011

Segnala al moderatore
Postato alle 14:17
Domenica, 12/02/2012
L'istruzione
Codice sorgente - presumibilmente Plain Text

  1. movl    $0, %eax

è nella riga 13. non mi pare la prima istruzione! :D

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:28
Domenica, 12/02/2012
Ma ti occupi di assembly senza avere le cognizioni di base?

La mov è la prima istruzione macchina per la CPU, le altre righe contengono direttive dell'assembler e c'è differenza


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Dante.cpp (Normal User)
Pro


Messaggi: 65
Iscritto: 23/11/2011

Segnala al moderatore
Postato alle 14:45
Domenica, 12/02/2012
Si, ho studiato un po di assembly z80 come introduzione, ma nell'architettura x86 ci sono entrato solo ieri!
Forse involontariamente, hai comunque dato risposta al quesito. Ora so che le prime istruzioni sono direttive per il compilatore; tipo l'istruzione ORG in asmZ80, che dice al compilatore da quale locazione dovrà iniziare ad assemblare. Ecco spiegato perché gdb iniziava l'analisi dalla riga 13.
Avresti un po di documentazione da passarmi; oppure puoi darmi una mano commentando il codice?

Ultima modifica effettuata da Dante.cpp il 12/02/2012 alle 14:53
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:53
Domenica, 12/02/2012
Testo quotato

Postato originariamente da Dante.cpp:

Si, ho studiato un po di assembly z80 come introduzione, ma nell'architettura x86 ci sono entrato solo ieri!



Non fa differenza ... le direttive le prevedono tutti gli assembler ...

Testo quotato

Forse involontariamente, hai comunque dato risposta al quesito.



Non direi proprio "involontariamente" ...

Testo quotato

Ecco spiegato perché gdb iniziava l'analisi dalla riga 13.



:-|

Testo quotato

Avresti un po di documentazione da passarmi; oppure puoi darmi una mano commentando il codice?



La documentazione di cosa? L'assembly x86 è "enorme" ... puoi iniziare dai manuali Intel originali (migliaia di pagine ...) ...

Commentare quel codice non ti servirebbe a nulla ... se devi imparare, prendi qualche libro e inizia dall'abc


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Dante.cpp (Normal User)
Pro


Messaggi: 65
Iscritto: 23/11/2011

Segnala al moderatore
Postato alle 20:25
Domenica, 12/02/2012
Non mi occorreva una critica della mia risposta,  comunque il problema è stato risolto grazie. Perdono se la mia umile conoscenza non è ai tuoi livelli celestiali! :k:

Ultima modifica effettuata da Dante.cpp il 12/02/2012 alle 20:26
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:44
Domenica, 12/02/2012
Testo quotato

Postato originariamente da Dante.cpp:

Non mi occorreva una critica della mia risposta,  comunque il problema è stato risolto grazie. Perdono se la mia umile conoscenza non è ai tuoi livelli celestiali! :k:



Non faccio nessuna critica "inutile" ma ti sto dicendo esattamente come stanno le cose.

Basta dire che non vuoi accettare i consigli che ti vengono dati ... senza stupida ironia ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote