x86 assembly language newbie requesting explanation of lines of code : 1. For my first question, let's assume we have the following line of code under .data: 
 

        "theSINTArray BYTE 256 dup(?)". 

 I know that this code creates an array in which each element must be a BYTE, but what are the 256 and dup(?) there for?
 
2. I know that the code below pushes the type, length and offset/address of theSINTArray onto the stack, but what I would like to know is if it is possible to retrieve them from the stack and utilize them within a subroutine.

        main PROC

        push    TYPE theSINTArray
        push    LENGTHOF theSINTArray
        push    OFFSET theSINTArray
        call    testParameters
        exit

        main ENDP



3. This is a bit of a tedious question, so I apologize in advance, but I simply don't understand why a large portion of the lines in the code sample below are necessary. Assuming I have the line "prompt BYTE "Please enter a value: ",0" in the .data section, what is the purpose of each line of the code below? Note: WriteString and ReadString are subroutines defined in Irvine's library, which I am using.

        testOutput PROC
    
        push    edx
        push    ecx
        mov     edx,offset prompt
        call    WriteString
        pop     ecx
        pop     edx
        call    ReadString
        ret
    
        testOutput ENDP
