更新(2017-11-13):
我正在尝试遍历一个数组并仅将> = 3&&的值相加。 < = 8.数组的指针[ESI]仅“循环”到数组(3)中的第一个值。
为什么ESI没有递增到下一个数组?
对于总和,值应返回“64”,对于includedCounter,值应返回“13”。对于sum,当前值返回为“60”,对于includedCounter,当前值返回“20”,这告诉我数组中的第一个整数始终被指向,而不是指向数组中的每个整数。
; Calculates the sum of all array elements
; >= "lower" value (3) and <= "higher" value (8).
INCLUDE Irvine32.inc
.data
sum DWORD ? ; EAX - holds sum of included integers
lower DWORD 3 ; holds lower value
upper DWORD 8 ; holds higher value
;Update (2017-11-13)
index DWORD 0 ; holds index for array
;==============
loopCounter DWORD ? ; ESI - holds loop array pointer
includedCounter DWORD ? ; EDX - holds 'included' counter
array DWORD 3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4 ; values checked
arraySize = ($ - array) / TYPE array ; [current location lounter ($) - array / DWORD] = 20
.code
main PROC
mov eax, sum
mov ebx, lower
mov ecx, upper
mov edx, includedCounter
.WHILE loopCounter < arraySize ; While loopCounter is less than 20
;Update (2017-11-13)
mov esi, index
;===============
.IF (array[esi] >= ebx) && (array[esi] <= ecx)
add eax, array[esi]
inc includedCounter
.ENDIF
;Update (2017-11-13)
add index, 4
inc loopCounter
;================
.ENDW
; Display values
mov sum, eax
mov eax, sum
call WriteInt
call CrLF
mov eax, includedCounter
call WriteInt
Call CrLF
; Exit program
call WaitMsg
exit
main ENDP
END main
答案 0 :(得分:0)
您的评论(代码内外)表明您认为递增loopCounter
也会以某种方式自动增加ESI
。事实上,这些是不同的实体(一个是寄存器,另一个是存储器中的一个位置),所以这个&#34;自动增量&#34;没有发生。 (事实上,通常情况下,没有任何事情发生,#34;在汇编代码中自动发生。)