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

请求修改x86 16位汇编ASCBIN2函数:ASCII数组转二进制并求和

问题解决:ASCII转二进制并求和的汇编函数修改

核心问题分析

原代码的ASCBIN和ASCBIN2存在以下问题:

  • 缺少外层循环处理5个数字,仅执行一次转换
  • 硬编码CX=2,只能处理固定2位数字,无法适配1-3位的输入
  • 未将转换后的二进制数累加到SUMA,无法完成求和需求

修改后的完整函数代码

替换原有的ASCBIN和ASCBIN2函数为以下代码:

ASCBIN:
        MOV  CX, 5                  ; 循环处理5个数字
        LEA  SI, VECTOR             ; SI指向当前数字的起始地址
ASCBIN_LOOP:
        PUSH CX                     ; 保存外层循环计数器
        MOV  CX, 3                  ; 每个数字占3字节空间
        MOV  WORD PTR [NUMAR], 0    ; 清零当前数字的二进制存储变量
ASCBIN2:
        MOV  AL, [SI]
        CMP  AL, 20H                ; 判断当前字节是否为空格(无效位)
        JE   SKIP_DIGIT             ; 是空格则跳过,不处理
        ; 计算 NUMAR = NUMAR * 10 + 当前数字的二进制值
        MOV  AX, [NUMAR]
        MOV  BX, 10
        MUL  BX                     ; AX = 现有值 *10
        MOV  DL, AL
        AND  DL, 0FH                ; ASCII转二进制(取低4位)
        MOV  DH, 0
        ADD  AX, DX                 ; 加上当前数字
        MOV  [NUMAR], AX
SKIP_DIGIT:
        INC  SI                     ; 移动到下一个字节
        LOOP ASCBIN2                ; 处理完当前数字的3个字节
        ; 将转换后的数字累加到总和SUMA
        MOV  AX, [NUMAR]
        ADD  [SUMA], AX
        POP  CX                     ; 恢复外层循环计数器
        LOOP ASCBIN_LOOP            ; 处理下一个数字
        RET

关键修改说明

  • 多数字循环处理:通过外层ASCBIN_LOOP循环5次,逐个处理VECTOR中的5个数字
  • 自动适配位数:遍历每个数字的3个字节,遇到空格(20H)直接跳过,仅处理有效ASCII数字,适配1-3位的输入
  • 求和逻辑补充:每个数字转换完成后,将NUMAR的值累加到SUMA,完成求和需求
  • 变量初始化:每次处理新数字前清零NUMAR,避免上一次转换的残留值影响结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:52