我应该创建一个包含 256 个 DWORD 的频率表,并使用 ASCII 代码作为索引来计算字符串中字符的出现次数。我陷入了如何使用存储的 ASCII 值作为索引并增加该索引的问题上。这是我到目前为止所拥有的。
TITLE String Find
INCLUDE Irvine32.inc
Get_freqs PROTO,
ptrTarget:PTR BYTE,
ptrFreqTable:PTR BYTE
.data
targetStr BYTE "AAEBDCFBBC",0
freqTable DWORD 256 DUP(0)
.code
main PROC
INVOKE Get_freqs, ADDR targetStr, ADDR freqTable
mov ecx,LENGTHOF freqTable
mov edx,LENGTHOF freqTable
L1:
push edx
mov eax,edx
call writeInt
mov al,' '
call writeChar
mov eax,OFFSET freqTable
add eax,ecx
call writeInt
pop edx
dec edx
loop L1
exit
main ENDP
Get_freqs PROC,
ptrTarget:PTR BYTE,
ptrFreqTable:PTR BYTE
INVOKE Str_length,ptrTarget ; EAX = length source
mov ecx,eax
L1:
mov eax,ptrTarget[ecx]
add eax,ptrFreqTable
loop L1
ret
Get_freqs ENDP
END main
这是我遇到麻烦的部分。
L1:
mov eax,ptrTarget[ecx]
add ptrFreqTable[eax],1
loop L1