DOMANDA Quale assembler installare

Pubblicità

giac1

Nuovo Utente
Messaggi
8
Reazioni
2
Punteggio
21
Vorrei iniziare a studiare il linguaggio assembly.
Ho provato a verificare i potenziali assembler disponibili ma ho molti dubbi.
I requisiti per la scelta sono chiaramente determinati dal sistema hd\sw disponibile:

-Processore AMD64: AMD A6-3500 APU with Radeon(tm) HD Graphics 2.10 GHz
-Sistema: Windows 7 pro 64bit Service pack 1

e dal fatto che non vorrei dover installare software aggiuntivo tipo Visual c++ oppure Visual Studio ... come sembra richiedere MASM\ML64

Ringrazio anticipatamente per ogni suggerimento
giac1
 
grazie per la veloce risposta che però, volendo saperne di più, mi solleva altre domande ... e in questo momento credo di avere una gran confusione in testa.

vedo che MARS è un IDE per 'MIPS Assembly ...', MIPS mi sembra sia un processore ad architettura RISC ma credo che il processore A6-3500 si basi su architettura CISC, corretto?

forse mi faccio delle domande sbagliate!

Aggiungo che con MARS dovrei installare anche java ... la mia macchina è decisamente obsoleta ... ma non esiste un assembler piatto piatto a riga di comando?
 
Vorrei iniziare a studiare il linguaggio assembly.
Ho provato a verificare i potenziali assembler disponibili ma ho molti dubbi.
I requisiti per la scelta sono chiaramente determinati dal sistema hd\sw disponibile:

-Processore AMD64: AMD A6-3500 APU with Radeon(tm) HD Graphics 2.10 GHz
-Sistema: Windows 7 pro 64bit Service pack 1

e dal fatto che non vorrei dover installare software aggiuntivo tipo Visual c++ oppure Visual Studio ... come sembra richiedere MASM\ML64

Ringrazio anticipatamente per ogni suggerimento
giac1

IMHO, la scelta migliore con Windows è MASM come linguaggio. Con Visual Studio hai anche il vantaggio di poter eseguire codice inline come se fossi in un source in assembly; al contrario di MinGW / GCC.

Puoi già adottare quello. E' il default se scarichi visual studio. Puoi usarlo da command line richiamando "ml" e "ml64" (se non erro nome...).

L'alternativa molto valida è usare https://masm32.com/board/index.php?PHPSESSID=rdu73mmgt4l0jmrbgrln3mr7k6&topic=10880.0
Se è solo perchè devi studiare tu ok; se è per mandare poi il sorgente al prof, occhio però. Questo assembler offre diverse comodità (le varie MACRO).
Per darti un'idea: https://github.com/DispatchCode/BMPInfo/blob/master/src/BMPInfo.asm#L645

Questo codice lo scrissi anni fa. invoke se non vado errato non è usata dal MASM che trovi in VS; così come le altre macro, .WHILE etc.

Se stai imparando ti direi: usa uno dei due, ma non usare le MACRO... altrimenti ti perdi l'uso di Jcc, JMP, CMP, TEST etc.

vedo che MARS è un IDE per 'MIPS Assembly ...', MIPS mi sembra sia un processore ad architettura RISC ma credo che il processore A6-3500 si basi su architettura CISC, corretto?

Si, è completamente diverso, ti servirebbe un emulatore per usarlo.
Si, MIPS è RISC (le istruzioni sono a lunghezza fissa), al contrario di CISC.
 
IMHO, la scelta migliore con Windows è MASM come linguaggio. Con Visual Studio hai anche il vantaggio di poter eseguire codice inline come se fossi in un source in assembly; al contrario di MinGW / GCC.

Puoi già adottare quello. E' il default se scarichi visual studio. Puoi usarlo da command line richiamando "ml" e "ml64" (se non erro nome...).

L'alternativa molto valida è usare https://masm32.com/board/index.php?PHPSESSID=rdu73mmgt4l0jmrbgrln3mr7k6&topic=10880.0
Se è solo perchè devi studiare tu ok; se è per mandare poi il sorgente al prof, occhio però. Questo assembler offre diverse comodità (le varie MACRO).
Per darti un'idea: https://github.com/DispatchCode/BMPInfo/blob/master/src/BMPInfo.asm#L645

Questo codice lo scrissi anni fa. invoke se non vado errato non è usata dal MASM che trovi in VS; così come le altre macro, .WHILE etc.

Se stai imparando ti direi: usa uno dei due, ma non usare le MACRO... altrimenti ti perdi l'uso di Jcc, JMP, CMP, TEST etc.



Si, è completamente diverso, ti servirebbe un emulatore per usarlo.
Si, MIPS è RISC (le istruzioni sono a lunghezza fissa), al contrario di CISC.
ok, vedo di acculturarmi su Microsoft visual ... rimane comunque la domanda poco tecnica ma spero comprensibile:
"... e per un assembler piatto piatto cosa consigliate (ammesso che esista) ?"
per il problema " ... se è per mandare poi il sorgente al prof ..." mi scappa da ridere: ho più di 70 anni ragà!!!
 
ok, vedo di acculturarmi su Microsoft visual ... rimane comunque la domanda poco tecnica ma spero comprensibile:
"... e per un assembler piatto piatto cosa consigliate (ammesso che esista) ?"
per il problema " ... se è per mandare poi il sorgente al prof ..." mi scappa da ridere: ho più di 70 anni ragà!!!
Meglio 😁

L'alternativa valida che ho nominato richiede il download e l'installazione dell'SDK https://masm32.com/board/index.php?PHPSESSID=rdu73mmgt4l0jmrbgrln3mr7k6&topic=10880.0
 
se la tua premura è imparare per il corso di architettura degli elaboratori dell'università, vai tranquillo che quello che ti ho suggerito, mi è servito anche per fare prova di esame.
Se invece è per tuo hobby etc, ascolta i consigli di DispatchCode.
Ma dipende tutto dal tuo scopo che non hai precisato
 
se la tua premura è imparare per il corso di architettura degli elaboratori dell'università, vai tranquillo che quello che ti ho suggerito, mi è servito anche per fare prova di esame.
Se invece è per tuo hobby etc, ascolta i consigli di DispatchCode.
Ma dipende tutto dal tuo scopo che non hai precisato
ho dato un occhio veloce a mezzo Wikipedia alla voce Visual Studio ...:

parlando di Microsoft Visual studio,
alla pagina inglese sembra che la versione per il mio sistema (Windows 7 pro service pack 1) sia quella del 2012
Domanda: la 2012 sarà compatibile con quello proposto? ossia MASM ... ML64.exe?
... e in più ha un costo

vedo che esiste Visual Studio Code che invece mi pare gratuito ... sembra, lo sto verificando, che ci si possa "affiancare MASM"

aggiungo x chiarire, a scanso di equivoci:

conoscendo un pò di linguaggio c e java il target finale dell'operazione sarebbe quello di appaiare all'assembler anche un disassembler e un decompilatore, partire scrivendo programmini basici etc etc ... insomma giocare ...
ancora grazie a tutti
 
se la tua premura è imparare per il corso di architettura degli elaboratori dell'università, vai tranquillo che quello che ti ho suggerito, mi è servito anche per fare prova di esame.

Non sono d'accordo Chri: dipende dal caso specifico, c'è chi fa altre architetture, quindi andrebbe fatta una scelta sulla base di quello.
Comunque nel suo caso è per interesse personale. ;)

ho dato un occhio veloce a mezzo Wikipedia alla voce Visual Studio ...:

parlando di Microsoft Visual studio,
alla pagina inglese sembra che la versione per il mio sistema (Windows 7 pro service pack 1) sia quella del 2012
Domanda: la 2012 sarà compatibile con quello proposto? ossia MASM ... ML64.exe?
... e in più ha un costo

vedo che esiste Visual Studio Code che invece mi pare gratuito ... sembra, lo sto verificando, che ci si possa "affiancare MASM"

Windows 7 è tra i requisiti di VS 2015: https://learn.microsoft.com/it-it/visualstudio/releases/2015/vs2015-sysrequirements-vs

aggiungo x chiarire, a scanso di equivoci:

conoscendo un pò di linguaggio c e java il target finale dell'operazione sarebbe quello di appaiare all'assembler anche un disassembler e un decompilatore, partire scrivendo programmini basici etc etc ... insomma giocare ...
ancora grazie a tutti
Si, immaginavo.

Un esempio usando poi "cl.exe" (con visual studio, è il compilatore di microsoft):

C:
#include <stdio.h>
#include <string.h>

int main() {
    int n1 = 100;
    int n2 = 1000;

    printf("n1 and n2: %d, %d\n", n1, n2);
    
    __asm
    {
        mov eax, n1
        xchg eax, n2
        mov n1, eax
    }
    
    printf("n1 and n2: %d, %d\n", n1, n2);
    
    return 0;
}

Questo è inline assembly (non mi sono complicato la vita perchè non ricordo la WinAPI come un tempo, e avrei dovuto leggere la documentazione, per usare solo assembly).

Piccola nota: l'assembly inline con C come vedi qui è supportato solo per la versione a 32bit.

Questo è l'output di quel programma:
2024-07-10_211519.webp
 
Vs community Comunque è gratis , piuttosto che il code consiglio quello
 
IMHO, la scelta migliore con Windows è MASM come linguaggio. Con Visual Studio hai anche il vantaggio di poter eseguire codice inline come se fossi in un source in assembly; al contrario di MinGW / GCC.
No, GCC inline assembly c'e' da sempre, oivvero
asm volatile ()
nel codice C.

Mi pare ci sia un po' di cinfusione.

1) l'assembly e' legato all'architettura. Se scegli di programmare per PIC, userai un semplicissimo assembly per PIC.
2) Poi, per la stessa architettura, ci possono essere piu compilatori con diverse sintassi, ma stesse istruzioni e registri. Ad esempio, in windows puoi (potevi) usare tasm32 piuttosto che masm32 (diverse sintassi), mentre in linux si usa assembly gcc con sintassi at&t.
3) si puo cross-compilare come compilare "native". Ad esempio, dal mio pc scrivo un programma per PIC 8 bit e lo cross-compilo sul pc, il binario finale funzionera' sul PIC. Anche qui, da Linux posso usare MPASM o gpasm, ci sono piu compilatori e differenti sintassi.
4) non e' necessario utilizzare IDE e/o porcherie come Visual Studio, un file assembly lo puoi scrivere con l'editor che vuoi e compilare semplicemente invocando il compilatore.
 
Ho eliminato il mex precedente per riformulare da pc, più comodo.

No, GCC inline assembly c'e' da sempre, oivvero
asm volatile ()
nel codice C.
Mi dovresti dire dove dico il contrario...

Rileggi bene quanto ho scritto:
c ha detto:
il vantaggio di poter eseguire codice inline come se fossi in un source in assembly

con GCC usi volatile e non mantieni la medesima sintassi (eg intendo che volatile ha una sintassi sua); non è come l'esempio che ho riportato li sopra. Quello puoi letteralmente copiarlo e incollarlo in un source in asm, se usi MASM come sintassi.

Mi pare ci sia un po' di cinfusione.
1) l'assembly e' legato all'architettura. Se scegli di programmare per PIC, userai un semplicissimo assembly per PIC.
2) Poi, per la stessa architettura, ci possono essere piu compilatori con diverse sintassi, ma stesse istruzioni e registri. Ad esempio, in windows puoi (potevi) usare tasm32 piuttosto che masm32 (diverse sintassi), mentre in linux si usa assembly gcc con sintassi at&t.
3) si puo cross-compilare come compilare "native". Ad esempio, dal mio pc scrivo un programma per PIC 8 bit e lo cross-compilo sul pc, il binario finale funzionera' sul PIC. Anche qui, da Linux posso usare MPASM o gpasm, ci sono piu compilatori e differenti sintassi.
4) non e' necessario utilizzare IDE e/o porcherie come Visual Studio, un file assembly lo puoi scrivere con l'editor che vuoi e compilare semplicemente invocando il compilatore.

Non mi sembra di aver detto il contrario in qualche momento... in cima ho fatto riferimento all'emulatore, se vuole eseguire quel codice che ha come target per esempio MIPS.

Sono anni che uso assembly, soprattutto sotto Windows. Ne ho provati parecchi di assembler (come dici, ciascuno ha la sua sintassi): FASM, YASM, TASM, MASM, NASM... il più comodo per me rimane MASM per quanto dicevo sopra. Con MASM32 ci sono pi un sacco di macro che possono tornare utili.
Per MASM la scelta è tra l'assembler fornito con Visual Studio e l'utilizzo di MASM32. Quest'ultimo non ha un IDE, si invoca direttamente da riga di comando.
Non sono mai uscito dal mondo di x86_64 però - è l'unico che ho toccato con mano. Mi è capitato di cross compilare però. anche a lavoro.

Non ho capito da dove vengono le puntualizzazioni di cui sopra; da ciò che ho scritto in passato pensavo ci "conoscessimo" sul forum, ormai.
 
@DispatchCode
puntializzo, nessun problema da parte mia, spiace che te la sia presa su, il messaggio l'ho scritto al volo, il "confusione" non era riferito a te, conosciamo tua preparazione in materia, ma riferito alla ricerca di un assemby semplice. Ovvero, l'assembly come ho spiegato e' vincolato all'architettura. Una sintassi o un 'altra e' questione di abitudine.

La sintassi di inline gcc lievemente differente a quella che usi (non cambia l'ordine degli operatori) non e' dovuta alla direttiva voltatile che e' opzionale, ma alla direttiva asm(), per altro, effettivamente, con gcc, ci si ritrova alla fine con 4 sintassi lievementi differenti, quella dei file asm.s puri, quella dei file asm.S (nota la s maiuscola) che consentono direttive preprocessore C, quella inline senza parametri, quella inline con paramteri.

Per quel che ricordo, Visual C come compilatore ha avuto parecchi problemi in passato riguardo il non essre troppo vicino agli standard, oggi non ne ho idea. Sotto windows cmq immagino sia scelta piu semplice/comune.

Per me, ognuno usi il compilatore assembly che preferisce :) lo usai per anni (tasm32 di cui ho ancora la scatola) ma certo meglio masm32, gratuito. Ultimamente lo uso da linux ma molto poco, anni 2000 con l'assembly si potevano ottimizzare certi calcoli, specie per chi usava compilatori scadenti come borland c. Oggi battere i compilatori con ottimizzazione tramite assembly non e' cosi facile, oltre al fatto che l'ordine delle istruzioni non e' garantito senza barriere. In linux e' usato per lo piu negli start.S o per cose tipo exchange negli spinlock, o per istruzioni speciali. Per me fu piu un esercizio per capire come funziona un microprocessore, una sfida personale, anche se alla fine le app che ho scritto per lo piu chiamavano le win32 api, ad esempio un client email.

Su certi microcontrollori 8bit come i PIC invece non potevi fare altro che usare l'assembly. Compilatore C e' stato creato successivamente e non ottimizzava in size, a meno di pagare licenze mensili.

Tornando al topic, scosiglio assembly arm, a mio avviso piuttosto complesso. x86_64 che e' il pc ovviamente e' il piu comodo, ma per l'assembly forse meglio munirsi du qualche valido libro di testo.

Come assembly per microcontrollori "semplici",

PIC 8 bit, attorno alle 30 istruzioni o giu di li,
AVR (arduino) non male, un assembly piuttosto semplice.
m68k/coldfire anche piuttosto semplice, ma hardware difficile da reperire (casomai c'e' qemu mcf5208).

Come ben dice @DispatchCode , per testare ci si aiuta eventualmente con emulatori.
 
Ultima modifica:
Avevo frainteso, visto il quote dove hai risposto. Scusami!

Si, sul volatile hai ragione; non è dovuto al volatile stesso che si usa con le variabili anche; se ben ricordo dici al compilatore di lasciare inalterato quello che stai facendo perché ci possono essere cose che non conosce (insomma, non ottimizza dove usi quella variabile).

Si, l'asm è usato per esempio anche nell'idle task, viene letteralmente fatta una "sti; hlt".
 
Pubblicità
Pubblicità
Indietro
Top