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

汇编程序无限循环问题排查求助

你的代码有两个关键问题导致无限循环:

  1. 错误使用RCX寄存器作为循环计数器
    x86_64 Linux下执行syscall时,会自动把当前指令地址存入RCX,覆盖你之前设置的计数器值。每次打印后,RCX的数值已经不是你预期的递减结果,循环逻辑彻底混乱。

  2. 循环判断逻辑完全颠倒
    你写的cmp rcx, 0 + jg konec,意思是「当RCX大于0时直接跳转到结束」,这和你想循环5次的逻辑完全相反。而且因为RCX被syscall破坏,后续即使RCX变成负数,也永远满足不了jg konec的跳转条件,直接陷入无限循环。


修正后的代码,把循环计数器换成不会被syscall修改的寄存器(比如RBX),同时修正判断逻辑:

.section .data
zprava: .asciz "opakuji smycku\n"

.section .text
.global _start
.intel_syntax noprefix

_start:
mov rbx, 5          ; 用RBX存循环次数,syscall不会修改这个寄存器
smycka:
cmp rbx, 0
jle konec           ; 当RBX<=0时退出循环
mov rax, 1
mov rdi, 1
lea rsi, [zprava]
mov rdx, 17
syscall
dec rbx             ; 计数器减1
jmp smycka

konec:
mov rax, 60
xor rdi, rdi
syscall

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:05:20