首页 > 解决方案 > 计算排序数组中重复数字的实例,存储一个计数数组

问题描述

这部分作业的背景:

COUNTLIST:
生成一个数组计数,其中包含每个值 [10, 29] 在 randArray 中出现的次数。例如,counts[0] 应该等于10数组中值的实例数。24counts[14] 应该等于randArray中值的实例数

添加上下文:列表 randArray 在调用 countList 之前按升序排序。因此,具有数字:10、10、11、12、12 的数组将被复制到另一个数组中作为 2、1、2。

countList PROC
    push    EBP
    mov     EBP, ESP
    
    mov     ESI, [ESP + 20]            ; randArray (200 digits w/n this array)
    mov     ECX, [ESP + 16]            ; loop counter (ARRAYSIZE, which is 200)
    dec     ECX                        ; 200 - 1

    mov     EBX, [ESP + 12]            ; array we want to add to (countArray)
    mov     EDX, [ESP + 8]             ;"counter" for # of repeats for a digit

    _FirstLoop:
        ; grab first digit of sorted array
        mov     EAX, [ESI]

        ; compare current value to next value
        cmp     EAX, [ESI + 4]
        je      _NextDigit
        jne     _AddCountArray

    _NextDigit:
        ; move to next item in array
        inc     EDX
        add     ESI, 4
        loop    _FirstLoop

    _AddCountArray:
        ; add total number of instances of specified digit to countArray
        mov     [EBX], EDX
        add     EBX,  TYPE DWORD
        loop    _FirstLoop

    pop     EBP
    RET     16

countList ENDP

也许是因为我看这个作业太久了,我错过了循环到底在哪里搞砸了?打算将值添加到其中的数组是空的。

非常感谢朝着正确方向迈出的任何一步。

标签: assemblyx86masm

解决方案


推荐阅读