ARM 기본 프로그램 Hello

2364 단어
main 함수의 코드는 다음과 같습니다.
#include <stdio.h>

int main(int argc, char* argv[]){
	printf("Hello
"); return 0; }
기본 프로그램 코드는 다음과 같습니다.
1   EXPORT main
2   main
3   var_C= -0xC
4   var_8= -8
5   STMFD SP!, {r11, LR}
6   ADD   R11, SP, #4
7   SUB   SP, SP, #8
8   STR   R0, [R11,#var_8]
9   STR   R1, [R11,#var_c]
10   LDR   R3, =(aHelloArm - 0x8300)
11   ADD   R3, PC, R3         ; "Hello"
12   MOV   R0, R3             ; s
13   BL    puts
14   MOV   R3, #0
15   MOV   R0, R3
16   STB   SP, R11, #4
17   LDMFD SP!, {R11, PC}

정의:
ARM 어셈블리 명령으로 구성된 어셈블리 코드를 원본 프로그램의 어셈블러 코드라고 합니다.
역방향 원생 프로그램은 이러한 어셈블리 코드를 읽으며 원생 프로그램의 기능과 절차를 이해하는 것이다.
첫 번째 줄의 "EXPORT main"은 이main 함수식이 프로그램에서 내보낸 것을 나타낸다.
두 번째 줄의main은 함수의 이름입니다.(JDA Pro는 원본 프로그램의 모든 함수와 해당 이름을 자동으로 인식합니다.)
세 번째 줄은 IDA Pro가 식별하는 스택 변수입니다.IDA Pro는 함수에 할당된 스택 공간을 통해 스택 변수를 식별합니다.
이 인스턴스는 "SUB SP, SP, #8"행의 명령에 따라 수행됩니다.
여기서 SUB는 명령 조작 코드로 감법 조작을 나타내고 SP는 창고 명령 레지스터이다.
이 명령의 의미는 SP 레지스터의 값을 8에서 빼서 SP 레지스터에 다시 부여하는 것입니다.
퇴고에 8바이트의 공간을 분배하는 역할, 즉 퇴적 변수 varC와 var8의 공간.
5-17줄은main 함수 명령 부분이다.전체 코드는 8개의 지령과 관련이 있는데, 다음은 그것들의 기능을 간단하게 소개한다.
5행의 STMFD와 17행의 LDMFD는 스택 주소 지정 명령입니다.
STMFD 명령은 레지스터의 값을 창고에 눌러 넣는 데 사용됩니다.
이 실례는 원시 레지스터의 값을 보호하기 위해서입니다. (이 레지스터들은 아래에서 사용할 수 있기 때문에, 이 레지스터의 값은 사용하기 전에 저장하고 프로그램이 돌아올 때 복원해야 합니다.)
LDMFD 명령은 스택에서 레지스터의 값을 복원하는 데 사용되며 STMFD와는 정반대입니다.
6행의 ADD와 16행의 SUB는 산술 명령입니다.
ADD는 덧셈 명령으로'ADD R11, SP, #4'는 SP 레지스터의 값을 4를 더한 후 R11 레지스터에 부여하는 것이다.
SUB는 마이너스 명령으로, 16행의 코드 기능은 6행과 정반대다.
8-9행의 STR 및 10행의 LDR은 스토리지 액세스 명령입니다.
메모리란 메모리 주소를 가리키며 통상적으로 메모리 단원 또는 메모리 단원이라고도 부른다.
스토리지에 대한 액세스에는 스토리지에서 데이터를 읽고 쓰는 작업이 포함됩니다.
ARM 명령에서 스토리지는 중괄호 "[]"쌍으로 표시됩니다.
STR은 메모리 명령을 쓰는 것이고,
예를 들어 "STR R0, [R11, #var 8]"은 R0 레지스터의 값을 스택 변수 var 에 저장합니다.8 중,
9행의 STR R1, [R11, #var C]는 R1 레지스터의 값을 스택 변수 var 에 저장합니다.C중.
12번째 행의 MOV는 데이터 처리 명령입니다.
이것은 레지스터 간의 데이터 전송에 사용된다. 예를 들어 'MOV R0, R3' 은 R3 레지스터의 값을 R0 레지스터에 부여하는 것을 나타낸다.
13번째 행의 BL은 링크가 있는 점프 명령입니다.
다른 프로그래밍 언어에서 하위 프로그램 호출과 같은 기능을 완성합니다. 예를 들어 'BL puts' 는puts 함수를 호출하는 것입니다.
puts는 표준 입력 출력 함수에서 printf의 실현을 위해 표준 출력 장치에 지정한 내용을 출력하는 역할을 하고 이 실례에서 출력된 내용은'Hello'문자열이다.

좋은 웹페이지 즐겨찾기