※이 블로그에서 다루는 어셈블리어는 AT&T기준으로 작성한 글 입니다. ※
어셈블리어란?
- 0과 1로 이루어진 기계어를 보다 쉽게 보기 위해서 사용하는 언어.
- 기계어에 일대일 대응하는 명령어 저급? 언어
- 매우 직관적인 언어
- 응용프로그램 또는 하드웨어를 제어할 수 없는 고급언어 대신에 사용하는 언어
코드에서 목적코드로 변환 과정
어셈블리어의 특징
- 데이터 타입이 단순하다
- 배열이나 구조체 X (복잡한 자료구조 x)
- 기초적인 연산들 (산술연산, 데이터 이동, 제어 )
어셈블리어에 사용되는 레지스터 (rxx는 64비트 이고 exx는 32비트 환경에서 사용합니다.)
어셈블리어에서는 $레지스터 라고 표현합니다. 그 중에 괄호가 있는 것도 있고 없는 것도 있는데 있는 것은 메모리를 의미하고 없는 것은 레지스터를 의미합니다.
%rax (%eax) |
%r8 |
%rbx (%ebx) |
%r9 |
%rcx (%ecx) |
%r10 |
%rdx (%edx) |
%r11 |
%rsi (%esi) |
%r12 |
%rdi (%edi) |
%r13 |
%rsp (%esp) |
%r14 |
%rbp (%ebp) |
%r15 |
1비트 레지스터
CF (Carry Flag) |
SF (Sign Flag) |
ZF (Zero Flag) |
OF (Overflow Flag) |
CF : 캐리 발생시 1
ZF : 0일때 1
SF : sgiend일때 1
OF : overflow가 일어날 때 1
어셈블리어 명령어
Two operand Command
- mov Source, Dest : source를 dest로 복사
- lea Source, Dest : source 주소 모드 수식을 Dest에 저장
- add Source, Dest : Dest = Dest + Source
- sub Source, Dest : Dest = Dest - Source
- mul Source, Dest : Dest = Dest * Source
- sal Source, Dest = Dest << Source
- sar Source, Dest = Dest >> Source (Arithmetic shift)
- shr Source, Dest = Dest >> Source (Logical shift)
- xor Source, Dest = Dest = Dest ^ Source
- and Source, Dest = Dest = Dest & Source
- or Source, Dest = Dest = Dest | Source
One operand Command
- inc Dest = Dest = Dest+1
- dec Dest = Dest = Dest-1
- neg Dest = Dest = -Dest
- not Dest = ~Dest
Control Command
- cmp Source1, Source2 = Source2 - Source1 을 계산 (저장은 하지 않고 flag 확인 - CF, ZF, SF, OF)
- test Source1, Source2 = Source1&Source2 계산 (저장 X - ZF, SF)
- sete = equal Zero (Zero Flag)
- setne = not equal Zero (~Zero Flag)
- sets = signed (Sign Flag)
- setns = not signed (~Sign Flag)
- setg = greater than zero (~(SF^OF)&~ZF)
- setge = greater or Equal zero (~(SF^OF))
- setl = less than zero (SF^OF)
- setle = less or equal zero ((SF^OF) | ZF)
- seta = Above Zero (~CF&~ZF)
- setb = Below Zero (CF)
Jump Command
- jmp = jump
- je = if equal, jump
- jne = if not equal, jump
- js = if signed, jump
- jns = if not signed, jump
- jg = if greater, jump
- jge = if greater or equal, jump
- jl = if less, jump
- jle = if less or equal, jump
- ja = if above, jump
- jb = if below, jump
'System ' 카테고리의 다른 글
[시스템] 프로세스 (0) | 2018.01.21 |
---|---|
[프로세스] 예외적인 제어흐름 (0) | 2018.01.18 |
어셈블리어 (assembly) -2- (명령어 예제, 조건문 ,반복문 예제) (0) | 2018.01.16 |
IEEE 754 floating point(부동 소수점) (0) | 2017.10.16 |