기계어 와 1대1로 대응하는 언어 시스템 이해에 필요함
범용 레지스터, 상태 레지스터, 플래그 레지스(cpu 내의 저장공간)
EAX: Extended Accumulator Register
곱셉이나 나눗셈 연산에 사용
EBX: Extended Base Register
베이스 레지스터라 불리며 메모리 주소를 저장하기위한 용도로 사용된다
ECX: Extended Counter Register
계수기 레지스터라 불리며 반복명령어(for문이나 while문) 사용시 반복카운터로 사용되는 레지스터
EDX: Extended Data Register
데이터 레지스터라 불리며 곱셈,나눗셈에서 EAX와 함께 쓰이며 입,출력 포인터 값을 저장할 때 사용
ESP: Extended Base Pointer
스택 포인터의 최종 주소
EBP: Extended Stack Pointer
대신해 함수 지역변수 가리키는 용도
ESI: 다량의 메모리 와 비교시 그 소스의 주소를 저장한다
EDI: 다량의 메모리를 옮기거나 목적지의 주소 저장
CS: 프로그래머의 코드 시작주소를 가지고 있다
DS: 데이터의 시작 주소를 가지고 있다
SS: 스택의 시작주소 가지고있다
ES:두곳이상의 데이터 DS와 함께 쓰임
EIP:현재 실행되는 프로그램의 주소
EFLAGS: 비타 단위의 플래그 들을 저장하는 레지스터
작동코드 1 오퍼랜드 2 오퍼랜드;설명(주석)
mov eax, ebx
1. 즉시 저장 방식
mov 0x1, eax 직접 값을 eax에 넣었다
2. 레지스터 저장 방식
mov esp, ebp b = a 처럼 ebp에 esp 값을 할당해 주는 방식
3.직접 주소 지정방식
mov eax, 주소 주소에 eax 값을 할당한다
4. 레지스터 간접 주소 지정 방식
mov (ebx), eax ebx값을 간접적으로 eax에 할당// 잘 모르겠다...
5. 베이스 상대 주소 지정 방식
mov 0x4(ebx), eax ebx주소에 4바이트를 더한 주소 값을 eax 에 할당한다
MOV - 데이터 이동
PUSH - 오버랜드의 내용을 스택에 쌓는다.
POP - 스택으로부터 값을뽑아낸다.
SUB -레지스터나 메모리의 값을 뺄셈할 때 쓰인다
ADD - 레지스터나 메모리의 값을 덧셈할 때 쓰인다.
LEA - 매개변수나 지역변수의 주소를 얻어오는것
NOP - 아무동작도 하지않음
JNE/JNZ (jump on not Equal / not Zero) - 결과가 0이 아니면 분기
JNL/JGE (Junp on not Less / GReater or Equal) - 결과가 크거나 같으면 분기
JNLE/JG (Jump on not Less or Equal / Greater) - 결과가 크면 분기
JNB/JAE (Jump on not Below / Above or Equal) - 결과가 크거나 같으면 분기
JNBE/JA (Jump on not Below or Equal / Above) - 결과가 크면 분기
1. call- 다음 주소를 스택에 push 한다 즉 eip를 변경하여 다른 함수를 제어한다는 뜻이다
2. ret (return) call명령 당시 push되었던 주소를 pop하여 eip에 넣는 것이다.
1.pop 스택으로부터 값을 뽑아낸다
2. push 오버랜드의 내용을 스택에 쌓는다.
출처 및 참고:http://aistories.tistory.com/12