0

文字列の頻度の各文字をコンピュータで処理するコードを作成します。配列のインデックスは 0 から 255 で、これは ASCII インデックスであり、値は文字が出現する頻度です。

文字列内の各文字を比較し、毎回配列に 1 追加します。

しかし、カウントが正しくないように見える(大きすぎる)というエラーを見つけることができませんか?

結果はここに画像の説明を入力

しかし、結果のカウントが大きすぎます。

エラーは L1 ループで発生し、ループによって非常に大きな数が発生する理由がわかりません。

私が間違っていることを教えてください。

お読みいただきありがとうございます。

INCLUDE Irvine32.inc

.data
    testString BYTE "AAEBDCFBBC",0 
    freqTable DWORD 256 DUP(0)
    prompt BYTE 0Dh, 0Ah, 0
    prompt1 BYTE ": ", 0
.code   


Freq PROC uses edi,
        tString:PTR BYTE, 
        fTable:PTR DWORD

    mov eax,0
    CLD

    mov edi,fTable  
    mov ecx,256
    rep stosd;initialize fTable 0


    mov edi,fTable;reset edi position
    mov edx,tString
    mov ecx,SIZEOF tString;element number
    dec ecx;remove null character

    L1:
    mov al,[edx]  ;character value
    inc edx     ;index ++
    inc dword ptr[edi+eax] ;value ++
        Loop L1
    ret
Freq ENDP


main PROC
main ENDP
    INVOKE Freq, ADDR testString, ADDR freqTable
    mov ecx, 256
    mov ebx, 0
    mov edi,OFFSET freqTable
    mov eax, 0

    L1:
        call WriteHex;index
        mov  edx,OFFSET prompt1
        call WriteString;": "

        mov ebx, [edi + eax]
        xchg eax,ebx
        call WriteInt
        xchg eax,ebx
        mov  edx,OFFSET prompt
        call WriteString;endline
        inc eax;index ++
        Loop L1
        ;ret
END main
4

1 に答える 1