以下是函数中的一段代码:
while (true)
{
if (some_condition_here)
{
// ...
}
else
{
// ...
}
}
在调试和查看VS的反汇编窗口时,我看到以下程序集以及显示的相应源代码行:
while (true)
DF3E9E4C xor eax,eax
DF3E9E4E cmp eax,1
DF3E9E51 je DF3E9EBAh
{
if (some_condition_here)
DF3E9E53 ; condition
DF3E9E6E test eax,eax
DF3E9E70 je DF3E9EA3h
{
DF3E9E72 ; ...
DF3E9E9B ; last line, no jump
}
else
; jump to end of if-else block
DF3E9EA1 jmp DF3E9EB8h
{
DF3E9EA3 ; ...
}
}
; jump to start of while loop
DF3E9EB8 jmp DF3E9E4Ch
如果我们检查if
块的结尾和else
块的开头:
DF3E9E9B ; last line, no jump
}
else
; jump to end of if-else block
DF3E9EA1 jmp DF3E9EB8h
{
我们可以清楚地看到else
关键字比应该出现的位置早一行:
DF3E9E9B ; last line, no jump
}
; jump to end of if-else block
DF3E9EA1 jmp DF3E9EB8h
else
{
这是VS中的错误,还是存在这种不匹配的具体原因?也许我错过了至关重要的事情?