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

字符串转小写子程序失效求助:输入大写输出仍为大写

问题分析与修复方案

你的代码核心问题出在subToLower子程序上——它没有把转换后的小写字符写回内存,subPrintString读取的还是原始输入的大写字符,所以输出始终是大写;同时循环逻辑也存在错误,没有正确读取字符和判断结束条件。

具体问题点

  1. 未读取原字符串中的字符,直接对索引值进行运算,逻辑完全错误
  2. 转换后的字符仅做了Output输出,没有写回内存,打印子程序仍读取原大写字符
  3. 没有判断字符是否为大写字母,会错误转换非大写字符
  4. 循环未判断字符串结束符(0),无法正常终止

修复后的subToLower子程序

////////////////////////////////////////////////////////////////////////
// Task 2.4 - Subroutine to convert to lower case                       
////////////////////////////////////////////////////////////////////////

subToLower,      HEX 000     / subroutine start
toLowerLoop,     Load StringAddress  // 加载字符串起始地址
                 Add stringIterate   // 加上偏移量得到当前字符地址
                 Store stringIndex   // 保存当前字符地址
                 LoadI stringIndex   // 读取当前地址的字符
                 Skipcond 800        // 遇到结束符0,退出循环
                 Jump endToLower     
                 // 判断是否为大写字母(0x41-0x5A)
                 LoadI stringIndex
                 Sub HEX 41
                 Skipcond 000        // 字符小于A,跳过转换
                 Jump nextChar
                 LoadI stringIndex
                 Sub HEX 5B          // 字符大于Z,跳过转换
                 Skipcond 000
                 Jump nextChar
                 // 转换为小写:大写字母加0x20
                 LoadI stringIndex
                 Add upperToLower
                 StoreI stringIndex  // 将小写字符写回内存
nextChar,        Load stringIterate
                 Add One3            // 偏移量+1,处理下一个字符
                 Store stringIterate
                 Jump toLowerLoop           
endToLower,      JumpI subToLower    // 返回主程序
            
One3,            DEC 1
upperToLower,    HEX 20
stringIndex,     HEX 0
stringIterate,   DEC 0

修复说明

  • 遍历字符串时,先读取当前地址的字符,判断是否为结束符0,是则终止循环
  • 仅对大写字母(0x41-0x5A)执行加0x20的转换操作
  • 转换后的字符写回原内存地址,确保subPrintString读取的是小写字符
  • 修正循环偏移量的更新逻辑,逐步遍历整个字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:30:59