创建数组并添加值

时间:2017-04-25 01:11:32

标签: visual-studio-2010 assembly masm irvine32

所以我正在完成一项任务,我在这类代码中理解数组时遇到了一些问题(请记住,我对这些东西的了解有限)。我的代码应该要求用户输入将放入SDWORD数组中的值的数量,然后创建一个用户输入数字的过程。我有下面的部分,询问用户的金额(保存在“计数”)但我正在努力与其他程序部分例如我的代码如果他们输入5然后我必须做的程序需要他们输入5个可以输入数组的数字。

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

.data
array SDWORD 5

我遇到的问题是,我不确定是否说数组将保存5个值,或者数组中只有一个值是5.我需要数组中的值等于“计数”。我在下面设置的“计数”是用户要输入的金额。

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

EnterValues PROC

    return
EnterValues ENDP    

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

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

============ EDIT ==============

我想出了这个......

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

1 个答案:

答案 0 :(得分:0)

.data
array SDWORD 5

DATA部分中定义一个 SDWORD,初始值为5,并为其命名" array"。

您可能想要使用DUP operator

.data
array SDWORD 12 DUP (5)

这定义了十二个SDWORD并用值5初始化它们。如果初始值不重要,即你想要一个未初始化的数组,将初始值更改为'?&# 39;:

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值。