簡體   English   中英

有條件的循環MASM x86程序集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM