我在数组中添加数字时遇到问题 - x86 MASM 程序集



我必须创建一个从 27 到 58 的 100 个数字计数的随机范围,然后将 100 个位置的所有数字相加以获得总数。但是,当我这样做时,我得到一个随机数和九十九个 32。我到处搜索并尝试了可能的解决方案,但我要么得到相同的结果,要么得到随机垃圾。有人可以提供一些帮助吗?

INCLUDE irvine32.inc
    .data
         a DWORD 27
         b DWORD 58
         delta DWORD ?
         source DWORD 100 DUP(?)
         prompt BYTE "The sum of the 100 counts in array is ",0
    .code
    main PROC
         Call Randomize
         mov edi, 0
         mov edi, OFFSET delta
         mov esi, OFFSET source
         mov eax, b
         sub eax, a
         inc eax
         mov delta, eax
         mov ecx, LENGTHOF source
         mov eax, 0
         L1:    
             mov eax, delta     
             call randomrange
             add eax, a
             mov source, eax
             call writedec
             mov al, " "
             call writechar

         loop L1
         call crlf
         call crlf
         mov ecx, SIZEOF source
         mov edx, OFFSET prompt
         call writestring
         l2:
             add eax,[esi]  
             add esi, TYPE delta
             call writedec
             mov al, " "
             call writechar
         loop l2
    exit
    main ENDP

    END main

我假设随机范围将其随机数保留在EAX中。

在 L1 循环中,将 A 添加到 EAX 以获取随机值,然后每次通过 L1 循环将其复制到 SOURCE 的第一个元素。 这就是为什么第一个元素是随机的,但数组的其余部分没有被触及。 (请注意,您在 L2 中遇到了同样的问题 - 您始终从 SOURCE 的第一个元素获取要打印的值。

最新更新