2011-01-23 2 views
2

문자열을 메모리에 저장하고 그 문자열에 액세스하고 소문자를 대문자로 변경하려고합니다. 내가 이해할 수없는 것은 해당 주소에서 문자열 및 ASCII 값의 주소를 참조하는 방법입니다. 나는 논리를 이해할 수 있다고 믿는다. 단지 데이터와 주소 조작에 문제가있다. 둘을 어떻게 구별합니까? 참고 : 이것은 숙제 코딩 과제입니다.문자열을 저장하고 ATmega168V에서 ASM 언어로 조작 (첫 번째 숙제)

+0

어셈블러의 어떤 언어입니까? 아마도 db를 사용해야 할 것입니다. – EnabrenTane

+0

AVR Studio를 사용하고 있습니다. – pisfire

+0

어떤 CPU (제품군)입니까? –

답변

0

힌트. 대문자와 소문자로 전환하려면 xor value,0x20으로 "32"비트를 뒤집습니다. 이 문자열을 액세스

SRC: DB  'Press A Key To Continue', 0; Our source string 
DST: DB  'Press A Key To Continue', 0; Where we will put our string. make sure its big enough so we don't over write our program. 
;load MSG+0 to working regist 
;flip the 32 bit 
;move the working register to DST + 0 
;load MSG+1 and repeat 
0

같을 것이다 Z80 어셈블러에

가 플래시 또는 RAM에 있는지에 따라 다릅니다 (I 문자열이 부팅 RAM으로 복사 할 수 있다고 생각하지만 난 ' 긍정적이지는 않다). 숙제 문제가 있다고 가정하면 RAM에있는 문자열에 직접 액세스 할 수 있습니다. @EnabrenTane이 지적한 것처럼 문자 바이트의 5 번째 비트를 뒤집어 대소 문자를 바꿀 수 있습니다 (ASCII 바이트 코드에 대해 자세히 알고 싶다면 Wikipedia ASCII page을 읽어보십시오). 당신이 C에서이 작업을 수행하기 위해 필요한 경우 그래서, :

char the_string[6] = "foobar" // assuming string is created like this 
int l = 6 * sizeof(char); // the length of the string 

for(int i=0; i<l; i++) { 
    char* c = the_string + i; // grab char[i] of the string 
    *char = *char^0x20; // flip the case 
} 

the_string에 저장된 값 위와 같이 생성 된 문자열에 대한

사실이다 (나는이 그렇게 오류가있을 수 있습니다 컴파일 시도하지 않은) 첫 번째 문자의 주소에 대한 포인터. 해당 문자열 내의 특정 문자를 찾으려면 주소에 추가하면됩니다. 문자열을 조작하려면 char* 포인터를 역 참조 할 필요가 있습니다.이 예에서는 원래의 값을 덮어 쓰면서 값을 같은 위치에 다시 저장합니다.