字符串转小写子程序失效求助:输入大写输出仍为大写
问题分析与修复方案
你的代码核心问题出在subToLower子程序上——它没有把转换后的小写字符写回内存,subPrintString读取的还是原始输入的大写字符,所以输出始终是大写;同时循环逻辑也存在错误,没有正确读取字符和判断结束条件。
具体问题点
- 未读取原字符串中的字符,直接对索引值进行运算,逻辑完全错误
- 转换后的字符仅做了
Output输出,没有写回内存,打印子程序仍读取原大写字符 - 没有判断字符是否为大写字母,会错误转换非大写字符
- 循环未判断字符串结束符(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
相关产品推荐
相关产品推荐

