Autore Topic: Inserire Listati In Assembly  (Letto 3600 volte)

COMMODORO

  • Utente
  • **
  • Post: 160
  • Gioco Preferito: Bomberman C64
Inserire Listati In Assembly
« il: 16 Luglio 2013, 12:23:30 »
 Per motivi didattici spesso mi trovo a copi-incolllare listati presi dal forum.
Non credevo esistessero così tante incompatibilità fra i vari assembler.
Per facilitare questo compito é possibile dichiarare sempre che assembler si é usato? Grazie.
Che programmi sono stati usati nei primi anni del Forum? sempre Turbo assembler?
Uso attualmente CBM prg Studio che comunque mi sembra un pò acerbo ma é in continua evoluzione e rappresenta il futuro  :P  della programmazione su piattaforme Commodore anche se capisco che i vecchi programmatori restino affezionati alle varie evoluzioni di Turbo Assembler. Purtroppo tocca stare a modificare a mano la tabulazione dei listati e cambiare manualmente le istruzioni (tipo .byte in byte etc) quando va bene.
Grazie! Se si potesse mettere in evidenza il succo del problema cancellando pure questo post sarebbe ottimo! Oppure suggeritemi dove sbaglio! grazie1  :)

MOD - eliminata ridondanza nel titolo. -eregil

eregil

  • Administrator
  • Utente
  • *****
  • Post: 714
  • Gioco Preferito: Impossible Mission
Inserire Listati In Assembly
« Risposta #1 il: 17 Luglio 2013, 12:39:05 »
 Come da te osservato, nel linguaggio assembly, mentre sono standard gli mnemonici corrispondenti agli opcode del processore (LDA, STA, RTS, ...), possono non esserlo le direttive per l'assembler (byte, origine, ecc.), così come le convenzioni per identificare le etichette (label) e quant'altro. Perciò, in linea di massima, occorre sapere a priori per quale assembler sia stato scritto un particolare blocco di codice assembly; o comunque essere in grado di riconoscere il "dialetto" con il quale abbiamo a che fare.

Il problema non si pone, a meno della necessità di rappresentare porzioni di memoria (per tabelle dati, sprite, musica, ecc.), per un "disassemblato", che è sostanzialmente codice macchina presentato in forma di mnemonici, ma con tutte le etichette e gli indirizzi già risolti.

Per intenderci, questa è una porzione di disassemblato
Codice: [Seleziona]
C000 LDA $0400
C003 CMP #$20
C005 BEQ $C020
...
C020 ...altra istruzione...
ecc.

mentre la seguente è una porzione di assembly
Codice: [Seleziona]
*= $C000
LDA $0400
CMP #$20
BEQ etichetta
...
etichetta:
...altre istruzioni...
ecc.

la quale, nel "dialetto" di un assembler differente, potrà comparire in forma diversa, ad esempio
Codice: [Seleziona]
ORG $C000
LDA $0400
CMP #$20
BEQ etichetta
...
LBL etichetta
...altre istruzioni...
ecc.

In conclusione, come hai già intuito, occorre leggere il contesto e cercare il riferimento all'assembler utilizzato. Nelle riviste dell'epoca compariva spesso un disassemblato commentato, piuttosto che un vero programma in assembly. Alternativamente, i programmi in assembly potevano essere stati scritti sempre per un assembler "di riferimento" a cui la stessa pubblicazione faceva sempre capo.
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

COMMODORO

  • Utente
  • **
  • Post: 160
  • Gioco Preferito: Bomberman C64
Inserire Listati In Assembly
« Risposta #2 il: 17 Luglio 2013, 22:52:58 »
 Ciao eregil e grazie della risposta.
E' possibile partire dal disassemblato e farlo digerire così come tu hai messo di esempio:

C000 LDA $0400
C003 CMP #$20
C005 BEQ $C020
...
C020 ...altra istruzione...
ecc.

..e farlo digerire da un assembler in quella forma per essere riassemblato?
 

tsm_carmine

  • Redazione
  • Utente
  • ****
  • Post: 519
  • Gioco Preferito: Krakout
Inserire Listati In Assembly
« Risposta #3 il: 18 Luglio 2013, 00:06:06 »
 Credo di sì perché le diciture prima delle istruzioni sono delle label, ma non so se il resto del sorgente sia assemblabile direttamente. Sicuramente se usi XA e DXA puoi passare da un eseguibile a un disassemblato e viceversa senza modificare nulla. Se non ricordo male è possibile trovare l'assemblatore già compilato per Windows, mentre il disassemblatore devi compilartelo da te.

Link al sito.
Riusciremo a costruire un mondo dove più nessuno osi pronunciare le parole... "lettore floppy"?