2014-01-30 185 views
-3

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

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

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 
    } 
} 

回答

0

您需要加载每个字符到8位寄存器(MOV AL,[EBX]),检查是否结束串到达,决定它是否需要被转换(与边界“A”比较AL ..'z'),如果是,则将相应的大写字母移回[EBX]。然后增加EBX并回送。

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

这样的情况下可以通过减去0x20的从小写字母, 或通过屏蔽关闭第五位(和Al 0xDF)来改变。

相关问题