[英]Conditional in Loop MASM x86 Assembly
我正在使用爾灣圖書館。
我想在檢查每個值是否在j和k范圍內時遍歷DWORD數組。 我擁有的代碼目前無法正常工作。 這是我所擁有的:
INCLUDE Irvine32.inc
COMMENT !
.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, code:DWORD
DumpRegs PROTO
!
.data
myArr DWORD 1h,2h,3h,4h
prompt BYTE "Enter the value for j and k: ", 0
counter BYTE ?
.code
MAIN PROC
mov eax, 0 ; sum
; Get user vals for j and k
mov edx, OFFSET prompt
CALL WriteString
CALL ReadInt
mov ebx, eax
CALL ReadInt
mov edx, eax
CALL sumArr ; Call #1 *****
mov ebx, 5 ; j = 5
mov edx, 8 ; k = 8
CALL sumArr ; Call #2 *****
Main endP
sumArr PROC USES esi ecx edx ebx
mov counter, LENGTHOF myArr
mov esi, OFFSET myArr ; location pointer
mov ecx, LENGTHOF myArr ; size
getArr:
cmp ebx, [esi]
jae aboveEqual
add esi, TYPE myArr
aboveEqual:
cmp edx, [esi]
jbe inRange
inRange:
add eax, [esi]
LOOP getArr
CALL DumpRegs
RET
sumArr ENDP
我希望能夠對數組中的每個元素進行比較。 我怎樣才能做到這一點?
您忘記了SUMARR中的EAX為零。
cmp ebx,[esi]
和cmp edx,[esi]
必須將源和目標操作數進行交換。
將add esi, TYPE myArr
移動到LOOP指令之前。
如果不執行條件跳轉,則無條件跳轉到add esi, TYPE myArr
指令。
在mov ecx, LENGTHOF myArr
的立即數是4還是16?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.