Für meine erste Frage, nehmen wir an, wir die folgende Zeile von Code unter .data haben:Was bedeutet die Syntax, um ein Array zu deklarieren und Funktionen aufzurufen?
"theSINTArray BYTE 256 dup(?)".
Ich weiß, dass dieser Code ein Array erstellt, in dem jedes Element ein BYTE sein muss, aber was sind die 256 und dup (?) dort für?
Ich weiß, dass der folgende Code den Typ, die Länge und den Offset/die Adresse des SINTArray auf den Stack verschiebt, aber was ich gerne wissen würde ist, ob es möglich ist, sie vom Stapel zu holen und innerhalb eines Unterprogramms zu verwenden . Diese
main PROC push TYPE theSINTArray push LENGTHOF theSINTArray push OFFSET theSINTArray call testParameters exit main ENDP
ist ein bisschen eine langweilige Frage, so dass ich im Voraus entschuldigen, aber ich einfach nicht verstehen, warum ein großer Teil der Leitungen in dem Codebeispiel unten erforderlich sind. Angenommen, ich habe die Zeile "prompt BYTE" Bitte geben Sie einen Wert ein: ", 0" in der .data-Abschnitt, was ist der Zweck jeder Zeile des Codes unten? Anmerkung: WriteString und ReadString sind Unterroutinen, die in Irvines Bibliothek definiert sind, die ich verwende.
testOutput PROC push edx push ecx mov edx,offset prompt call WriteString pop ecx pop edx call ReadString ret testOutput ENDP
-2
A
Antwort
4
was sind die 256 und dup (?) Da?
Lesen Sie die assembler's manual. TL; DR: behält sich 256 nicht initialisierten Bytes
wenn es möglich ist, sie aus dem Stapel abzurufen und nutzen sie in einem Unterprogramm
Natürlich ist es möglich, Argumentübergabe dumm wäre, wenn die callee konnte nicht auf die Argumente zugreifen;) Sie adressieren sie relativ zu esp
(dem Stapelzeiger) oder, nachdem Sie es als Rahmenzeiger eingerichtet haben, ebp
. Beispiele: [esp+4]
oder [ebp+8]
.
was ist der Zweck jeder Zeile des Codes unter
testOutput PROC ; begin testOutput procedure
push edx ; save edx on stack
push ecx ; save ecx on stack
mov edx,offset prompt ; load edx with address of prompt
; presumably argument to WriteString
call WriteString ; invoke WriteString procedure
pop ecx ; restore ecx saved above
; in case WriteString modified it
pop edx ; restore edx saved above (we have modified it)
call ReadString ; invoke ReadString procedure
ret ; return from subroutine
testOutput ENDP ; end of procedure
Verwandte Themen
- 1. Was bedeutet die Syntax! Function() {...}?
- 2. ein Array-Typ Deklarieren
- 3. Was bedeutet diese Syntax?
- 4. Was bedeutet die '=>' Syntax in C#?
- 5. Was bedeutet diese Syntax, die `functionName: {}` mag?
- 6. Was bedeutet ‚\“ in PHP Syntax bedeutet eigentlich
- 7. Was bedeutet eigentlich das Deklarieren und Instanziieren eines C# -Arrays?
- 8. Was bedeutet "!", "?", "_" Und "." Syntax in Elixir
- 9. Was bedeutet diese Scala-Syntax (_ *)?
- 10. Was bedeutet diese Python-Syntax?
- 11. Was bedeutet diese PHP-Syntax
- 12. Was bedeutet :: in Ruby-Syntax?
- 13. Was bedeutet diese PHP-Syntax?
- 14. Was bedeutet assoziatives Array?
- 15. Wann ein Variablenproblem zu deklarieren
- 16. Was bedeutet diese Array-Init-Syntax? (Elemente mit Schlüsseln)
- 17. Eine Möglichkeit, ein Array inline zu deklarieren?
- 18. JavaScript wandelt ein Array in ein Array von Funktionen um
- 19. Mit typedef für ein Array einen neuen Typ zu deklarieren
- 20. Was bedeutet% w (Array)?
- 21. So deklarieren Sie ein Array in Java
- 22. java playframework syntax! Was bedeutet es eigentlich?
- 23. Cython Syntax für Klassenhierarchien deklarieren, die Aliase
- 24. VB-Syntax, um ein einzelnes Modell in MVC zu deklarieren (stark typisierte Ansichten zu nutzen)
- 25. Was bedeutet diese Syntax in Swift?
- 26. in Swift, was bedeutet diese spezifische Syntax?
- 27. Was bedeutet diese Syntax in objc?
- 28. Was bedeutet die Syntax? meinst du in diesem Ruby-Beispiel?
- 29. Ein Array deklarieren (Visual C++)
- 30. Was bedeutet **/* in der Maven-Syntax?
Hofnarr, Ihre Antwort verbessert definitiv mein Verständnis der Codebeispiele, aber ich habe zwei weitere Fragen haben. Für das erste Codebeispiel, wenn Sie "Reserve" sagen, meinen Sie die Anzahl der Indizes im Array festlegen? Also "256 dup (?)" Macht es so, dass das SINTArray 256 Indizes hat? Was passiert auch, wenn das Fragezeichen neben dup durch ein anderes Zeichen wie eine Zahl ersetzt wird? – Proto
Mit anderen Worten, es reserviert ein 256-Byte-Array, das nicht auf einen bestimmten Wert initialisiert wird, der Ihnen wichtig ist. Wenn Sie sich kümmern, können Sie diesen Wert natürlich anstelle des '?' Geben. – Jester
Oh, jetzt verstehe ich, dass der Wert innerhalb der Klammern verwendet wird, um den Wert zu initialisieren, der in jedem Byte gespeichert ist. Danke für deine Hilfe, Jester. – Proto