티스토리 뷰

C언어

레지스터 뱅크 알아보기[2]

시작이반입니다 2021. 7. 29. 10:00

레지스터 뱅크 알아보기[2]

이전에는 어셈을 사용하여 레지스터 뱅크에 대해서 알아 보았습니다. 이번 강좌에서는 C 언어에서 레지스터 뱅크를 선택하는 방법과 사용하는 뱅크에 따라 변수와 포인터(R0, R1)가 어떻게 동작하는지를 알아보겠습니다. 아래 프로그램 소스는 "[강좌 7] C 언어로 내부 데이터 메모리 살펴보기"의 소스와 동일합니다. main() 함수 선언 부분에 using 2 라는 레지스터 뱅크 선택 명령이 추가 되었습니다. 8051 C 언어에서는 프로그래머가 직집 범용 레지스터(R0-R7)를 사용하지 않습니다. 다만 함수에서 사용하는 레지스터 뱅크를 결정해 줄 수 있을 뿐입니다. 레지스터 뱅크를 선택하는 명령이 using 입니다. using 뒤에 0 부터 3 까지 숫자를 붙여서 사용하는 레지스터 뱅크를 결정합니다. 아래 프로그램을 스텝동작으로 실행하고 변수의 위치와 포인터(R0) 의 위치를 살펴보겠습니다. #include #define IDATA ((char *)0x10000) void delay(long int dly) { while(dly--); } void disp(char ch) { P1 = ch; delay(10000); } void main() using 2 // -- 1 { char r0; char acc; r0 = 0x30; acc = 0x3a; IDATA[r0] = acc; // -- 2 disp(~IDATA[r0]); r0++; acc += 2; IDATA[r0] = acc; disp(~IDATA[r0]); ...(이하 생략) } 위 그림을 보면 변수 r0 와 acc 는 08h 와 09h 번지에 각각 30h 와 3ah 의 값을 갖고 있습니다. 파란줄 위의(-- 2) 명령인 IDATA[r0]=acc; 는 현재 acc 의 값을 r0 가 가리키는 번지(=30h) 에 넣으라는 뜻인데, 이 r0 의 값이 내부 데이터 메모리 00h 가 아닌 10h 에 30h 값이 들어 간 것을 볼 수 있습니다. using 명령이 없을 때는 뱅크 0 이 디폴트로 선택이 되어 00h 번지에 값이 들어가지만([강좌7]에서), main() 함수 선언시 using 2 라는 명령이 추가 되어 뱅크 2 가 사용되고 있음을 알 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함