C 와 어 셈 블 리 혼합 프로 그래 밍 의 실현 예시
우선,c 와 어 셈 블 리 의 공동 사용 은 세 가지 상황 에 대해 다음 과 같다 는 것 을 알 고 있 습 니 다.
1.C 언어 내 연 어 셈 블 리
일단 코드 를 볼 게 요.
__inline int ADD(int input1,int intput2)
{
int output;
__asm{
ADD output,input1,intput2
}
return output;
}
int Number(void);
int value;
int main(void)
{
int a = 12,b = 13;
while(1)
{
value = ADD(a,b);
}
}
실행 효과0x 19 의 십 진법 은 25 이다.
2.C 언어 호출 어 셈 블 리 함수
어 셈 블 리 함 수 를 호출 하여 먼저
.s
어 셈 블 리 파일 을 만 듭 니 다.생 성 완료 후 어 셈 블 리 파일 에 어 셈 블 리 함 수 를 기록 합 니 다.
AREA |.text|,CODE,READONLY
EXPORT Get_Number
Get_Number
MOV R0,#761
BX LR
ALIGN
END
그리고main
함 수 를 써 서 호출 합 니 다.
int Get_Number(void);
int value;
int main(void)
{
while(1)
{
value = Get_Number();
}
}
실행 효과 보기3.어 셈 블 리 코드 호출 C 언어 함수
어 셈 블 리 파일 에 다음 코드 를 입력 하 십시오.
AREA |.text|,CODE,READONLY
IMPORT Get_Number
IMPORT Number
EXPORT __main
ENTRY
__main
LDR R1,=Number
MOV R0,#100
STR R0,[R1]
BL Get_Number
END
C 파일 에 다음 코드 를 입력 하 십시오.
int Number;
int Get_Number(void)
{
Number = Number + 32;
return Number;
}
실행 효과 한번 볼 게 요.계속 아래로 실행
숫자 가 100 에서 132 로 바 뀌 기;기능 을 실현 하 다
설명:
/*
AREA
:
AREA 1 , 2 ,……
AREA 。 , , “|” , :|1_test| 。
( ) , 。 :
― CODE : , READONLY 。
― DATA : , READWRITE 。
― READONLY : , READONLY 。
― READWRITE : , READWRITE 。
― ALIGN : ALIGN 。 ,ELF( ) , 0~31, 2 。
― COMMON : , 。 COMMON 。
*/
/*
MOV
LDR
BX
、 、
BL
LR r14
(1) bl blx ,r14 ,
(2) , R14
ENTRY 。 ENTRY, 。
, 。 ENTRY。
ENDP PROC . (end procedure)
ENDS SEGMENT . (end segment)
END .
*/
사용BL
점프BL 명령 은 PC 레지스터 의 값 을 LR 레지스터 에 저장 하 는 동시에 되 돌아 오 는 점프 명령 입 니 다.
그래서.
어 셈 블 리 프로그램 에서 C 언어 함수 두 개 를 호출 할 것 이 라 고 가정 합 니 다.
사실 로 증명 하면 돌아 올 수 있다.
어 셈 블 리 코드 를 다음 과 같이 수정 합 니 다.
AREA |.text|,CODE,READONLY
IMPORT Get_Number
IMPORT Number
IMPORT Get_Value
IMPORT Value
EXPORT __main
ENTRY
__main
LDR R1,=Number
MOV R0,#100
STR R0,[R1]
BL Get_Number
LDR R1,=Value
MOV R0,#100
STR R0,[R1]
BL Get_Value
END
대응 하 는 c 파일 은
int Number;
int Get_Number(void)
{
Number = Number + 32;
return Number;
}
int Value;
int Get_Value(void)
{
Value = Value - 32;
return Value;
}
코드 실행 상황 보기먼저 첫 번 째 함수 의 집행 을 진행 하여 숫자 가 바 뀌 었 다.
다음은 두 번 째 함수 가 실 행 됩 니 다.숫자 가 바 뀌 었 습 니 다.
BL 점프 가 되 돌아 갈 수 있 음 을 증명 합 니 다.
어 셈 블 리 와 C 언어의 프로 그래 밍 사고방식 을 사용 하여 약간의 제한 을 깨 뜨 릴 수 있다
뒤에서 하 는
PC
점프 에 도 기 초 를 다 졌 다.C 와 어 셈 블 리 혼합 프로 그래 밍 의 실현 예시 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C 와 어 셈 블 리 혼합 프로 그래 밍 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.