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

x86汇编实现RLE编码统计数组元素时CMP跳转异常求助

x86汇编RLE编码异常问题解决方案

核心故障原因

你触发错误跳转的根因是跳转指令类型和操作数的符号属性不匹配:

  • JG 是有符号数的「大于则跳转」指令,判断逻辑依赖符号标志SF和溢出标志OF
  • 你把BL当作无符号8位整数使用,255对应的8位补码是0xFF,在有符号数体系下值为-1
  • 当BL值为2时,有符号比较逻辑会判定2 > -1成立,因此直接触发跳转到AdjustValue分支

修复方案

把RegisterOccurrence段里的JG AdjustValue替换为无符号数大于跳转指令JA AdjustValue即可,JA基于进位标志CF和零标志ZF判断,完全符合无符号数的比较逻辑。

其他潜在Bug修复建议

  • 移除Loop段中的死代码:你在CMP DL,CL后已经写了JE Occurrence和JNE SingleNumber,所有分支都会跳转走,后面的INC ESI永远不会执行,可以直接删除。
  • 补充边界越界检查:你读取[Buffer+ESI+1]的时候没有判断ESI+1是否超过数组长度Len,可能触发非法内存访问。
  • 校验单次计数逻辑:当前SingleNumber分支默认计数为1,但如果之前已经在Occurrence分支累计过BL的值,会直接丢失已统计的次数,建议梳理连续相同元素的计数全流程逻辑。

问题代码标注

__asm
{
    XOR EAX, EAX
    XOR EBX, EBX
    XOR ECX, ECX
    XOR EDX, EDX
    XOR EDI, EDI
    XOR ESI, ESI

    MOV EAX, Len                     

Loop:
           CMP ESI,EAX
           JE EndProgram
           MOV DL,[Buffer+ESI]
           MOV CL,[Buffer+ESI+1]
           CMP DL,CL
           JE Occurrence
           JNE SingleNumber
           INC ESI          ; 死代码,永远不会执行
           JMP Loop

SingleNumber:
           MOV BufComp[EDI],1
           MOV BufComp[EDI+1],DL
           INC ESI
           ADD EDI,2
           JMP Loop

Occurrence:
           INC BL
           INC ESI
           MOV DL, [Buffer + ESI]
           MOV CL, [Buffer + ESI + 1]
           CMP DL,CL
           JNE RegisterOccurrence
           JMP Loop

RegisterOccurrence:
           INC BL
           CMP BL,255
           JG AdjustValue   ; 问题点:有符号跳转指令不匹配无符号数比较场景
           MOV BufComp[EDI],BL
           MOV BufComp[EDI+1],DL
           INC ESI
           ADD EDI,2
           XOR EBX,EBX
           JMP Loop

AdjustValue:
           SUB BL,255
           MOV BufComp[EDI],255
           MOV BufComp[EDI+1],DL
           ADD EDI,2
           MOV BufComp[EDI],BL
           MOV BufComp[EDI+1],DL
           INC ESI
           ADD EDI,2
           XOR EBX,EBX
           JMP Loop

EndProgram:
           MOV BufComp[EDI],0d
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 11:06:07