Ultimo semestre al college, il mio insegnante nella classe Computer Languages ci ha insegnato il linguaggio esoterico chiamato Whitespace. Nell'interesse di imparare meglio la lingua con un programma molto impegnativo (midterms), ho scritto un interpreter e assembler in Python. Un assembly language è stato progettato per facilitare la scrittura dei programmi facilmente e uno sample program è stato scritto con l'assembly specificato mnemonics.Avete suggerimenti per questi mnemonici di assemblaggio?
Ora che è estate, un nuovo progetto è iniziato con l'obiettivo di riscrivere l'interprete e l'assemblatore per Whitespace 0.3, con ulteriori sviluppi che verranno dopo. Poiché c'è molto più tempo rispetto a prima per lavorare sul suo design, qui viene presentato uno schema che fornisce un insieme rivisto di mnemonici per il linguaggio assembly. Questo post è contrassegnato come wiki per la loro discussione.
Hai mai avuto esperienze con i linguaggi di assemblaggio in passato? C'erano alcune istruzioni che pensavate avrebbero dovuto essere rinominate in qualcosa di diverso? Ti sei trovato a pensare fuori dagli schemi e con un paradigma diverso da quello in cui sono stati nominati i mnemonici? Se puoi rispondere di sì a una qualsiasi di queste domande, sei il benvenuto qui. Le risposte soggettive sono apprezzate!
Stack Manipulation (IMP: [spazio])
manipolazione Stack è una delle operazioni più comuni, quindi la brevità del PIM [Spazio]. Ci sono quattro istruzioni di stack.
hold N Push the number onto the stack
copy Duplicate the top item on the stack
copy N Copy the nth item on the stack (given by the argument) onto the top of the stack
swap Swap the top two items on the stack
drop Discard the top item on the stack
drop N Slide n items off the stack, keeping the top item
aritmetica (IMP: [Tab] [spazio])
comandi aritmetici operano sui primi due elementi della pila, e sostituirli con il risultato dell'operazione. Il primo oggetto spinto è considerato a sinistra dell'operatore.
add Addition
sub Subtraction
mul Multiplication
div Integer Division
mod Modulo
Heap di accesso (IMP: [Tab] [Tab])
comandi di accesso Heap guardano lo stack per trovare l'indirizzo di voci da memorizzare o recuperate. Per memorizzare un elemento, premere l'indirizzo, quindi il valore ed eseguire il comando store. Per recuperare un elemento, premere l'indirizzo ed eseguire il comando retrieve, che posizionerà il valore memorizzato nella posizione in cima allo stack.
save Store
load Retrieve
Flow Control (IMP: [LF])
operazioni di controllo del flusso sono anche comuni. Le subroutine sono contrassegnate da etichette e gli obiettivi dei salti condizionali e incondizionati, tramite i quali è possibile implementare i loop. I programmi devono essere terminati per mezzo di [LF] [LF] [LF] in modo che l'interprete possa uscire in modo pulito.
L: Mark a location in the program
call L Call a subroutine
goto L Jump unconditionally to a label
if=0 L Jump to a label if the top of the stack is zero
if<0 L Jump to a label if the top of the stack is negative
return End a subroutine and transfer control back to the caller
halt End the program
I/O (IMP: [Tab] [LF])
Infine, abbiamo bisogno di essere in grado di interagire con l'utente. Ci sono istruzioni IO per leggere e scrivere numeri e singoli caratteri. Con questi, è possibile scrivere routine di manipolazione delle stringhe. Le istruzioni di lettura prendono l'indirizzo heap in cui archiviare il risultato dalla cima della pila.
print chr Output the character at the top of the stack
print int Output the number at the top of the stack
input chr Read a character and place it in the location given by the top of the stack
input int Read a number and place it in the location given by the top of the stack
Domanda: Come ti ridisegnare, riscrivere o rinominare i mnemonici precedenti e per quali motivi?
Holy Crap, un assemblatore di spazi bianchi? Credo che il tuo geek-o-meter sia arrivato a undici! – Martin