강좌 & 팁
안녕하세요.
오늘도 역시 ARM 명령어에 대하여 공부해 보겠습니다.
본론으로 들어가기 전에 저번글에 문제에 대한 답을 알아보고 시작하겠습니다.
정답은 정말 간단합니다!
asm_cmn_ex() 함수의 인자값을 다음과 같이 넣어 주면 됩니다.
asm_cmn_ex( -3, 2 )
정말 쉽죠!?
자, 본론으로 들어갈까요?
CMP 명령어
CMP 명령어도 CMN 명령어와 같은 비교 명령어 입니다.
CMP 명령어는 양수값 비교 명령어라 불리어 집니다.
CMP 명령어는 어떤 방법으로 비교가 이루어지는지 확인해 보겠습니다 ^^
1. 프로그램
다음은 CMP 명령어를 사용한 cmp.c 예제 프로그램 입니다.
#include <stdio.h>
int asm_cmp_ex ( int x, int y );
void cmp_beq_ok ( void )
{
printf("CMP BEQ OK \n");
}
asm(" \n\
.global asm_cmp_ex \n\
asm_cmp_ex: \n\
cmp r0, r1 \n\
beq cmp_beq_ok\n\
mov pc, lr \n\
");
int main ( void )
{
int cmp;
printf("\n+-------------------+\n");
printf("|ARMInstruction CMP|\n");
printf("+-------------------+\n\n");
cmp = asm_cmp_ex( 2, 3);
결과를 예상해 보세요~^^
2. 프로그램 설명
핵심 소스는 다음과 같습니다.
cmp r0, r1
beq cmp_beq_ok
프로그램 순으로 설명해 보겠습니다 ^^
asm_cmp_ex()함수로 2, 3 을 넘겨줍니다.
asm_cmp_ex( 2, 3 );
어셈블리 코드에서 이 값을 받습니다.
다음과 같은 코드로 표현할 수 있습니다.
r0 = 2
r1 = 3
CMP 명령과 BEQ 명령을 통과하면 어떤 결과가 나올까요?
cmp_beq_ok 함수가 호출되는 것이 이번에도 문제 입니다!
어떻게 해야될지 여러분들도 생각해 보세요 ^^
3. 프로그램 실행화면
다음은 실행 화면입니다.
성공하셨나요~? ㅎㅎ
앞으로?
다음글에도 역시~ 비교 명령어 중 하나를 선택하여 공부해 보겠습니다.
빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~