물마중
[MASM] 어셈블리 언어(MASM)의 기초 본문
이제 NASM에서 벗어나, MASM으로 들어간다. 문법적 차이는 존재하지만 그렇게 큰 차이는 존재하지 않는다. NASM의 경우 []를 제외한 특수기호가 안 쓰이지만, MASM은 그 규제가 유연하다.
또한 주소지정 방식에서 차이를 보인다.
NASM | MASM |
● 데이터 저장 時 mov ax, [data] ● 주소 지정 時 mov ax, data |
● 데이터 저장 時 mov ax, data ● 주소 지정 時 mov ax, offset data |
이번 공부는 '09.07.15 당시 한국항공대학교 재학중이던 배건규 님의 자료를 참고한다. 쩝... 어셈블리 책 하나 사야겠다... 돈이 깨지는 소리가 들리는 군하;;
1. 어셈블리 언어의 기본적인 구성요소
● 산술 연산 우선순위(Precedence) : 수식이 두 개 이상의 연산자를 포함시 연산의 순서
연산자 | 이름 | 우선순위 |
( ) | 괄호 | 1 |
+, - | 단항 플러스, 마이너스 | 2 |
*, / | 곱셉, 나눗셈 | 3 |
MOD | 나눔자 | 4 |
+, - | 덧셈, 뺄셈 | 5 |
● 데이터 표현
- 정수 상수 [sign] digits[radix]
h : hexadecimal
b : binary
q/o : Octal
- 실수 상수 [sign]integer.[integer][exponent]
● 문자 상수 : 2진 ASCII 코드로 변환해서 사용
● 예약어 (Reversed Word)
- 인텔 프로세서에 의해 실행되는 명령어 니모닉(MOV, ADD, etc)
- 수식에 사용되는 연산자들
- BYTE or WORD 같이 변수나 피연산자의 크기나 사용처를 알려주는 속성들
- MASM에게 어떻게 프로그램을 해야하는지 알려주는 디렉티브
● 식별자(Identifier)
- 프로그래머가 선택한 이름
- 1 ~ 247사이의 문자가 가능
- MASM은 대문자와 소문자를 구별하지 않는다.
- 첫 번째 문자는 알파벳 중 하나 이거나 _, @, $ 이어야 한다.
- 예약어를 사용해서는 안된다.
● 디렉티브(Directive)
- 프로그램의 소스 코드를 어셈블링할 때 어셈블러가 인식하고 활용하는 명령어
- 논리 세그먼트를 정의하거나 메모리 모델을 선택하거나 프로시저를 만들거나 변수정의 시
사용
- 디렉티브는 어셈블러 구문으로서 인텔 명령어 집합과는 관계가 없다.
2. 데이터 정의
● 고유의 데이터 타입
- BYTE : 8비트 부호가 없는 정수
- SBYTE : 8비트 부호가 있는 정수
- WORD : 16비트 부호가 없는 정수
- SWORD : 16비트 부호가 있는 정수
- DWORD : 32비트 부호가 없는 정수
- SDWROD : 32비트 부호가 있는 정수
- FWORD : 48비트 정수(보호 모드에서 Far 포인터)
- QWORD : 64비트 정수
- TBYTE : 80비트(10바이트) 정수
- REAL4 : 32비트(4바이트) IEEE 짧은 실수
- REAL8 : 64비트(8바이트) IEEE 긴 실수
- REAL10 : 80비트(10바이트) IEEE 확장 실수
● 리틀-엔디언(Little-Endian) 순서
- Intel CPU 아키텍처는 리틀 엔디언 방식을 따른다.
- 변수의 가장 낮은 유효 바이트가 가장 낮은 주소에 저장되고, 나머지는 다음의 연속적인 메모리 위치에 저장.
cf) 0x12345678h의 경우
78h 56h 34h 12h 순서대로 저장된다.
ps. 너무 복습하는 기분이다...;; 근데 저 FWORD, TBYTE, REAL 시리즈는 처음본다...
'Reverse Engineering > Reversing 이론 설명' 카테고리의 다른 글
[MASM] 문자열과 배열 (0) | 2011.06.22 |
---|---|
[MASM] 고급프로시저 (지역변수 선언, 스택 매개변수, 디렉터리) (0) | 2011.06.22 |
[NASM] 구조체와 C++ (0) | 2011.06.13 |
[System] 기계어의 구성(명령어 형식 : Instruction Format) (0) | 2011.05.30 |
[System] 바이트 순서 (Little Endian과 Big Endian) (0) | 2011.05.29 |