zatzen hat geschrieben:Ich glaube, ich muss mir jetzt einfach mal Lektüre besorgen zu dem ganzen Thema.
Es sei denn, das war jetzt alles was ich über Assembler wissen muss...
Was Segment Override betrifft, für FS schreibe ich dann einfach
woraus dann mov ax, fs:[si] wird?
Besser wäre wohl:
Was, wenn ich jetzt auch noch EAX verwenden will...
Für "mov eax, fs:[si]"
Code: Alles auswählen
db 64h ; Segment-Override Prefix
db 66h ; Operand-Size Prefix
mov ax, [si]
64 66 8B 04
...
Hier gibt es einen x86-Online-Assembler:
https://defuse.ca/online-x86-assembler.htm#disassembly
Um damit zu arbeiten sollte man allerdings folgendes beachten:
Es wird dort
nicht der 16 Bit-Mode verwendet, sondern der 32 Bit-Mode.
Dadurch ändert sich die defaultmäßige Grösse der Operanden und Adressen.
Das bedeutet im 32 Bit-Mode werden für 16 Bit Operanden und für 16 Bit Adressen die Operand-Size und Address-Size Prefixe im Code verwendet und mit eingefügt und für 32 Bit Operanden und für 32 Bit Adressen weg gelassen.
Also genau andersherum wie im 16 Bit-Mode.
Für ein "mov eax, fs:[si]" im 32 Bit-Mode bekommen wir dort: 64
67 8B 04
Weil im 32 Bit-Mode braucht "EAX" kein Operand-size Prefix, aber "SI" als 16 Bit-Adressregister braucht ein Address-Size Prefix.
Für unseren 16 Bit-Mode müssen wir deswegen für das "EAX" ein Operand-size Prefix(66h) mit einfügen und für das "SI" das
Address-Size Prefix(67h) herausnehmen.
So ganz ist mir das nicht klar, und ich schätze, das wird jetz hier zu
weit führen alles einzeln zu hinterfragen. Daher, wie gesagt, Lektüre...
Das wäre vielleicht meine letzte Bitte, wo ich sowas lesen kann,
ASM86FAQ wird hilfreich sein, aber ich sehe hier im letzten Posting auch,
dass da etwas auch der "Intel-Doku" entstammt.
Egal, hab jetzt endlich mal in ASMFAQ reingeguckt mit DOSferatus tollem
Reader, und habe da auch die Sache mit den Prefixes gefunden.
Danke nochmal an alle!
Als Lektüre habe ich selber nur ein PC-Intern Buch (von Data Becker).
Ich hatte Assembler aber vorher schon auf dem C64er kennen gelernt und danach auf dem PC das erste halbe Jahr nur mit Debug gearbeitet, um die X86-Befehle und die Speicherlandschaft zu erkunden. Erst danach habe ich mich auch mit DOS-Befehlen beschäftigt und dann dauerte es noch eine Weile bis ich mir aus dem Internet von Intel mir deren Dokumente heruntergeladen habe.
Ich meine im Internet findet man alles was man für das Lernen von x86-Assembler benötigt.
Eine grobe Vorstellung von Assembler ist aber sehr hilfreich und Englisch-Kenntnisse sollte man auch schon haben.
Mir kommt es so vor, als wenn ich selber ca. die Hälfte meiner Englisch-Kenntnisse im Internet gelernt habe, in dem ich viele Texte gelesen und auch englischsprachige Filme mir angeschaut habe und dann auch in englischen Newsgroups und Foren mich an Diskussionen beteiligt habe. Mangelnde Sprachkenntnisse waren bei technischen Themen eigentlich nie ein grosses Problem, weil dort sehr viel Rücksicht darauf genommen wird und sich jene Teilnehmer deren Muttersprache englisch ist sich wirklich viel Mühe geben ihren Texte so zu schreiben, so dass es verständlich wird was damit gemeint ist.
Ich meine Assembler gehört für den PC doch am ehesten noch zu DOS, auch wenn mit MASM32 Windows-Anwendungen erstellt werden können. So bin ich auch gerne weiterhin gewillt auch hier im DOS-Forum jede Art von Assembler-Fragen für reine DOS-Anwendungen so lange und ausführlich zu beantworten, wie es gewünscht wird.
Dirk