ASM in che linguaggio vengono scritti gli assembler

  • Autore discussione Utente cancellato 275459
  • Data d'inizio
U

Utente cancellato 275459

ho sempre questo dubbio in che linguaggio vengono scritti gli assembler? in linguaggio macchina?
 
In linguaggio macchina non viene scritto nulla, sarebbe pressochè impossibile vista la complessità.
Di solito si usano sempre C/C++ (o eventualmente altri linguaggi). Magari quando serve viene anche usato asm inline (o le intrinsics), non penso si vada oltre, eccetto per i test magari (come in NASM).
Il codice sorgente di NASM è pubblico comunque, puoi anche consultarlo https://github.com/netwide-assembler/nasm
 
Nulla ti vieta di programmarne uno utilizzando un linguaggio ad alto livello come python, php o javascript. Gli assembler non fanno altro che prendere un file di testo assembly e trasformarlo in una sequenza di bytes seguendo le regole descritte dal manuale dell'architettura scelta. Non devono fare niente di intelligente e non c'è bisogno di utilizzare linguaggi a basso livello o addirittura il linguaggio macchina.

Scrivere un assembler per x86_64 è un po' un casino perché l'architettura è immensa e ci sono ci sono veramente un casino di opcodes e estensioni varie, ma se prendi un architettura semplice (e.g., RISC-V o MIPS) te la cavi con poco e lo puoi tranquillamente fare a scopo didattico. Non devi nemmeno essere un asso in programmazione perché, come ho già detto, sono programmi semplici... basta avere pazienza e tenere il manuale dell'architettura a portata di mano.
 
ho sempre questo dubbio in che linguaggio vengono scritti gli assembler? in linguaggio macchina?
Il vero primo "assembler" (nota la virgolettatura per farti osservare quanto fosse poco livellabile agli assembler di oggi per le sue limitate caratteristiche) è stato ovviamente scritto in codice macchina (Wikipedia, ndr), per poi essere riscritto nel suo stesso linguaggio assembly e in conclusione riconvertito in codice macchina (con l'assembler).

L'assembly è solo un codice mnemonico per il codice macchina (il mov x86 è il mnemonico dell'opcode 0x8A, 0x8B, 0x8C, 0x8E, ...; il nop x86 equivale al 0x90).

Oramai non devi preoccuparti di scrivere un assembler in assembly o addirittura in codice macchina. Non è niente di speciale: puoi scriverlo in un qualsiasi linguaggio di programmazione che ti permetta di tradurre il contenuto (il codice mnemonico) di un file di testo ad un file oggetto che conterrà il codice macchina (una sequenza di bytes).
 
  • Mi piace
Reazioni: DanyDollaro