You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86-64汇编逆序打印数字出错:输入123却无限打印1

问题分析

你的代码无限打印1的核心原因是循环条件判断错误:

  • 你当前用cmp ah,0 + ja afisnr判断是否继续循环,ah是除法后的余数。当处理到数字1时,余数是1,此时会触发跳转继续循环;但此时商已经是0,存入n后n变为0。
  • 正确逻辑应该是判断商是否不为0——商代表尚未处理的高位部分,当商为0时说明所有位处理完毕,无需继续循环。
修复后的代码
global main
section .data
n db 123
c db '5'

section .text

afisc:
mov rax,1
mov rdi,1
mov rsi,c
mov rdx,1
syscall
ret

afisnr:
mov al,[n]
mov ah,0
mov r8b,10
div r8b
add ah,'0'
mov [c],ah
call afisc
mov[n],al
cmp al,0   ; 改为判断商是否不为0
jne afisnr ; 商不为0则继续循环
ret

main:
xor rax,rax
call afisnr

mov rax,60
mov rdi,0
syscall
修复说明
  • 将循环判断从cmp ah,0 + ja afisnr改为cmp al,0 + jne afisnr:
    • al是除法后的商,代表剩余未处理的高位数字。当商不为0时,说明还有高位需要处理,继续循环;当商为0时,所有位处理完成,退出循环。
  • 处理数字123时,会依次打印余数3、2、1,然后商变为0,退出循环,最终输出321,符合预期。

内容的提问来源于stack exchange,提问作者so_17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:03:15