2014-01-30 233 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)來改變。

相關問題