X86 Assembly将小写转换为大写

时间:2014-01-30 19:31:36

标签: assembly x86

实现转换字符串中小写字母的toUpper函数 大写。该函数接受一个参数:char * string。字符串是一个 char类型指针,指向字符串的开头。因为C- 样式字符串以零结尾,我们不需要取长度 字符串作为另一个参数。

我需要帮助入门,我不知道我在做什么!!

void toUpper(char *string) {
__asm{
        PUSH EAX
        PUSH EBX
        PUSH ECX
        PUSH EDX
        PUSH ESI
        PUSH EDI

        MOV EBX, string
        /* Your code begins below this line. */


        /* Your code ends above this line. */
        POP EDI
        POP ESI
        POP EDX
        POP ECX
        POP EBX
        POP EAX
    }
}

1 个答案:

答案 0 :(得分:1)

您需要将每个字符加载到8位寄存器(MOV AL,[EBX]),检查是否到达字符串结尾,确定是否需要转换(将AL与边界'a'...'进行比较')并将相应的大写字母移回[EBX],如果是的话。然后递增EBX并循环回来。

ASCII code of uppercase letter 'A'..'Z'  is 0x41..0x5A
ASCII code of lowercase letter 'a'..'z'  is 0x61..0x7A

所以可以通过从小写字母减去0x20来改变大小写, 或者屏蔽掉第5位(AND AL,0xDF)。