0

27から58までの100カウントのランダムな範囲を作成してから、100の位置にあるすべての数値を合計して合計する必要があります。ただし、これを行うと、結果として乱数と99個の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
4

1 に答える 1

0

randomrange はその乱数を EAX に残すと仮定します。

L1 ループでは、A を EAX に追加してランダムな値を取得し、L1 ループを通過するたびにそれを SOURCE の最初の要素にコピーします。そのため、最初の要素はランダムですが、配列の残りの部分は変更されていません。(L2 でも同じ問題があることに注意してください。常に、SOURCE の最初の要素から出力する値を取得します。)

于 2012-04-16T13:43:48.350 に答える