无法获得循环运行

时间:2014-07-24 07:35:00

标签: loops assembly masm irvine32

我试图让我的频率表完全显示但是在尝试运行循环时 通过下一个标签,它给了我一个异常处理程序错误。我想知道如何让我的循环完全运行

我的代码:

INCLUDE Irvine32.inc

.data

target BYTE "AAEBDCFBBC", 0
freqTable DWORD 256 DUP(0)
introPrompt BYTE "Here are the indexes in hex and their counts in the array: ", 0ah,     
0dh, 0
prompt BYTE "Location ", 0
prompt2 BYTE " : ", 0
numcount DWORD 0
sLength DWORD ?
location DWORD ?
count DWORD 0
temp BYTE ?

.code
main PROC

mov edx, OFFSET target
call StrLength
mov sLength, eax

Get_frequencies PROTO, 
    pval1: DWORD,
    tableVal: DWORD
INVOKE Get_frequencies, ADDR target, ADDR freqTable

mov eax, numCount
call WriteDec
call crlf

mov edx, OFFSET introPrompt
call WriteString

;Writes the frequency table
mov esi, OFFSET freqTable
mov ecx, 256
top:
    mov edx, OFFSET prompt
    call WriteString

    mov eax, count
    call WriteHex

    mov edx, OFFSET prompt2
    call WriteString

    mov eax, [esi]
    call WriteDec

    call crlf
    add esi, 4
    inc count
    loop top

call WaitMsg
exit
main ENDP

Get_frequencies PROC USES edi esi,
pval1: DWORD,
tableVal: DWORD

mov edi, pval1      ;edi points to target array
mov esi, pval1      ;esi points to freqTable

mov edx, 0
mov eax, 0
mov numCount, 0
L1:
    mov al, [edi]
    mov dl, [esi]

    mov temp, dl
    cmp al, 0
    jne L2
    jmp next

L2:
    inc edi
    cmp al, dl
    jne L1
    inc numCount
    jmp L1

next:

    mov ecx, esi
    mov ecx, tableVal
    imul edx, 4
    add ecx, edx
    mov ebx, numCount
    mov [ecx], ebx

    cmp temp, 0
    je finish

    inc esi
    inc edi
    jmp L1

finish:
ret
Get_frequencies ENDP

END main

因此numCount全局变量包含重复字符的次数,并根据十六进制值将数字添加到频率表中。我尝试增加esi和edi再次从开始时的以下值开始,但它给我一个异常句柄错误。

非常感谢

0 个答案:

没有答案