文字列の頻度の各文字をコンピュータで処理するコードを作成します。配列のインデックスは 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