Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 条件循环内MASM x86程序集_Loops_Assembly_Masm_Irvine32 - Fatal编程技术网

Loops 条件循环内MASM x86程序集

Loops 条件循环内MASM x86程序集,loops,assembly,masm,irvine32,Loops,Assembly,Masm,Irvine32,我正在使用欧文图书馆 我想遍历一个DWORD数组,同时检查每个值是否在j和k的范围内。我的代码目前不起作用。以下是我所拥有的: 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

我正在使用欧文图书馆

我想遍历一个DWORD数组,同时检查每个值是否在j和k的范围内。我的代码目前不起作用。以下是我所拥有的:

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]
必须在源操作数和目标操作数之间切换位置。
移动
添加esi,在循环指令前键入myArr

如果没有执行条件跳转,则无条件跳转到
添加esi,键入myArr
指令

在mov ecx中,myArr的长度是4还是16