나는 문자열의 빈도로 각 문자를 컴퓨터에 작성하고 인덱스는 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
나는 그 오류가 루프'inc dword ptr [edi + eax];에오고, 값 ++는 틀린 것처럼 보였다. 내가 고칠 수있게 도와 줄 수 있니? –
'inc dword ptr [edi + eax * 4]'는 나에게 잘 어울립니다. 'edi'를로드 할 때'offset'이 필요합니까? –