2012-10-22 17 views
7

Sono in fase di progettazione per imparare il linguaggio assembly e vorrebbe prendere un inizio con assembly x86, ma hanno i computer intorno a me con processori a 64 bit (i7, i5 e un Core 2 Duo) e sistemi operativi. Dal momento che utilizzo le mie macchine esistenti per lavoro e non voglio che qualcosa vada storto durante l'apprendimento/la pratica, ho intenzione di acquistare o costruire un sistema a 32 bit a basso costo utilizzando un vecchio hardware che potrei trovare. Ma prima, mi chiedo se sia possibile utilizzare una macchina virtuale per lo stesso scopo. Le istruzioni della macchina che sono eseguite saranno limitate alla macchina virtuale o interagiranno con l'host della macchina virtuale (cioè il mio computer stesso)?Utilizzare una macchina virtuale per imparare il montaggio

Mi sono guardato intorno per vedere se qualcuno ha già provato una cosa del genere, ma sembra che nessuno lo abbia - quindi, mi scuso se la mia domanda è ingenua dato che non so ancora nulla sull'assemblaggio. Ma sarebbe bello se qualcuno potesse far luce su questo argomento e offrire alcuni suggerimenti per persone come me che vogliono imparare l'assemblaggio in un ambiente sicuro e isolato.

+0

È possibile utilizzare come CPU a 64 bit con codice a 32 bit senza problemi. Non c'è bisogno di usare una VM – Gunner

risposta

12

vi consiglio caldamente:

1) utilizzare un simulatore di set di istruzioni (alla pari con quello che stai chiedendo). visibilità molto migliore e una migliore possibilità di successo, meno frustrazione, meno possibilità di rinunciare.

2) NON apprendere prima il gruppo x86. (avere l'hardware è una brutta scusa per imparare x86 prima). Architettura pessima, prima apprendi una buona architettura quindi se ti preoccupi di imparare x86, imparalo in un secondo momento e poi impara 8088/86 prima usando uno dei tanti simulatori/emulatori.

3) imparare un paio di set di istruzioni, se si inizia con un buon uno, poi tutti gli altri set di istruzioni e linguaggi di programmazione, anche sono una piccola questione di sintassi.

4) non si stanno imparando le chiamate di sistema che è un cattivo modo per imparare il montaggio, imparare il set di istruzioni e come programmare con esso, le chiamate di sistema è dopo aver imparato l'assembly e scegliere di continuare a programmare le applicazioni in esso .

msp430 (o PDP11/lsi11), braccio, pollice, avr, mico8, e una lista di altri sono molto meglio. salva i mips per dopo averne appreso anche alcuni, ha caratteristiche insolite che possono metterti nella mentalità sbagliata per altre architetture.

se le vostre abilità di programmazione sono forti già allora si può prendere il montaggio nel giro di pochi giorni e hanno pochi a molti set di istruzioni in una questione di settimane.Se segui questa guida e impari alcuni insiemi di istruzioni (buoni) non collegati, allora inizia a guardare x86 vedrai esattamente perché sto raccomandando di apprenderlo per ultimo o mai. Come 6502 e Pic e alcuni altri ha un valore educativo storico, ma a causa della natura della storia della famiglia non si può trarre molto da una prospettiva di programmazione/programmazione. In realtà consiglio di leggere The Zen of Assembly e ricordare anche quando è stato scritto su come pensare alla codifica delle prestazioni in generale, non sull'ottimizzazione delle prestazioni 8088/86.

Un buon modo per apprendere veramente l'assemblaggio è la scrittura di un disassemblatore, il problema è che la maggior parte dei set di istruzioni sono a lunghezza di parola variabile e i disassemblatori a lunghezza di parola variabile rappresentano un problema di programmazione avanzato. ARM e thumb (not thumb2) sono a lunghezza di parola fissa e molto facili da scrivere per i disassemblatori.

+0

Grazie mille, dwelch, per condividere i tuoi preziosi suggerimenti! Ho cercato Atmel Studio 6 IDE, che sembra supportare sia ARM che AVR. È un buon punto di partenza per un simulatore (soprattutto perché provengo da uno sfondo di Visual Studio) o dovrei cercare altre opzioni? – Zishan

+0

Ho una serie di simulatori in vari stati di completamento e collaudo in particolare su http://github.com/dwelch67 thumbulator. o amber_samples se sei interessato a vedere all'interno di un processore funzionante. Ce n'è uno, non il mio chiamato avrsim o qualcosa del genere, vuoi essere in grado di osservare le istruzioni eseguite in caso ti trovi impigliato o fuori tra le erbacce. qemu è troppo lontano da quello, per esempio, meglio per imparare a far apparire un sistema operativo come Linux piuttosto che imparare bare metal o assembly. –

+0

Per chiarire.Imparare le chiamate di sistema in assembler è come imparare le chiamate di sistema in qualsiasi lingua, scegliere un sistema operativo o un pacchetto gui o qualsiasi altra cosa impieghi un po 'a imparare a usare tutte le API. Lo stesso con qualsiasi chiamata di sistema se il tuo sistema ne ha. Separare l'istruzione di chiamata di sistema dal set di istruzioni. Non imparerai tutte le chiamate di sistema per un ambiente in asm in una settimana, ma puoi imparare velocemente se conosci già la programmazione in generale. –

2

Iniziare utilizzando qemu. È una VM leggera che consente di eseguire programmi (assembly grezzo, c, C++, ecc.) Senza nemmeno installare un sistema operativo.

+0

Grazie, JosephH. Ci proveremo. – Zishan

3

Sì, è possibile eseguire la programmazione di assiemi all'interno di una macchina virtuale e si sarà limitati al set di istruzioni esposto dalla macchina virtuale. Se si esegue una macchina a 32 bit in un ambiente host a 64 bit, verranno visualizzate solo le istruzioni a 32 bit.

Per quello che vale, la programmazione di assiemi non è "non sicura" da fare nell'ambiente host, quindi non c'è davvero alcun bisogno di usare una VM a meno che non si voglia emulare del tutto l'hardware, o si sta cercando di scrivere cose come bootloader e piccoli sistemi operativi.

Per il montaggio solo imparare, però, io certamente non iniziare a scrivere i sistemi bootloader/operativi, come non avrai accesso a debugger e cicli di prova sarà lunga. Inizia con http://www.nasm.us/ per imparare l'assemblaggio x86/x86-64, o guarda in http://wiki.qemu.org/Main_Page per fare cose come la programmazione ARM.

+0

Grazie, esista. Bene, scrivere boot loader e sistemi operativi può essere un obiettivo per il futuro, a seconda di quanto bene, ma ho provato NASM e per qualche motivo il mio Windows 8 (x64) non sembra gradirlo (problemi di compatibilità). Immagino che una macchina virtuale a 32 bit con Linux possa essere migliore per questo. Darà a NASM e Qemu una prova in questo. – Zishan

+0

Quali problemi hai con NASM? Gestisco NASM e creo app a 32 bit sulla mia macchina a 64 bit. – Gunner

+0

@Gunner Ogni volta che provo a eseguire NASM, viene visualizzata la seguente finestra di dialogo "Impossibile avviare o eseguire il programma o la funzionalità" nasm.exe "a causa di incompatibilità con le versioni a 64 bit di Windows. Contattare il fornitore del software per chiedere se Versione compatibile con Windows a 64 bit, se disponibile ". Il titolo della finestra di messaggio dice "Applicazione a 16 bit non supportata". Sul sito Web NASM, non c'è indicazione se il download è 16/32/64 bit. – Zishan

0

prova Marss86

MARSSx86 (MARSS in breve) è uno strumento per ciclo accurato sistema completo simulazione dell'architettura x86-64, specificamente multicore implementazioni. Il nostro obiettivo è creare un ambiente di simulazione architetturale di sistema completo semplice ma efficiente basato su strumenti esistenti.

0

Se si sta cercando di imparare il linguaggio assembly per quanto riguarda l'architettura Arm allora il mio suggerimento è imparare le basi da sotto siti .Qui a questi si spiega come to use qemu w.r.t assembly and its best place to start

http://www.bravegnu.org/gnu-eprog/index.html#intro

anche http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/

così da sopra sito si può provare su macchina virtuale come qemu senza bisogno di real hardware

Problemi correlati