组装新手请求帮助:将一些东西放入数组中
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
最终,我要做的是让 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