본문 바로가기

컴퓨터 구조

공부하면서 빠트린 것들 끄적끄적 - 어셈블리어

어셈블리어의 문법

 

종류 :                                      Intel       AT&T

레지스터 표시 :                         eax  ,  %eax

상수 표시 :                                  1    ,   $1

메모리 주소 참조 :                    [eax] , (%eax)

operand 순서 :   destination, source , source, destination 

 

 

 

레지스터 용어 정의

 

범용 레지스터

EAX : 산술 연산에 사용되거나 함수의 값을 반환할 때 이곳에 저장 ex) 함수 return 값

EBX : 메모리 주소 저장에 사용 ex) int, float 변수 저장

ECX : 반복 명령어 (for, while) 명령어를 사용할 때 반복 카운터로 사용 ex) int 값만 저장

EDX : EAX를 보조함, 곱셈 나눗셈등의 연산이 있을 때 사용 ex) 나눗셈할 때 몫은 EAX, 나머지 EDX에 저장

 

인덱스 레지스터

ESI : 데이터를 가지고 어떠한 작업(비교,복사)을 할 때 그 시작 주소를 저장 ex) 출발지 주소 

EDI : 데이터를 가지고 어떠한 작업(비교,복사)을 할 때 그 목적지 주소를 저장 ex) 목적지 주소

 

포인터 레지스터

ESP : 스택의 최상단, 끝지점 주소를 저장 

EBP : 스택의 최하단, 첫 시작주소를 저장

EIP : 다음 명령어의 위치를 저장, 프로그램 카운터라고 불림

 

 

명령어 (Intel 기준)

mov : 레지스터 및 메모리의 데이터 을 이동시킴.

ex) mov eax, ebx

 

lea :  레지스터 및 메모리의 주소 값을 가져옴, 함수에서 지역 변수의 주소를 이동시킴. lea의 좌변은

레지스터, 우변은 반드시 주소값을 가져야함. 상수 X

ex) lea eax, [ esp ] = mov eax, esp

      lea eax, dword ptr ss:[ebp-4] = move eax,ebp , sub eax, 4

 

 

 

add : 레지스터 및 메모리의 값을 더함

ex) add eax, ebx

 

sub : 레지스터 및 메모리의 값을 뺀다

ex) sub eax, ebx

 

mul : 레지스터 및 메모리의 값을 곱함, operand는 하나만 사용함. (알아서 ax,ah와 곱한다.)

ex) mov ax, 5h

      mov bx, 4Fh

      mul bx

=> ax = 4Fh*5h

 

div: 레지스터 및 메모리의 값을 나눔, operand는 하나만 사용함. (알아서 ax,ah와 나눈다.)

ex) mov ax, 5h

      mov bx, 4Fh

      div bx

=> ax = 4Fh/5h = Fh

 

 

inc : eax의 값을 1 증가 시킴

ex) inc eax

 

dec : eax의 값을 1 감소 시킴

ex) dec eax

 

cmp : 레지스터와 레지스터의 값을 비교함

ex) cmp eax, ebx

 

call : 함수, 프로시저(void형 함수)를 호출함

ex) push eip, jmp [주소]

 

ret : 스택에 push된 주소로 복귀함

ex) pop eip, jmp eip

 

jmp : 특정한 위치로 분기함 , eip의 값을 원하는 코드의 주소로 바꾼다.

ex) jmp [주소]

 

push : eax값을 스택에 저장

ex) push eax

 

pop : 스택의 최상단의 값을 꺼내서 eax에 저장

ex) pop eax

 

 

enter : 도입 부분

ex) push ebp, move ebp,esp, sub esp,XX

 

leave : 끝나는 부분

 ex) mov ebp esp, pop ebp

'컴퓨터 구조' 카테고리의 다른 글

컴퓨터 시스템 - 용어  (0) 2022.11.21