【发布时间】:2016-11-04 15:10:52
【问题描述】:
这可能是什么原因?我是汇编(asm)编程的新手,我对我的代码中发生的事情感到有点沮丧,因为我已经尝试了好几个小时。
.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 字符串 (
[esi] == 0 || [edx] == 0) 的末尾,您应该退出循环。目前,如果[esi] == 0 && [edx] == 0,您将退出。 -
我认为 jmp loopWord4 等于退出循环。 loopWord4 只是打印一个字符串,然后将其返回给调用语句
-
您到达
jmp loopWord4的唯一时间是如果both[esi] == 0和[edx] == 0在同一迭代中,即[esi] == 0 && [edx] == 0。那不是你想要的。您想在到达 either 字符串的末尾时立即退出循环。
标签: assembly masm masm32 irvine32