0
這可能是什麼原因造成的?我是彙編(asm)編程的新手,我對我的代碼中發生的事情感到沮喪,因爲我一直試圖弄清它幾個小時。Project.exe中0x00406A09引發的異常:0xC0000005:執行地址0x00406A09的訪問衝突
.data
stringInput BYTE 21 dup (0)
wrongInput BYTE "That is incorrect", 0
correctInput BYTE "That is correct you win", 0
inputSize = 20
.code
push EDX
mov EDX, OFFSET stringInput
mov ECX, inputSize
call readString
loopWord:
mov AL, [ESI]
mov BL, [EDX]
cmp AL, 0
jne loopWord2
cmp BL, 0
jne loopWord2
jmp loopWord4
loopWord2:
inc ESI ;point to the next
inc EDX ;point to next element
cmp AL, BL ;is the letter equals?
je loopWord ;IF EQUAL loop again
jne loopWord3 ;not equal go out
pop EDX
loopWord3:
mov EDX, OFFSET wrongInput
jmp WordFinish
loopWord4:
mov EDX, OFFSET correctInput
jmp WordFinish
WordFinish:
call WriteString
RET ;the exception is thrown here
WordMatching ENDP
我很確定代碼工作正常,直到返回部分。 PS:我還有其他的代碼,其中將調用wordMatching PROC。
如果已達到_either_ string('[esi] == 0 || [edx] == 0')的末尾,則應該退出循環。如果'[esi] == 0 && [edx] == 0',你當前會退出。 – Michael
我認爲jmp loopWord4等於退出循環。 loopWord4只是打印一個字符串,然後將其返回給調用語句 – Beginnerstudent
只有在同一次迭代中,如果_both_'[esi] == 0'和'[edx] == 0'到達'jmp loopWord4', '[esi] == 0 && [edx] == 0'。這不是你想要的。只要您到達_either_字符串的末尾,就要退出循環。 – Michael