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

x86汇编中列表索引删除失效求助:无法删除指定姓名

x86汇编姓名管理程序删除功能排查方案
  • 核对索引定位是否准确
    先确认待删除姓名的内存偏移计算逻辑。假设每个姓名是5字节+终止符(比如0x00),索引从1开始的话,正确偏移应该是 (输入索引-1)*(5+1)。如果没考虑终止符或者索引起始值搞错,会定位到错误内存区域,后续移动操作等于白做。可以用GDB调试,查看目标地址的内容是否匹配要删除的姓名。

  • 检查内存移动指令的正确性
    左移后续姓名时,注意这几点:

    1. 移动的字节数要算对:总共有N个姓名,删第i个的话,需要移动 (N - i)*6 字节(按5字符+终止符算);
    2. 方向标志位DF要设对:用CLD设置正向移动,否则REP MOVSB会反向覆盖数据;
    3. 移动完成后,要把最后一个姓名的位置清空(比如填0),不然lista遍历的时候还会读到旧数据。
      示例移动代码:
    mov esi, offset nume + (i*6)  ; 指向待删除元素的下一个
    mov edi, offset nume + ((i-1)*6)  ; 指向待删除元素位置
    mov ecx, (total - i)*6       ; 要移动的字节数
    cld
    rep movsb
    ; 清空最后一个位置
    mov edi, offset nume + ((total-1)*6)
    mov ecx, 6
    mov al, 0
    rep stosb
    
  • 确认总计数是否更新
    删除后必须把存储总姓名数的变量(比如total_nume)减1。如果没更新这个变量,lista功能还是会遍历原来的数量,看起来就像没删除一样。

  • 校验输入索引的合法性
    要判断用户输入的索引是否在1到当前总姓名数之间。如果输入了超出范围的索引,整个删除逻辑根本不会执行,自然看不到变化。可以加个判断分支,比如索引无效就直接提示并返回。

如果能贴出sterge功能的具体代码片段,能更快定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:30:49