2014-07-25 17 views
5

Sono un neofita della programmazione e ho iniziato con il linguaggio C++, per quanto ne so il linguaggio C++ viene convertito in linguaggio assembly dal compilatore C++ (Es: Visual Studio), ma ho provato a cercare per ciò che converte il linguaggio assembly in codice macchina per essere compreso ed eseguito dal computer ma non sono riuscito a trovare una risposta.Cosa converte la lingua Assembly in codice macchina

Quindi la domanda è: dove e come viene convertita la lingua di assemblaggio in codice macchina? è una sorta di compilatore integrato nel sistema operativo?

Grazie in anticipo.

+1

No, quello che è successo solo nei tempi antichi.Un tipico passo di bootstrap, ma nessuno vuole aspettare il passaggio di assemblatore extra richiesto. Tutto ciò che rimane è che i compilatori C e C++ hanno ancora la possibilità di generare un elenco di assembly. –

+0

Il compilatore Microsoft C++ genera direttamente il codice macchina, mentre il compilatore GNU C genera l'assemblatore e quindi utilizza un assemblatore per trasformarlo in codice macchina. –

+1

I compilatori Microsoft hanno la possibilità di generare codice assembly. Non so se esiste un'opzione per compilare il codice assembly, quindi assemblare il codice assembly. Microsoft assembler è ML.EXE per 32 bit e ML64.EXE per 64 bit. Esiste anche MASM.EXE, che in alcuni casi fa riferimento alle versioni MASM 5.x, mentre ML.EXE era/è il nuovo nome per MASM 6.xo versioni successive. – rcgldr

risposta

0

Il codice assembly ha un processo simile per la conversione in codice oggetto/macchina, poiché viene eseguito tramite qualcosa chiamato assembler (analogo a un compilatore nell'esempio fornito).

2

Il linguaggio assembly viene convertito in codice macchina eseguibile da un programma di utilità denominato assemblatore; il processo di conversione è indicato come assemblaggio o assemblaggio del codice.

Leggi tutto here

Evviva !!

9

Alcuni compilatori (come GNU) convertono il codice C/C++ in codice assembly. Uno strumento chiamato "assembler" converte il codice assembly in codice macchina e uno strumento chiamato "linker" collega più file di codice macchina in un singolo file eseguibile (.EXE in Windows). La maggior parte di questi compilatori consente di scrivere il codice assembler risultante in un file in modo da poter esaminare il codice assembler o modificarlo.

L'assemblatore e il linker fanno parte della catena di strumenti, il che significa che vengono generalmente forniti insieme al compilatore.

Alcuni compilatori (come Microsoft) convertono direttamente il codice C/C++ in linguaggio macchina quindi nessun assemblatore è più necessario. Molti di questi compilatori non sono in grado di creare codice assembler in modo da non poter scrivere il codice assemblatore in un file.

A proposito: ci sono anche compilatori (non per C/C++, ma per altri linguaggi di programmazione) che creano direttamente un file .EXE, quindi non è richiesto alcun linker.

+0

Ma se così fosse ... perché non tutti i compilatori convertono il linguaggio di programmazione di alto livello direttamente nel codice macchina e non nell'assemblaggio? non sarebbe meglio? Voglio dire, da quello che ho letto, il linguaggio assembly rende più semplice per l'utente leggere il codice di basso livello ma non per il computer per eseguire un programma. –

+0

È necessario comunque lo strumento "assembler" perché una sorta di codice (nel kernel del sistema operativo) non può essere scritto in un linguaggio di alto livello. Il codice assembler è più facile da generare e più facile da eseguire il debug, quindi scrivere codice assembler semplifica lo sviluppo del compilatore. Alcuni tipi di CPU usano un codice macchina diverso ma le stesse istruzioni di assemblatore (esempio storico: 6800/6809, esempi moderni: CPU mixed-endian, ARM abi/thumb). In questi casi è necessario un solo compilatore per due CPU. –

+0

clang/LLVM emette anche codice macchina direttamente, ma il modo in cui ne parlano è che utilizza un assemblatore interno incorporato. Può ancora compilare il codice che utilizza la sintassi asm incorporata di GNU C. Tuttavia, le istruzioni generate dal compilatore potrebbero non passare mai attraverso una rappresentazione di testo; Non ne sono sicuro. clang e MSVC possono assolutamente emettere asm affinché gli utenti possano leggere (anche con commenti); non devi solo smontare i file oggetto. –

3

Quando compilatore converte il codice di alto livello in linguaggio assembly che sembra qualcosa di simile qui sotto -

  • MOV AX, [A]; # Sposta A per registrare Ax
  • ADD AX, [B]; # Aggiungi B a A
  • IMUL AX; # Square (A + B)
  • MOV [C], AX;

Un assemblatore converte queste istruzioni di assemblaggio in codice macchina.

Istruzioni di montaggio ha forma tipica del genere: codice operativo operando [operando]

E se controlli manuali microprocessore si arriva a sapere come ogni istruzione può essere convertito in una forma binaria come 1001000. Alcuni bit sono per il codice operativo e alcuni sono per gli operandi.

http://www.mathemainzel.info/files/x86asmref.html