AVR ATmega 162 책에 나와있는 예제입니다.
주석이 달아져있어서 이 어셈들이 어떤식으로 작동하는지는 알겠습니다.
그런데 최상위 비트나 최하위 비트가 어떻게 저런 순서로 저장되는지 모르겠습니다.
R26,27,30,31
y+1, y+2, y+3, y+4
등 이 어셈블러가 왜 이런식으로 a,b,c 가 저장되어서 연산되는지에 대해서
가르침을 주시면 +_+...고맙겠습니다..^^ 명령어는 검색해서 찾아봤는데
어떤 순서에 의해 a,b,c가 각각 들어가게 되는지.............궁금하네요...
// 어셈블러로 선언된 함수, 이 함수는 a+b+c한 값을 반환한다.
#pragma warn- // 경고 메시지를 금지시킴
int sum_abc(int a, int b, unsigned char c) {
#asm
ldd r30,y+3 ;R30=LSB a
ldd r31,y+4 ;R31=MSB a
ldd r26,y+1 ;R26=LSB b
ldd r27,y+2 ;R27=MSB b
add r30,r26 ;(R31,R30)=a+b
adc r31,r27
ld r26,y ;R26=c
clr r27 ;promote unsigned char c to int
add r30,r26 ;(R31,R30)=(R31,R30)+c
adc r31,r27
#endasm
}
#pragma warn+ // 경고 메시지를 허가함
void main(void) {
int r;
// now we call the function and store the result in r
r=sum_abc(2,4,6);
}
특히 big endian 방식인지 little endian 방식인지를 먼저 알아야겠지요..
스스로 공부해봄이 가장 빠를듯합니다. 어셈은 말로 설명하기가 더 힘드네요..
특히 메모리 엑세스같은 경우는 직접 방법이냐 간접방법이냐부터 이해를 하셔야 하고요^^;