Assembly 反汇编代码中两个零值的比较-不必要?

Assembly 反汇编代码中两个零值的比较-不必要?,assembly,x86-64,disassembly,Assembly,X86 64,Disassembly,已反汇编x86-64可执行文件后,反汇编程序将显示部分可执行文件的以下说明 xor r14d, r14d ; zero r14d xor ecx, ecx ; zero ecx mov qword [ss:rbp+var_40], rcx ; move rcx (now zeroed) into var_40 ; … additional code that doesn't make any ch

已反汇编x86-64可执行文件后,反汇编程序将显示部分可执行文件的以下说明

xor r14d, r14d                      ; zero r14d
xor ecx, ecx                        ; zero ecx
mov qword [ss:rbp+var_40], rcx      ; move rcx (now zeroed) into var_40

; … additional code that doesn't make any changes to var_40 or r14d …

mov esi, r14d                       ; move r14d into esi
mov rcx, qword [ss:rbp+var_40]      ; move var_40 back into rcx
cmp rsi, rcx                        ; compare rsi and rcx, both zero?

似乎正在比较
rsi
rcx
,尽管可以保证它们都为零。然后,代码在比较之后分支。我的想法正确吗?如果正确,为什么会发生这种情况?

您确定rcx的上32b为零吗?可能是为了强制使用一些标志?可能代码稍后会循环,此时值可能已经更改。@Jester这是一个很好的建议,现在就开始研究。谢谢@风向标这意味着顶部也是零,或者你忘记了隐式的零扩展了吗?你确定rcx的上32b是零吗?也许是为了强制一些标志?也许代码稍后会循环,到那时值可能已经改变了。@Jester一个很好的建议,现在开始研究这个问题。谢谢@风向标,这意味着顶部也是零,还是你忘记了隐式的零延伸?