Ich habe mit gdb gesehen, dass, wenn Bytes aus dem Speicher in Register kopiert werden, sie umgekehrt werden, wenn das verwendete System den Little-Endian-Ansatz annimmt.Operationen und endianess
Da der x86 Assembly-Befehlssatz im besten Fall keine Operationen erlaubt, deren Operanden sich im Speicher befinden, frage ich mich: Gibt es irgendeinen Vorgang, der direkt auf Little Endian-Werten ausgeführt wird, ohne zuerst umgekehrt zu werden?
Sie können zwei Speicheroperanden haben, aber mindestens einer davon muss implizit sein. Siehe zum Beispiel 'push',' pop' oder 'movs'. Ich verstehe den Rest Ihrer Frage nicht oder warum sie 2 Speicheroperanden benötigen würde. Zum Beispiel "add [foo], eax" ist legal und arbeitet mit Speicher. – Jester
Was ich meinte war: Betrachten Sie die Operation add -0x8 (% ebp),% eax. Was es tut, ist, den ersten Wert aus dem Speicher zu holen, ihn umzukehren und ihn dann dem Inhalt von eax hinzuzufügen. Abschließend wird das Ergebnis in eax gespeichert. Meine Frage ist: gibt es irgendeine Operation (neben denen zum Bewegen von Speicher herum), die den Speicheroperanden nicht umkehrt? – badnack
es ist nicht "umgekehrt", es ist im Speicher in der richtigen Reihenfolge und lesen aus dem Speicher in der richtigen Reihenfolge, ls Byte Spur zuerst, ms Byte Spur zuletzt, setzt der Controller die Bytes auf der rechten Byte-Spur, genau wie auf einem großen Endian Maschine setzt die Steuerung die Bytes auf die rechte Byte-Spur. x86 erlaubt nicht ausgerichtet, so dass es noch schlimmer ist, als dass es Bytes nehmen muss, die sich in einer der Spuren befinden, und sie auf die richtige Spur bewegen (entweder auf dem Bus oder innerhalb des Prozessorkerns, abhängig vom Design). –