x64环境下汇编代码在VS2019中运行未返回0是什么问题
代码运行不返回0的核心原因
- VS的C运行时(CRT)调用
main函数时,遵循标准的x86/x64调用约定:32位程序的返回值需要存储在32位EAX寄存器中,64位程序的返回值需要存储在64位RAX寄存器中,程序最终的退出码就是main的返回值。你提供的代码仅修改了EAX/RAX的低8位AL寄存器,寄存器剩余的高位保留了运行前的随机脏数据,最终整个EAX/RAX的数值是不可预期的,自然不会返回0。 - 代码中注释掉了
.486、.model flat,stdcall等必要的伪指令,会导致MASM默认按照16位模式汇编,完全不符合VS下32/64位Windows程序的运行要求,进一步加重了执行上下文的异常。 - 若要得到预期的返回值,只需要修改操作的寄存器为全宽即可:要返回0就把
mov al,0改为mov eax,0;要返回加法得到的5,就把两条赋值加法指令改为mov eax,5即可。
内容的提问来源于stack exchange,提问作者João Afonso
相关产品推荐
相关产品推荐

