【发布时间】:2015-11-12 20:27:43
【问题描述】:
我目前正在尝试学习汇编,我的任务之一是获取用户输入的整数并将这些数字插入到数组中。一旦数组有 7 个整数,我将遍历数组并打印出数字。但是,我目前坚持如何将数字插入数组。这是我现在的代码:
.DATA
inputIntMessage BYTE "Enter an integer: ", 0
inputStringMessage BYTE "Enter a string: ", 0
intArray DWORD 0,0,0,0,0,0,0
intCounter DWORD 0
user_input DWORD ?
.CODE
main PROC
mov eax, intCounter
mov edx, 0
top:
cmp eax, 7
je final1
jl L1
L1: intInput inputIntMessage, user_input
mov ebx, user_input
mov intArray[edx], ebx ;This is where I think the problem is.
add edx, 4
inc eax
jmp top
final1:
mov ecx, 0
mov edx, 0
printarrayloop:
cmp edx,7
jl L2
je next
L2: intOutput intArray[ecx]
add ecx, 4
inc edx
next:
next: 直接进入下一个问题;与此插入数组问题无关。我的想法是我应该使用数组的偏移量,所以我可以访问数组中每个元素的地址并直接更改它,但我不知道如何。有人能指出我正确的方向吗?
编辑:当我运行程序时,窗口提示用户输入一个整数 7 次(这是预期的),然后打印出用户输入的第一个数字。但是,窗口应该打印出用户输入的所有数字。
【问题讨论】:
-
你有没有在调试器中单步执行代码来观察会发生什么?
-
jl L1; L1:的意义何在?intInput宏是否保留eax中的内容? -
是的,但不幸的是我无法从中获得任何信息。所有变量都正确递增,所有寄存器都应该是。
-
@500-InternalServerError 实际上,我只是注意到一个错误。 jl L1 如果 eax 小于 7 应该跳转到 L1 (即代码还没有执行 7 次,所以它将继续执行直到它运行 7 次。)你的意思是宏保留 @987654326 中的内容@?
-
运行程序时会发生什么?
jl L1L1: mov...` 只是删除jl L1。jl L2je next可以简化为jge next。而不是做intArraty[edx]然后add edx, 4您可以删除add edx,4并通过将intArray[edx]更改为intArray[edx*4]来使用缩放索引寻址(类似的事情适用于您的输出)。这些更改不会修复错误,但会使代码更简洁。