toMpper / toLower in mips

时间:2013-10-07 01:27:42

标签: assembly character mips

我需要使用mips编写一个程序,该mips将接受一个字符串并将所有大写字母切换为小写字母,将小写字母切换为大写字母。我的直觉是使用字母数值来编写if语句,但我想知道是否有更好的方法来解决这个问题。

1 个答案:

答案 0 :(得分:0)

是的,肯定有更好的方法可以做到这一点!相应的大写和小写字母字符的ASCII值完全不同0x20。例如,'A' = 0x41'a' = 0x61。基本上,第六位设置为小写字符,并清除为大写。

最简单的实现使用了一个抨击技巧 - 如果你能识别一个字符是一个字母,你可以使用以下方法来取消它:

ch &= ~0x20;

或者用以下内容将其缩小:

ch |= 0x20;

请记住,这不适用于字母ASCII字符以外的任何内容。您可以检查某个字符是否与(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')

之类的字符匹配

另一种完全避免if的方法是构建一个256条目表,该表由每个字符的预期输出组成,并为每个字符索引。它可能略微更高效,具体取决于您的处理器,但代价是写出(或生成)更烦人。