assembly language

in #programming6 years ago (edited)

어셈블리어

기계어 와 1대1로 대응하는 언어 시스템 이해에 필요함

레지스터

범용 레지스터, 상태 레지스터, 플래그 레지스(cpu 내의 저장공간)

레지스터 구조

1.데이터 레지스터:EAX, EBX, ECX, EDX

EAX:   Extended Accumulator Register  

 곱셉이나 나눗셈 연산에 사용, 함수의 결과값 저장

EBX:  Extended Base Register  

  베이스 레지스터라 불리며 메모리 주소를 저장하기위한 용도로 사용된다  

ECX:  Extended Counter Register  

 계수기 레지스터라 불리며 반복명령어(for문이나 while문) 사용시 반복카운터로 사용되는 레지스터  

EDX:   Extended Data Register  

 데이터 레지스터라 불리며 곱셈,나눗셈에서 EAX와 함께 쓰이며 입,출력 포인터 값을 저장할 때 사용  

2.포인터 레지스터:ESP, EBP

ESP:  Extended Base Pointer  

스택 포인터의 최종 주소

EBP:  Extended Stack Pointer  

대신해 함수 지역변수 가리키는 용도

3.인덱스 레지스터:ESI ,EDI

ESI: 다량의 메모리 와 비교시 그 소스의 주소를 저장한다

EDI: 다량의 메모리를 옮기거나 목적지의 주소 저장

4.세그먼트 레지스터:CS, DS,SS,ES(부분)

CS: 프로그래머의 코드 시작주소를 가지고 있다

DS: 데이터의 시작 주소를 가지고 있다

SS: 스택의 시작주소 가지고있다

ES:두곳이상의 데이터 DS와 함께 쓰임

5.상태 레지스터:EIP(IP),EFLAGS(FLAGS)

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 - 아무동작도 하지않음   //0x90

if 명령어 분기

  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) - 결과가 크면 분기  

 프로시져 : call, ret


1. call- 다음 주소를 스택에 push 한다 즉 eip를 변경하여 다른 함수를 제어한다는 뜻이다
2. ret (return)  call명령 당시 push되었던 주소를 pop하여 eip에 넣는 것이다.

스택 조작 push, pop

1.pop  스택으로부터 값을 뽑아낸다

2. push   오버랜드의 내용을 스택에 쌓는다.


출처 및 참고:http://aistories.tistory.com/12

Sort:  

Hello! Your post has been resteemed and upvoted by @ilovecoding because we love coding! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On!

Reply !stop to disable the comment. Thanks!

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.027
BTC 60450.32
ETH 2604.48
USDT 1.00
SBD 2.60