어셈블리어의 문법
종류 : 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 |
---|