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

问题描述:

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

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 

我假设randomrange在EAX中留下它的随机数。

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

+0

对于L2,我打印出一串32。当我改变代码时,它仍然是相同的结果。我不知何故只是打印出注册的大小?因为我想要数组的总增加结果,而不是32。 – shemeria 2012-04-16 20:24:55