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

MASM汇编代码中查找字符串子串的更优实现方法?

汇编子串匹配代码无栈操作优化方案

你原代码中PUSH/POP操作的作用是备份CX、SI、DI三个寄存器的值,避免被REPE CMPSB指令修改。要去掉栈操作可以直接替换隐式修改寄存器的串比较指令,改用手动内层循环完成匹配校验,全程用寄存器暂存中间值即可,不需要栈参与。

优化后的完整代码

comparing proc
    MOV CX, SIZEOF vec2 ; 子串总长度
    DEC CX
    MOV DX, SIZEOF vec1 ; 主串总长度
    LEA SI, vec1        ; 主串当前指针
    LEA DI, vec2        ; 子串起始指针

FIND_FIRST:
    ; 主串剩余长度不足匹配子串,直接返回未找到
    CMP DX, CX
    JB N_FINDED
    ; 匹配子串首字符
    MOV AL, [SI]
    MOV AH, [DI]
    CMP AL, AH
    JNE NEXT

    ; 内层循环校验完整子串,无栈操作
    MOV BX, 1
FITTING_LOOP:
    CMP BX, CX
    JA FINDED
    MOV AL, [SI + BX]
    MOV AH, [DI + BX]
    CMP AL, AH
    JNE NEXT
    INC BX
    JMP FITTING_LOOP

NEXT:
    INC SI
    DEC DX
    JMP FIND_FIRST

FINDED:
    MOV AL, 01H
    JMP RETURN

N_FINDED:
    MOV AL, 00H

RETURN:
    ret
comparing endp

改动说明

  • 完全移除了所有栈操作:内层匹配使用基址+偏移的方式访问主串和子串,不会修改外层循环依赖的SI、DI、CX寄存器值,不需要额外备份
  • 新增剩余长度校验逻辑:进入子串全匹配前先判断主串剩余长度是否足够,避免无效比较和内存越界问题
  • 精简了跳转分支:去掉了原代码中冗余的对等跳转,执行效率更高

内容的提问来源于stack exchange,提问作者Brando Muñoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:24:02