组装新手请求帮助:将一些东西放入数组中

Assembly newbie requesting help: Putting something in an array

最终,我要做的是让 requestInput 重复 25 次,并将每次迭代接收到的输入存储到 SINTArray 中的以下索引中,但我不确定如何将某些内容放入数组中。循环我稍后会处理,但我将如何做到这一点,以便 requestInput 的第一次迭代将接收到的输入放入索引 0,第二次迭代将接收到的输入放入索引 1 等等?

.data
theSINTArray BYTE 25 dup(?)              
prompt BYTE "Please enter a value: ",0


.CODE

main PROC

push    TYPE theSINTArray
push    LENGTHOF theSINTArray
push    OFFSET theSINTArray
call    requestInput
exit

main ENDP

requestInput PROC

push    edx                                        
mov     edx,OFFSET prompt                          
mov     edi,OFFSET theSINTArray                    
call    WriteString                                
call    ReadInt                                    
pop     edx                                        
ret

requestInput ENDP


END     main

我根据@SepRoland 的回答进行的第二次尝试:

.data
theSINTArray BYTE 25 dup(?)              
prompt BYTE "Please enter a value: ",0


.CODE

main PROC

push    TYPE theSINTArray
push    LENGTHOF theSINTArray
push    OFFSET theSINTArray
call    requestInput
exit

main ENDP

requestInput PROC

Next:
push    edx                                        
mov     edx,OFFSET prompt                          
call    WriteString                                
call    ReadInt 

mov     edx, offset theSINTArray
mov     [edx], al
inc     edx
cmp     edx, offset theSINTArray + 25
jb      Next

pop     edx                                        
ret

requestInput ENDP


END     main

您将 theSINTArray 定义为字节数组,因此您需要 mov [edx], al 等指令来存储值,然后使用 inc edx指向字节大小数组中的下一个元素。

 mov   edx, offset theSINTArray
Next:
 call  requestInput
 mov   [edx], al
 inc   edx
 cmp   edx, offset theSINTArray + 25
 jb    Next

响应您将值赋值置于 requestInput 过程中的努力。

  • 您已将 Next 标签放在 push edx 指令上方。这意味着 pop edx 必须在循环内完成。
  • 您已在每次迭代中重新初始化指针,因此将始终写入第一个数组元素。将其移到循环上方。

是这样的:

requestInput PROC
 mov     edx, offset theSINTArray
Next:
 push    edx                                        
 mov     edx,OFFSET prompt                          
 call    WriteString                                
 call    ReadInt
 pop     edx 
 mov     [edx], al
 inc     edx
 cmp     edx, offset theSINTArray + 25
 jb      Next
 ret
requestInput ENDP