2017-05-17 6 views
-3

Wenn es eine Adresse eines char-Arrays in eax gibt, was ist der Unterschied zwischen 0 (% eax) und (% eax) oder sind sie identisch, beziehen sich beide auf das erste Element im Array?Was ist der Unterschied zwischen 0 (% eax) und (% eax)?

+5

als Sie zusammengebaut dann auseinandergebaut haben, haben Sie einen Unterschied gesehen? –

+0

Denken Sie darüber nach, was '0 (% eax)' bedeutet. Dies bedeutet, dass ein Offset von 0 von dem Wert in "eax" vorliegt. Nun, was bedeutet '(% eax) '? Es bedeutet der Wert in 'eax'. Solange also x == x + 0, nein, gibt es offensichtlich keinen Unterschied. –

+0

Wenn Sie in Disassembler-Ausgabe (im Gegensatz zum Assembly-Quellcode) etwas wie "0 (% eax)" sehen, ist die 0 wahrscheinlich das Ziel einer Verschiebung, die einen anderen Wert bei der Verknüpfung der Objektdatei ändern würde. –

Antwort

0

Sie sind gleich.

Angenommen, Sie hatten eax richtig eingestellt, um auf die Adresse des ersten Elements im Array zu zeigen, könnte movb verwenden, um ein Byte von Daten in das Array zu setzen, das es verwendet.

+0

Was hat MOVB mit irgendetwas zu tun? Wenn es nur ein zufälliges Beispiel ist, ist es besonders verwirrend, weil Sie 'MOVB' nicht mit' EAX' verwenden können, wie in der Frage gezeigt; ein BYTE-großes Register ist erforderlich. Vielleicht wäre ein besseres Beispiel MOVZBL gewesen? Oder einfach 'MOVL', um einen DWORD-Wert zu speichern. –

+0

Die Frage nach Char-Array in EAX gefragt, so dass der Zugriff auf Elemente des Arrays eine movb erfordern würde. zB: movb $ 32, 0 (% eax) – lostbard

1

Sie sind genau gleich. Man könnte dies leicht beweisen, indem sie die Montage und Demontage der dann zwei Befehle:

movl (%eax),%edx 
movl 0(%eax),%edx 
Disassembly of section .text: 

0000000000000000 <.text>: 
    0: 67 8b 10    mov (%eax),%edx 
    3: 67 8b 10    mov (%eax),%edx 

Beachten Sie, dass sie genau die gleiche Codierung in Bytes.

Verwandte Themen