티스토리 뷰

CS

어셈블리어( Assembly ) 기초

ellie.strong 2020. 4. 20. 23:09
728x90

어셈블리어

기계어의 비트 형식을 mnemonic code로 나타낸 것

 

Mnemonic code

기계어의 비트 형식이 나타내는 의미를 symbol로 표현한 것으로 프로그램을 이해하거나 작성하기가 쉽다. 

 

어셈블리 프로그래밍을 하는 이유

  • 컴퓨터 하드웨어의 구성 요소들을 직접 액세스하려고 할 때
  • 컴파일러를 설계하거나 시스템 프로그램을 작성하려고 할 때
  • 빠른 수행이 필요한 프로그램을 작성하려고 할 때
  • 기억 장소를 적게 차지하거나 입출력 장치를 보다 효율적으로 사용하려 할 때

Assembler

어셈블리어를 기계어로 변환하는 프로그램

<Source program = 어셈블리어> → <Object program = 기계어>

어셈블리어와 기계어는 1:1 mapping 관계로 disassemble이 가능하며 이를 통해 코드가 동작하는 로직을 이해할 수 있다. 

 

Assebly 데이터 타입

  • Byte = 1 byte = 8 bit
  • Word = 2 byte = 16 bit
  • Doubleword = 4 byte = 32 bit 

Assebly Type Casting ( PTR 구문 형식 )

어셈블리어 Type Casting
DWORD PTR SS:[ESP] DWORD (4 byte)
WORD PTR SS:[ESP] WORD (2 byte)
BYTE PTR SS:[ESP] BYTE (1 byte)

간접 메모리 주소 지정 방식에서 상수값을 저장하고자 할 경우, default 크기는 byte ptr이다. 따라서 저장하고자 하는 상수값의 크기가 1 byte 이상이면 반드시 type casting을 하여 크기를 지정해 주어야한다. 

 

다음 코드의 경우 type casting을 하지 않아 defualt 크기인 byte ptr로 해석되어 78값만 [reg]에 저장된다. 

mov [reg], 0x12345678 // = mov byte ptr [reg], 0x12345678

다음의 경우에도 마찬가지이며 dword ptr로 크기를 지정해야한다. dword ptr의 위치는 상관 없다. 

mov ds:[8080h], 0x12345678 // = mov byte ptr ds:[8080h], 0x12345678
// ds:[8080h] <- 0x78

mov dword ptr ds:[8080h], 0x12345678 // OR mov ds:[8080h], dword ptr 0x12345678
// ds:[8080h] <- 0x12345678
728x90

'CS' 카테고리의 다른 글

[CS/알고리즘] 정렬 (Sorting)  (0) 2021.03.05
오류 (Error), 결함 (Defect), 장애 (Failure)  (0) 2020.08.04
Assembly Intel Manual  (0) 2020.04.21
Addressing Modes  (0) 2020.04.21
80x86 프로세서 구조  (0) 2020.04.03
댓글
공지사항
최근에 올라온 글