Unterschiedliche kodierungen fuer den selben Befehl

01/12/2007 - 16:56 von Daniel Kruge | Report spam
Hallo NG!

Laut Intels 'General Purpose Instruction Formats and
Encodings for Non-64-Bit Modes' gibt es fuer die Befehle,
die auf zwei Register angewendet werden immer mindestens
zwei unterschiedliche encodings. Als beispiel waere da:

ADC ¡V ADD with Carry
register1 to register2 0001 000w : 11 reg1 reg2
register2 to register1 0001 001w : 11 reg1 reg2

oder auch:
CMP ¡V Compare Two Operands
register1 with register2 0011 100w : 11 reg1 reg2
register2 with register1 0011 101w : 11 reg1 reg2

Nun frage ich mich, warum extra ein zweiter Befehl dafuer
hinzugefuegt wurde nur um die Register in einer anderen
Reihenfolge kodieren zu koennen? Kann mir das mal jemand
erklaeren?


lg, DK
 

Lesen sie die antworten

#1 Adalbert Michelic
01/12/2007 - 19:28 | Warnen spam
* On 2007-12-01, Daniel Kruge wrote:
Laut Intels 'General Purpose Instruction Formats and
Encodings for Non-64-Bit Modes' gibt es fuer die Befehle,
die auf zwei Register angewendet werden immer mindestens
zwei unterschiedliche encodings. Als beispiel waere da:

ADC ¡V ADD with Carry
register1 to register2 0001 000w : 11 reg1 reg2
register2 to register1 0001 001w : 11 reg1 reg2

oder auch:
CMP ¡V Compare Two Operands
register1 with register2 0011 100w : 11 reg1 reg2
register2 with register1 0011 101w : 11 reg1 reg2

Nun frage ich mich, warum extra ein zweiter Befehl dafuer
hinzugefuegt wurde nur um die Register in einer anderen
Reihenfolge kodieren zu koennen? Kann mir das mal jemand
erklaeren?



Einer der beiden Operanden kann auch ein Speicheroperand sein -
welcher der beiden das ist, kodiert die Befehlsform (bei ADC liegt
der Unterschied wohl auf der Hand, aber auch bei CMP gibts einen -
die Flags werden anders gesetzt).


Adalbert

Ähnliche fragen