2014-01-30 2 views
-3

문자열의 소문자를 대문자로 변환하는 toUpper 함수를 구현하십시오. 이 함수는 하나의 매개 변수를 사용합니다 : char * string. string은 문자열 시작 부분을 가리키는 char 유형 포인터입니다. 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

당신은, (경계 'A'로 AL 비교, 도달 끝 문자열이 있는지 확인이 변환해야하는지 여부를 결정하는 8 비트 레지스터 (MOV AL, [EBX])에 각 문자를로드해야합니다 .. 'z') 해당하는 경우 대문자를 [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를)에 의해 어느 변경 될 수있다.