我將代碼寫入計算機中每個字符的字符串頻率中,並且數組的索引爲0到255,它們是ascii索引,值是該字符出現的頻率。使用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
我發現錯誤出現在循環'inc dword ptr [edi + eax]; value ++'似乎是錯誤的。你能幫我解決嗎? – 2013-05-09 21:45:43
'inc dword ptr [edi + eax * 4]'看起來對我更好。你在加載'edi'時需要一個'offset'嗎? – 2013-05-09 22:23:51