创建数组并添加值

Creating array and adding values

所以我正在做一项作业,但我在理解此类代码中的数组时遇到了一些问题(请记住,我对这些东西的了解是有限的)。我的代码应该要求用户输入将放入 SDWORD 数组中的值的数量,然后创建一个让用户输入数字的过程。我在下面完成了要求用户输入金额(保存在 "count" 中)的部分,但我正在努力处理其他程序部分例如,如果他们输入 5,我的代码如下,那么我必须执行的程序将要求他们输入将进入数组的 5 个数字。

我面临的问题是我不确定如何实际设置数组。它可以包含 2 到 12 个数字之间的任何位置,这就是我在下面的代码中设置比较的原因。比方说,用户输入他们将输入 5 个数字,我这样设置...

.data
array SDWORD 5

我遇到的问题是我不确定那是说数组将包含 5 个值还是数组中只有一个值是 5。我需要数组中的值数量相等至 "count"。 "count" 我在下面设置的是用户要输入的金额。

而且我显然知道如何设置这样的程序...

EnterValues PROC

    return
EnterValues ENDP    

我只是不知道如何实现这样的东西。我在网上所做的所有研究只会让我更加困惑,我发现的 none 个示例要求用户在实际输入任何数字之前输入数组中的数字。我希望我所描述的是有道理的。任何关于我可能做的事情的输入都会很棒!

INCLUDE Irvine32.inc
.data
count SDWORD ?
prompt1 BYTE "Enter the number of values to sort",0
prompt2 BYTE "Error. The number must be between 2 and 12",0

.code

Error PROC
    mov edx, OFFSET prompt2
    call WriteString
    exit         ; exit ends program after error occures
Error ENDP

main PROC
    mov edx, OFFSET prompt1
    call WriteString    ; prints out prompt1
    call ReadInt
    mov count, eax     ; save returned value from eax to count

    cmp count, 12     
    jle Loop1       ; If count is less than or equal to 12 jump to Loop1, otherwise continue with Error procedure
    call Error      ; performs Error procedure which will end the program

    Loop1: cmp count, 2
    jge Loop2    ; If count is greater than or equal to 2 jump to Loop2, otherwise continue with Error procedure
    call Error   ; performs Error procedure which will end the program

     Loop2: exit
main ENDP
END main

============编辑==============

我想到了这个...

EnterValues PROC
    mov ecx, count
    mov edx, 0
    Loop3: 
       mov eax, ArrayOfInputs[edx * 4] 
       call WriteInt
       call CrLf 
       inc edx 
       dec ecx 
       jnz Loop3
    ret
EnterValues ENDP
.data
array SDWORD 5

DATA部分定义了oneSDWORD,初始值为5,并命名为"array".

您可能想要使用 DUP operator

.data
array SDWORD 12 DUP (5)

这定义了十二个 SDWORD 并用值 5 初始化它们中的每一个。如果初始值无关紧要,即你想要一个未初始化的数组,将初始值更改为 '?':

array SDWORD 12 DUP (?)

MASM 现在可以创建 _BSS segment。强制决定:

.data?
array SDWORD 12 DUP (?)

符号array在MASM程序中用作第一个条目地址的常量偏移量。使用附加索引来处理后续条目,例如:

mov eax, [array + 4]    ; second SDWORD
mov eax, [array + esi]

指针运算:

lea esi, array          ; copy address into register
add esi, 8              ; move pointer to the third entry
mov eax, [esi]          ; load eax with the third entry

lea esi, array + 12     ; copy the address of the fourth entry
mov eax, [esi]          ; load eax with the fourth entry

您在每种情况下都有一个固定大小的数组。由您负责,只需用 count 值填充即可。