본문으로 바로가기

어셈블리어 (assembly) -1- (개념, 명령어)

category System 2018. 1. 16. 17:07


※이 블로그에서 다루는 어셈블리어는 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