使用NASM实现十进制数打印遇问题:无内容输出
问题分析与修复
你的NASM代码没有输出的核心原因是:程序入口_start中仅将数值22存入eax,但从未调用printDecimal打印子程序,程序会直接跳过打印逻辑,走到后续的printBinary空块和不完整的退出逻辑。
另外还有一个次要问题:退出逻辑exit中只设置了系统调用号eax=1(对应exit调用),但缺少触发系统调用的int 80h指令,会导致程序退出不规范。
修正后的代码
section .text global _start _start: mov eax,22 call printDecimal ; 调用打印十进制数的子程序 printDecimal: push eax printDecimalSub: mov edx,0 mov ecx,10 div ecx push eax mov eax,4 mov ebx,1 mov ecx,edx add ecx,48 mov edx,1 int 80h pop eax cmp eax,0 jne printDecimalSub printBinary: exit: mov eax,1 int 80h ; 触发exit系统调用,正常退出程序
关键修改点
- 在
_start的mov eax,22后添加call printDecimal,让程序执行打印逻辑。 - 在
exit块的mov eax,1后添加int 80h,正确触发Linux系统调用完成程序退出。
内容的提问来源于stack exchange,提问作者suiciyom
相关产品推荐
相关产品推荐

