组装:跳跃混乱
Assembly: Jumping Confusion
我正在使用 Irvine32.inc 库,我的 L4
跳转有问题。
L1:
mov edx, offset optionPromptMsg
call WriteString
call ReadInt
mov ebx, 1
cmp eax, ebx
je L2 //if eax is 1, jump to l2, if eax is -1, jump l3
mov ebx, -1
cmp eax, ebx
je L3
mov ebx, -2
mov ecx, 2
cmp ebx, eax //if eax is less than -2 or more than 2 jump to L4
ja L4
cmp eax, ecx
ja L4
L2: call NextScore
L4: mov edx, offset optionErrorMsg
call WriteString
loop L1
L3 : call WriteScore
无论我如何格式化,出于某种原因,每次调用 L2: call NextScore
时,都会立即调用 L4
,但我不明白为什么。 NextScore
如下...
NextScore PROC USES esi
mov edx, offset scorePromptMsg
call WriteString
call ReadInt
mov ebx, 0
mov ecx, 100
cmp ebx, eax
ja L1
cmp eax,ecx
ja L1
jmp L2
L1:
mov edx, offset scoreErrorMsg
call WriteString
L2:
mov scores[esi*4], eax
inc esi
ret
NextScore ENDP
如您所见,NextScore
读入一个 0-100 的值,然后将这个值添加到数组 scores
中,但这次没有成功。出于某种原因,它只在整个数组中添加一个数字的重复项,但这是一个完全不同的问题。非常感谢任何想法或想法!
NextScore
末尾的 ret
正好返回到 L4
,因为每个 ret
都返回到匹配 call
停止的地方继续.也就是说,如果你想做其他事情,你需要在 L4
之前添加代码,在 NextScore
returns 时执行(例如 jmp
到你想去的任何地方而不是 L4
):
我正在使用 Irvine32.inc 库,我的 L4
跳转有问题。
L1:
mov edx, offset optionPromptMsg
call WriteString
call ReadInt
mov ebx, 1
cmp eax, ebx
je L2 //if eax is 1, jump to l2, if eax is -1, jump l3
mov ebx, -1
cmp eax, ebx
je L3
mov ebx, -2
mov ecx, 2
cmp ebx, eax //if eax is less than -2 or more than 2 jump to L4
ja L4
cmp eax, ecx
ja L4
L2: call NextScore
L4: mov edx, offset optionErrorMsg
call WriteString
loop L1
L3 : call WriteScore
无论我如何格式化,出于某种原因,每次调用 L2: call NextScore
时,都会立即调用 L4
,但我不明白为什么。 NextScore
如下...
NextScore PROC USES esi
mov edx, offset scorePromptMsg
call WriteString
call ReadInt
mov ebx, 0
mov ecx, 100
cmp ebx, eax
ja L1
cmp eax,ecx
ja L1
jmp L2
L1:
mov edx, offset scoreErrorMsg
call WriteString
L2:
mov scores[esi*4], eax
inc esi
ret
NextScore ENDP
如您所见,NextScore
读入一个 0-100 的值,然后将这个值添加到数组 scores
中,但这次没有成功。出于某种原因,它只在整个数组中添加一个数字的重复项,但这是一个完全不同的问题。非常感谢任何想法或想法!
NextScore
末尾的 ret
正好返回到 L4
,因为每个 ret
都返回到匹配 call
停止的地方继续.也就是说,如果你想做其他事情,你需要在 L4
之前添加代码,在 NextScore
returns 时执行(例如 jmp
到你想去的任何地方而不是 L4
):