SASM中运行NASM程序瞬间关闭问题(Windows 10)
解决SASM中NASM程序运行窗口瞬间关闭的问题
嗨,我明白你在SASM里写NASM汇编时遇到的窗口瞬间关闭的问题——这其实是个挺常见的小麻烦,原因很简单:你的程序执行完ret指令后就立刻退出了,操作系统会直接回收控制台窗口,根本没给你时间查看运行结果。下面给你几个实用的解决办法:
方法1:修改代码添加暂停逻辑
利用SASM自带的io64.inc库函数,在程序退出前添加等待用户输入的逻辑,这样窗口会保持到你按下任意键才关闭。修改后的代码如下:
%include "io64.inc" section .text global CMAIN CMAIN: mov eax,4 ; 你原有的业务代码 ; 添加暂停相关代码 PRINT_STRING exit_prompt ; 输出提示信息 GET_CHAR ; 等待用户按下任意键 xor rax, rax ret section .data exit_prompt db "按任意键退出...", 0xA, 0 ; 0xA是换行符
解释一下:
PRINT_STRING是io64.inc提供的字符串输出函数,用来提示用户操作GET_CHAR会暂停程序,直到用户输入一个字符,这样窗口就不会立刻关闭了
方法2:使用SASM内置的运行设置
如果你不想修改代码,也可以直接通过SASM的设置让程序结束后保持窗口打开:
- 打开SASM,点击顶部菜单栏的Options(选项)
- 选择Settings(设置),在弹出的窗口中找到Run(运行)相关选项
- 勾选Pause after execution(执行后暂停),保存设置即可
这样不管你的代码有没有暂停逻辑,程序运行结束后都会保持控制台窗口打开,直到你手动关闭它。
方法3:调用标准库函数暂停(进阶)
如果你不想依赖io64.inc,也可以直接调用C标准库的getchar函数,代码示例如下:
extern getchar ; 声明外部函数 section .text global CMAIN CMAIN: mov eax,4 ; 你原有的业务代码 call getchar ; 等待用户输入,暂停程序 xor rax, rax ret
不过这种方式需要确保SASM已经正确配置了C标准库的链接,通常默认是支持的。
内容的提问来源于stack exchange,提问作者Katido 622
相关产品推荐
相关产品推荐

