Forum: Programmieren allgemein
by Apollonius,
3. Dez 2008
Ich habe mich schon gefragt, wann du dich danach erkundigen würdest. Hier wirst du fündig. Die anderen Handbücher wie z.B. der System Programming Guide sind als Lektüre übrigens auch recht interessant.
Das die beiden Anweisungen das selbe ModR/M-Byte haben, ist klar. Es wird nur zwischen verschiedenen Register-Kategorien unterschieden. ebx, bx und bl fallen beispielsweise in eine Kategorie....
Forum: Programmieren allgemein
by Apollonius,
3. Dez 2008
Bist du dir sicher bezüglich 2E und 3E? Die Intel-Handbücher erwähnen nur folgende Formen für mehrbytige Opcodes:
0F - ein weiteres Byte
66/F2/F3 - 0F - ein weiteres Byte
0F - zwei weitere Bytes
66 - 0F - zwei weitere Bytes
Daher sind lediglich 66, F2 und F3 doppeldeutig, da sie als Flag-Präfix und als "mandatory prefix" für SIMD-Anweisungen auftauchen. Als Unterscheidungsmerkmal wird...
Forum: Programmieren allgemein
by Apollonius,
2. Dez 2008
Ein SIB-Byte gibt es, wenn R/M 4 und Mod 0, 1 oder 2 ist.
Forum: Programmieren allgemein
by Apollonius,
2. Dez 2008
Das kommt in gültigem Maschinencode nicht vor. Auf die Präfixe muss ein Opcode folgen.
Forum: Programmieren allgemein
by Apollonius,
2. Dez 2008
Du brauchst einen gültigen Opcode-Anfang. Du kannst nicht mitten in den Anweisungs-Stream hineinfinden. Dies lässt sich auch am Delphi-Disassembler sehen: Wenn man in einer Assembler-Routine Direktiven wie dd verwendet, kommt erst einmal Nonsens raus, der auch weit über diese Definition hinausgehen kann, eben weil eine Anweisung "übergebunden" zu sein scheint. In der Praxis ist das allerdings...
Forum: Programmieren allgemein
by Apollonius,
2. Dez 2008
Die Präfixe sind eindeutig. In den Intel-Handbüchern sind alle möglichen Präfixe verzeichnet, danach kommt das erste Byte Opcode. Mit anderen Worten: Du überspringst zunächst alle Präfix-Bytes (F0, F2, F3, 2E, 36, 3E, 26, 64, 65, 66 und 67) und indizierst mit dem folgenden Byte die Opcode-Map. Bei einer Sache musst du allerdings aufpassen: Wenn auf bestimmte Präfix-Bytes das Byte 0F folgt,...