8085汇编代码修改求助:模拟器无法识别'A'这类字符常量
8085汇编:解决模拟器不识别单引号字符常量的问题
你的8085汇编模拟器不支持单引号包裹的字符常量(比如cpi 'A'),这是不少老旧8085模拟器的常见限制。解决方法很直接:用字符对应的ASCII十六进制值替代字符常量即可,以下是修改后的完整代码和对应说明:
修改说明
所有字符常量替换为对应ASCII十六进制值:
'A'→0x41(十进制65)'Z'+1→0x5B('Z'是0x5A,加1后为0x5B)'a'-'A'→0x20(大小写ASCII码固定差值为32,十六进制为0x20)
修改后的代码
lowercase: mov b, a ; 把文本长度N存入寄存器B mov c, h ; 把HL的高字节存入寄存器C mov d, l ; 把HL的低字节存入寄存器D lowercaseloop: ldax d ; 将HL指向的内存地址中的字符加载到累加器A cpi 0x41; 累加器中的字符与大写'A'(ASCII 0x41)比较 jc lowercaseskip ; 如果字符小于'A',跳转到下一个字符 cpi 0x5B ; 累加器中的字符与'Z'+1(ASCII 0x5B)比较 jnc lowercaseskip ; 如果字符大于等于'Z'+1,跳转到下一个字符 add a, 0x20 ; 将大写字符转换为小写(加上大小写差值0x20) stax d ; 将累加器中的字符存回HL指向的内存地址 lowercaseskip: inx h ; 递增HL的高字节 inx d ; 递增HL的低字节 dec b ; 递减计数器B jnz lowercaseloop ; 直到B变为0前重复循环 ret ; 返回调用方
如果你的模拟器偏好十进制值,也可以替换为对应的十进制数:
'A'→ 65'Z'+1→ 91'a'-'A'→ 32
内容的提问来源于stack exchange,提问作者Karina Levis
相关产品推荐
相关产品推荐

