강좌 & 팁
안녕하세요.
시험기간이라 정신이 하나도 없는 날이네요 ㅠㅠ
하지만! 오늘도 ARM 명령어 하나를 선택하여 공부해 보겠습니다.
adc 명령어
ADC 명령어는 두 32비트 값과 캐리의 덧셈 기능을 하는 명령어 입니다.
어? 32 비트의 덧셈?
많이 보셨죠?
맞습니다!
ADD 명령어도 32비트 덧셈을 하는 명령어 입니다.
기억이 안나시는 분을 위해 링크~> (ARM 명령어를 배워보자!(4) - add)
ADC명령어와 ADD명령어의 차이점은 더할때 CPSR레지스터의 C 플래그를 더해준다는 점!
CPSR의 상세한 내용을 나중에 공부하기로하고, 일단, CPSR 레지스터에 C 플래그가 있구나~
라고만 알고 넘어가도록 ㅎ
ADC명령중 C는 C 플래그를 의미하는거 같죠?
ADC 명령어를 사용하여 프로그램하여 정확히 어떻게 동작하는지 알아보겠습니다.
1. 프로그램
다음 프로그램은 ADC 명령어를 이용하여 리턴되는 값을 출력하는 프로그램입니다.
다음은 adc 명령어를 이용한 adc.c 예제 프로그램입니다.
#include <stdio.h>
int asm_adc_ex( int x, int y );
asm(" \n\
.global asm_adc_ex \n\
asm_adc_ex: \n\
adc r0, r0, r1 \n\
mov pc, lr \n\
");
int main ( void )
{
int adc;
printf("\n+------------------+\n");
printf("|ARMInstruction ADC|\n");
printf("+-------------------+\n\n");
adc = asm_adc_ex( 0x00000001, 0x00000001 );
printf("adc = 0x%08X\n\n", adc );
printf("Program END\n\n");
return 0;
}
결과를 예상해 보세요~
2. 프로그램 설명
프로그램의 핵심코드는 다음과 같습니다.
adc r0, r0, r1
위 코드는 다음과 같은 코드로 표현할 수 있습니다.
r0 = r0 + r1
r0 안에 값은 0x00000002 가 되겠죠?
컴파일 해서 실행해 보겠습니다.
3. 프로그램 실행화면
다음은 프로그램 실행 화면 입니다.
헉!?
예상한 결과가 나오지 않았습니다 ㅠ
왜 이런 값이 나왔을까요?
모두 한번 생각해 보아요!
앞으로?
다음 글에는 위와 같은 값이 나온 이유에 대하여 공부해 보겠습니다 ^^