업데이트 (2017-11-13) :MASM 배열이 루핑되지 않음
다른 변수 "index"를 추가하고 0으로 설정했습니다. 그런 다음 모든 .IF 루프가 끝나면 인덱스에 4 (DWORD)를 추가 한 다음 esi 레지스터로 전달하고 올바른 배열 변수를 가리 킵니다. 또한 includedCounter 변수를 .IF 루프 외부로 옮겼습니다. 대답은 이제 정확합니다 !!
I가되어> = 3 어레이로의 포인터 [ESI]가 유일한 배열의 첫 번째 값을 "반복"한다 & & < = 8 (배열과 합 값만 통해 루프려고 삼).
ESI가 다음 배열로 증가하지 않는 이유는 무엇입니까?
값은 합계에 대해 "64"를 반환하고 includedCounter에 대해 "13"을 반환해야합니다. 현재 값은 sum에 대해 "60"으로 반환되고 includesCounter에 대해 "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
'ESI'를 증가시키는 코드 부분은 무엇입니까? –
ESI가 배열의 값을 가리 키도록 배열에 추가되면 배열의 다음 값을 가리 키기 위해 ESI를 증가시켜야합니다. 맞습니까? – Robert