2016-04-04 10 views
-2
  1. 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?

  2. 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 
    
  3. 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 
    

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 
+0

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

+0

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

+0

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

Verwandte Themen