【问题标题】:I'm having problems adding numbers in an array -- x86 MASM assembly我在数组中添加数字时遇到问题——x86 MASM 程序集
【发布时间】:2012-04-16 13:27:19
【问题描述】:

我必须创建从 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

【问题讨论】:

    标签: arrays assembly x86 masm irvine32


    【解决方案1】:

    我假设 randomrange 将其随机数留在 EAX 中。

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

    【讨论】:

    • 对于 L2,我打印了一堆 32。当我更改代码时,结果仍然相同。我是否只是打印出寄存器的大小?因为我想要数组的总添加结果,而不是 32 的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多