어셈블리어
어셈블리어란
CPU가 이해할 수 있는 가장 간단한 기계어
속도가 빠르고 고급 언어에서의 작업을 직접 표현
CPU 레지스터와 메모리에 직접 명령을 내려서 연산과 제어를 수행하는 언어라네요..
어셈블리어 기초 문법 구조와 명령어
ex) mov rax, rbx ; rbx 값을 rax에 복사하기
1. 기본 명령어
| 명령어 | 의미 |
|---|---|
| mov | 값 복사 |
| add | 더하기 |
| sub | 빼기 |
| xor | XOR 연산 / 0으로 초기화 |
| push | 스택에 값 저장 |
| pop | 스택에서 값 꺼내기 |
| call | 함수 호출 |
| retn | 함수 종료 |
| test | 값 비교 / 플래그 설정 |
| jz | 0이면 점프 |
| jnz | 0이 아니면 점프 |
| rep stosb | 반복 저장 (버퍼 초기화) |
공부하다가 궁금해서 찾아본것들
어셈블리어는 cpu의 종류와 운영체제에 따라 조금씩 다르다.
CPU 아키텍쳐와 종류에 따라 규약과 시스템 호출의 차이로 문법과 레지스터명이 다르다.
EX)
x86 어셈블리 (Intel)
mov eax, 5
add eax, 3
ARM CPU 어셈블리
mov r0, #5
add r0, r0, #3
레지스터별 일반적 사용처
| 레지스터 | 의미 |
|---|---|
| eax | 연산 결과 / 반환값 |
| ebx | 일반 목적 |
| ecx | 반복 카운터 / 인자 |
| edx | 인자 / 연산용 |
| rdi | 버퍼 주소 / 인자 |
| rsi | 버퍼/문자열 주소 / 인자 |
| rbp | 스택 기준점 |
| rsp | 스택 포인터 |
| r8~r15 | 일반 목적 |
이것도 역시 호출규약 때문