为何MIPS汇编名称加密程序完成加密却未输出结果?
MIPS加密程序打印问题修复
你的代码加密逻辑没问题,但打印函数里有个明显错误导致加密结果无法正常输出:
在PrintEncryptedName函数中,你先通过la $a0,encryptedname把加密后字符串的地址加载到$a0,但紧接着用move $a0, $s1直接覆盖了这个值——而$s1根本没被赋值为加密字符串的地址,这就导致系统调用打印的是无效地址的内容,自然看不到正确结果。
修正后的打印函数需要去掉那行多余的move指令,直接保留加载好的加密字符串地址:
PrintEncryptedName: li $v0, 4 la $a0, encryptednamemsg syscall li $v0,4 la $a0,encryptedname # 保留加密字符串的地址在$a0中 syscall jr $ra
另外再提醒两个需要确认的细节:
- 确保
$s0已经正确读取了用户输入的偏移量(比如用syscall 5读入整数后存到$s0),这是加密逻辑的核心参数。 - 定义
name和encryptedname时要分配足够的内存空间,比如.space 8(因为名称长度小于8,加上字符串终止符),避免内存溢出破坏数据。
内容的提问来源于stack exchange,提问作者Mafoomin
相关产品推荐
相关产品推荐

