2010-10-10 7 views
7

Ho cercato per la scorsa settimana di trovare una risorsa decente sull'aritmetica in virgola mobile per l'assembly x86 utilizzando la sintassi AT & T. Idealmente, un elenco degli opcode, cosa fanno e dove sono memorizzati i float. Conosco la rappresentazione IEEE 754. Non ho familiarità con lo stack in virgola mobile e qualsiasi assembly che si riferisce all'aritmetica in virgola mobile.Un riferimento per aritmetica in virgola mobile in assembly di sintassi AT & T

È strano quanto sia difficile da trovare.

EDIT: Ho esaminato l'output gcc -S per il mese scorso, imparando l'assemblaggio. È così che ho capito tutto tranne l'aritmetica in virgola mobile. Anche dopo aver esaminato dozzine di piccoli programmi compilati senza ottimizzazioni, non riesco ancora a capire molto sugli opcode in virgola mobile e lo stack. Ho trovato solo esempi banali online.

+0

Modifica: quindi, seguire il suggerimento per leggere 'libm' e leggere i manuali di Intel. Mi dispiace, non hai alternative. Ci sono _no_ decenti risorse basate sulla sintassi AT & T, perché _nobody_ è seriamente usato dalla programmazione assembly x86. –

+1

Ok, quindi ero un po 'troppo severo nel dire che nessuno usa seriamente la sintassi AT & T. Ad ogni modo, se usi Google per "devpro-libm", puoi scaricare il codice 'libm' usato in OpenSolaris. Questo può essere un download più leggero di 'glibc'. Quindi, guarda nella directory 'usr/src/libm/src/i386/common' --- è una miniera d'oro di un assembly in virgola mobile, tutto scritto in sintassi AT & T. –

+1

Stavo proprio per scaricarlo. Grazie :) Inoltre, non mi piace la sintassi AT & T e presenta alcune gravi incongruenze, ma devo usare quello che devo usare. Nonostante sia sintassi Intel, [questo] (http://www.programmers-corner.com/tutorial/31) è una guida concisa simile a ciò che stavo cercando. Le modifiche per adattarsi alla sintassi AT & T sono facili. – Kizaru

risposta

4

OK. Inizia con la sintassi Intel prima, perché la maggior parte dei codificatori di assiemi x86 la usano. Intel's manuals sono una grande risorsa per imparare come l'x86 gestisce le cose a virgola mobile.

Dopo aver imparato l'assembly x86 in generale, la sintassi AT & non è così difficile da apprendere. Le cose principali da notare sono:

  • i registri sono prefissati da %; costanti numeriche sono preceduti da $
  • ordine registro viene scambiato per la maggior parte istruzioni due operandi (cioè, prima sorgente, destinazione ultima)
  • nomi delle istruzioni specificare la dimensione; quindi invece di mov dword ptr [ebx], 1337, potresti dire movl $1337, (%ebx).
+0

Non riesco a utilizzare la sintassi Intel. Questo è per un progetto del compilatore e stiamo usando la sintassi AT & T in modo che funzioni con gcc. – Kizaru

+2

@ Kizaru: So che non puoi _use_ it per il tuo progetto. Ma dovresti prima impararlo con esso. Usa nas come assemblatore, inizialmente. Quindi, una volta risolto il problema della programmazione dell'assemblaggio x86, allora utilizzare la sintassi AT & T. Fai in modo che il tuo progetto sia in grado di produrre in entrambi i formati, inizialmente come target di nasm, se vuoi. –

+0

Ho il compilatore completamente impostato per tutto tranne i float al momento. È l'unica cosa che mi trattiene. Questo è un progetto per un corso. – Kizaru

Problemi correlati