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)?
Antwort
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.
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. –
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
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.
- 1. Linux Assembly: Was ist der Unterschied zwischen "Test eax, eax" und "cmp eax, 0"
- 2. Was ist der Unterschied zwischen "mov (% rax),% eax" und "mov% rax,% eax"?
- 3. `testl` eax gegen eax?
- 4. Der Punkt Test% eax% eax
- 5. Was ist die Funktion der "mov eax, cr3; mov cr3, eax" in x86 Assemblercode?
- 6. xorl% eax,% eax in x86_64 assembly code produziert von gcc
- 7. Warum hat GCC mov% eax,% eax generiert und was bedeutet das?
- 8. Ist __asm {}; den Wert von eax zurückgeben?
- 9. mit ESI langsamer als EAX?
- 10. was ist leal (% edx,% edx, 4),% eax bedeutet?
- 11. Wie überprüfe ich CPUID (EAX = 14H, ECX = 0)?
- 12. Was ist der Unterschied zwischen ESP- und EIP-Registern?
- 13. Was bedeutet X in EAX, EBX, ECX ... in der Montage?
- 14. Warum sollte man "movl $ 1,% eax" im Gegensatz zu sagen "movb $ 1,% eax" verwenden?
- 15. Was ist der Unterschied zwischen FILE_ATTRIBUTE_NORMAL und 0?
- 16. Was ist der Unterschied zwischen "kill-0" und "kill -9"?
- 17. Was ist der Unterschied zwischen null, 0 und nichts?
- 18. Was ist der Unterschied zwischen "{0}" und "&" in VB.NET?
- 19. Was ist der Unterschied zwischen [0] und [: 1] in Go?
- 20. Wie funktioniert "und eax, 80000000h" in der Montage
- 21. Wie speichert mov eax Daten im Speicher?
- 22. Was ist der Unterschied zwischen `==` und `ist`?
- 23. Bewegungsbefehl von EAX es Register gibt Fehler
- 24. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 25. Was ist der Unterschied zwischen Verilog! und ~?
- 26. Was ist der Unterschied zwischen ⊕ und + hier?
- 27. Unterschied zwischen clang und gcc
- 28. Ist es möglich,% eax mit Pufferüberlauf zu überschreiben?
- 29. Was ist der Unterschied zwischen "void function()" und "void * function()"?
- 30. Was ist der Unterschied zwischen a [0] und & a [0] in der Zeichenkette
als Sie zusammengebaut dann auseinandergebaut haben, haben Sie einen Unterschied gesehen? –
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. –
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. –