Discussion:
Assembler gesucht
(zu alt für eine Antwort)
Sebastian Biallas
2006-02-02 22:51:08 UTC
Permalink
Hallo!

Ich suche einen x86-Assembler mit folgenden Eigenschaften:

1) Intel-Syntax

2) läuft unter allen gängigen x86-Betriebssystemen (d.h. min. Linux,
Windows (cygwin), BSDs). "Läuft" heißt: kann ein Output generieren, mit
dem der dort ansässige gnu-ld was anfangen kann.

3) Halbwegs intelligent. Ich kann auch direkt Maschinensprache
schreiben. Ist aber nicht sinnvoll, wenn der Computer mir Arbeit
abnehmen kann, und sich jeweils für die kurzmöglichsten Opcodes
entscheiden kann, sofern sinnvoll. Ich weiß, das ist Arbeit, wenn man
die Datei dafür drölf mal parsen muss, aber mein Computer macht das
gerne für mich.

4) Ein kann halbwegs mit Makros umgehen.

5) x86_64-Unterstützung wäre nicht schlecht.


Bis jetzt habe ich nasm verwendet. Der ist aber irgendwie tot und hat
Punkt 3 sowieso nie wirklich erfüllt. yasm ist eigentlich der gleiche
Mist in grün, dafür aber wenigstens nicht dokumentiert. gas scheidet
wegen Punkt 4 wohl aus.

Gibt's sowas wirklich nicht? Läuft masm unter Wine?
--
Gruß,
Sebastian
Florian Weimer
2006-02-03 10:22:19 UTC
Permalink
Post by Sebastian Biallas
Gibt's sowas wirklich nicht?
GAS beherrscht die Intel-Syntax und nimmt neuerdings auch die kürzeren
Opcodes (selbst wenn in den Quellen etwas anderes steht).
Sebastian Biallas
2006-02-03 16:01:58 UTC
Permalink
Post by Florian Weimer
Post by Sebastian Biallas
Gibt's sowas wirklich nicht?
GAS beherrscht die Intel-Syntax und nimmt neuerdings auch die kürzeren
Opcodes (selbst wenn in den Quellen etwas anderes steht).
Bei genauerer Betrachtung gefällt mir GAS gar nicht mal so schlecht.
Dokumentation ist zwar etwas dürftig, aber man kann ja nicht alles haben.

Wo muss ich denn ansetzten, wenn ich z.B. nur unter Windows alle extern
sichtbaren Symbole mit '_' prefixen will? Nasm hatte dafür die Option
"--prefix _", wahrscheinlich geht es hier irgendwie anders.
--
Gruß,
Sebastian
Heiko Nocon
2006-02-03 15:48:12 UTC
Permalink
Post by Sebastian Biallas
3) Halbwegs intelligent. Ich kann auch direkt Maschinensprache
schreiben. Ist aber nicht sinnvoll, wenn der Computer mir Arbeit
abnehmen kann, und sich jeweils für die kurzmöglichsten Opcodes
entscheiden kann, sofern sinnvoll.
Dann nimm halt einen Hochsprachencompiler und keinen Assembler. Das
besondere an einem Assembler ist ja gerade, daß man die Codegenerierung
bis ins kleinste Detail beeinflussen kann.

Will man das nicht und sich statt dessen auf Maschinenlogik verlassen,
dann kann man auch gleich eine Hochsprache verwenden. Da hat man dann
wenigstens auch deren Vorteile.
Sebastian Biallas
2006-02-03 16:15:06 UTC
Permalink
Post by Heiko Nocon
Post by Sebastian Biallas
3) Halbwegs intelligent. Ich kann auch direkt Maschinensprache
schreiben. Ist aber nicht sinnvoll, wenn der Computer mir Arbeit
abnehmen kann, und sich jeweils für die kurzmöglichsten Opcodes
entscheiden kann, sofern sinnvoll.
Dann nimm halt einen Hochsprachencompiler und keinen Assembler.
Nehme ich ja für die Sachen, bei denen es geht. Wenn Du mir jetzt einen
Hochsprachencompiler vorschlägst, bei dem ich ohne Interna zu kennen
einfach den Stack unwinden kann in Code, der von on-demand generiertem
x86-Code aufgerufen wird und bei dem ich einfachen Zugriff auf Carry und
Overflow und Parity habe, würde ich den Assemblerteil wegschmeißen.
Post by Heiko Nocon
Das
besondere an einem Assembler ist ja gerade, daß man die Codegenerierung
bis ins kleinste Detail beeinflussen kann.
Ach, hör doch auf. Kein Mensch interessiert sich dafür, ob man "83c001",
"0501000000" oder "81c001000000" für "add eax, 1" nimmt. Das hängt doch
von Umständen ab, die der Assembler im Zweifel sehr viel besser kennt,
als man selber. Und welcher Assembler lässt einem die Wahl zwischen den
beiden Opcodes für "mov eax, ecx"[1]?
Post by Heiko Nocon
Will man das nicht und sich statt dessen auf Maschinenlogik verlassen,
dann kann man auch gleich eine Hochsprache verwenden. Da hat man dann
wenigstens auch deren Vorteile.
Computer können auf einer bestimmten Ebene Maschinensprache sehr viel
besser als Menschen generieren (solange man nicht 2 Jahre an 20 Bytes
Code forscht). Genau das will ich dem Assembler überlassen.

[1] Der HT kann das. Ist aber kein klassischer Assembler und in dem Fall
ist es nur Spielerei.
--
Gruß,
Sebastian
stefanen
2006-02-09 15:01:04 UTC
Permalink
Dem kann ich zustimmen.
Ohne Assembler ist es heute fast schon eine Zumutung.

Vorallendingen die Präfixe und Suffixe (die Teilweise noch von Flag's
abhängig sind) und die verschiedenen Schreibweisen (Intel/Motorola)
haben mir zu schaffen gemacht. (z.B.: Handbuch ist in Motorola und Chip
arbeitet mit Intel)

Den Stack gibt es z.B. als up-to-down oder down-to-up und usw.
Außerdem gibt es noch die 3-Argument-Befehle und was weiß der Teufel.
Zur Not ist ein scriptfähiger Texteditor besser und schneller als jede
Handarbeit.
(natürlich können dann keine Suffixe oder Präfixe durch Flag-Setzung
weggelassen werden)
Der Code ist nachher viel lesbarer und Zeit kostet es heute auch nicht
mehr, wenn der Op-Code ein wenig länger ist. (sicher gibt es Programme
wie z.B. LiLo, wo es auf jedes Byte ankommt, aber die sind die Ausnahme
und hier würde ich empfehlen Code aus dem Assembler nachzubearbeiten)
chaoscode
2006-05-18 15:05:44 UTC
Permalink
kann dir nur fasm(-> flat assembler) empfehlen
Post by Sebastian Biallas
Hallo!
1) Intel-Syntax
2) läuft unter allen gängigen x86-Betriebssystemen (d.h. min. Linux,
Windows (cygwin), BSDs). "Läuft" heißt: kann ein Output generieren, mit
dem der dort ansässige gnu-ld was anfangen kann.
3) Halbwegs intelligent. Ich kann auch direkt Maschinensprache
schreiben. Ist aber nicht sinnvoll, wenn der Computer mir Arbeit
abnehmen kann, und sich jeweils für die kurzmöglichsten Opcodes
entscheiden kann, sofern sinnvoll. Ich weiß, das ist Arbeit, wenn man
die Datei dafür drölf mal parsen muss, aber mein Computer macht das
gerne für mich.
4) Ein kann halbwegs mit Makros umgehen.
5) x86_64-Unterstützung wäre nicht schlecht.
Bis jetzt habe ich nasm verwendet. Der ist aber irgendwie tot und hat
Punkt 3 sowieso nie wirklich erfüllt. yasm ist eigentlich der gleiche
Mist in grün, dafür aber wenigstens nicht dokumentiert. gas scheidet
wegen Punkt 4 wohl aus.
Gibt's sowas wirklich nicht? Läuft masm unter Wine?
Lesen Sie weiter auf narkive:
Loading...