강좌 & 팁
안녕하세요.
비가 내리는 기분좋은 오후 입니다 ^^
좋은 기분으로 니모닉 조건을 선택하여 공부해 보겠습니다!
VS( oVerflow )
VS의 의미는 오버플로우이며 Overflow 플래그가 세트(1)일 경우 입니다.
오버플러우가 발생하는 경우는 언제 일까요?
보통 ARM 산술 연산 명령어는 32 비트 정수값에 오버플로우가 발생하는 경우 이를 제대로 처리하지 못합니다.
예를들어 0x7FFFFFFF + 1 = -0x8000000 이 됩니다.
그러므로 산술 연산을 처리하는 프로그램을 작성 할때 32비트 정수에서 최대로 사용가능한 값을 초가하지 않도록 주의 해야겟지요~??ㅎㅎ
이 이론을 바탕으로 오버플러우가 발생하는 프로그램을 만들어 실행해 보겠습니다 ^^
1. 프로그램
다음은 vs 니모닉 조건을 이용한 vs.c 예제 프로그램입니다.
다음 프로그램은 정수의 최대값을 초과하였을때 bvs_test() 함수를 호출하는 프로그램입니다.
#include <stdio.h>
int asm_vs_ex ( void );
void bvs_test ( void )
{
printf("BVS TEST OK \n\n");
}
asm(" \n\
.global asm_vs_ex \n\
asm_vs_ex: \n\
mov r0, #0 \n\
mov r1, #0x70000000 \n\
mov r2, #0x7FFFFFFF \n\
adds r0, r1, r2 \n\
bvs bvs_test \n\
mov pc, lr \n\
");
int main ( void )
{
printf("\n+------------------+\n");
printf("|ARM Instruction VS|");
printf("\n+------------------+\n\n");
asm_vs_ex();
printf("Program END\n\n");
return 0;
}
결과를 예상해 보세요 ^^
2. 프로그램 설명
코드를 하나하나 보면서 어떤 프로그램인가 알아보겠습니다.
핵심소스는
mov r0, #0
mov r1, #0x70000000
mov r2, #0x7FFFFFFF
adds r0, r1, r2
bvs bvs_test
입니다.
mov r0, #0
mov r0, #0x70000000
mov r0, #0x7FFFFFFF
3. 프로그램 실행화면
다음은 실행 화면입니다.
여러분들도 실행시켜 보세요 ^^
앞으로?
다음글에도 니모닉 조건을 이용하여 프로그램해 보겠습니다 ^^