声明数组和调用函数的语法是什么意思?

What does the syntax mean for declaring an array, and for calling functions?

  1. 对于我的第一个问题,假设我们在 .data 下有以下代码行:

    "theSINTArray BYTE 256 dup(?)". 
    

    我知道这段代码创建了一个数组,其中每个元素都必须是一个 BYTE,但是 256 和 dup(?) 有什么用?

  2. 我知道下面的代码将 SINTArray 的类型、长度和 offset/address 压入堆栈,但我想知道的是是否可以从在子程序中堆叠和利用它们。

    main PROC
    
    push    TYPE theSINTArray
    push    LENGTHOF theSINTArray
    push    OFFSET theSINTArray
    call    testParameters
    exit
    
    main ENDP
    
  3. 这个问题有点乏味,所以我提前道歉,但我只是不明白为什么下面代码示例中的大部分行都是必要的。假设我有行 "prompt BYTE "Please enter a value: ",0" in the .data section,下面每一行代码的目的是什么?注意:WriteString 和 ReadString 是 Irvine 库中定义的子例程,我正在使用它。

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

what are the 256 and dup(?) there for?

阅读assembler's manual。 TL;DR: 保留 256 个未初始化的字节

if it is possible to retrieve them from the stack and utilize them within a subroutine

当然有可能,如果被调用方无法访问参数,则参数传递将是愚蠢的;)您相对于 esp(堆栈指针)寻址它们,或者在您设置它之后作为帧指针,ebp。示例:[esp+4][ebp+8].

what is the purpose of each line of the code below

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