이 포스팅은 MASM 어셈블리어의 기초에 대한 내용이다.


*어셈블리어의 간단한 덧셈

 

어셈블리어로 Hello World를 출력하는 것은 좀 어렵다. C언어 처럼 printf 함수가 없기 때문이다.

 

다행히 마이크로 소프트 어셈블리어를 사용한다면 Kip R Irvine의 라이브러리를 사용해서 덧셈의 결과를 표시하는 일 정도는 할 수 있다.

INCLUDE Irvine32.inc

.data
	myVar DWORD ?

.code
main PROC
	mov eax, 555
	add eax, 222
	call WriteInt

	call DumpRegs
exit

main ENDP
end main

 

Kip R Irvine 의 라이브러리 추가 및 비주얼 스튜디오에서 MASM의 SETTING 은 아래 링크에서 참고할 수 있다.

 

MS Macro Assembler 설치하기 | Irvine32 라이브러리 | 어셈블리어 (tistory.com)

 

 

어셈블리어의 수(number)

 

*정수 (Integer)

 

어셈블리어에서는 십진수도 사용하지만 16진수와 2진수도 자주 사용한다.

 

16진수는 숫자 뒤에 h를 붙이면 된다.

 

10000h = 65536

 

2진수는 숫자 뒤에 b를 붙인다.

 

1000b = 8

 

아무것도 붙이지 않거나 d를 붙이면 10진수다.

 

참고로 MASM은 대소문자 구분을 하지 않는다.

 

*실수

 

실수는 IEEE 부동소수점 형식을 사용한다.

 

*문자 상수

 

MASM의 문자 상수는 ASCII 코드로 저장한다. 따옴표로 둘러싸인 문자이다.

 

'A'

"b"

 

* MASM 예약어(키워드) reserved keyword MASM

 

키워드는 대부분 어셈블리어마다 비슷해보이지만 차이가 있다.

 

MASM의 키워드의 유형은 몇가지가 있다.

 

- 니모닉 (mnemonics) : mov, add 등 명령어

 

- 레지스터 이름 (EAX 등)

 

- 디렉티브 (directive) 지시자 : 코드의 영역을 나누고 MASM에게 프로그램에 대한 정보를 제공한다. 

 

- BYTE WORD 등 속성

 

- 연산자 (+ - 등)

 

- MASM에 사전 정의된 기호

식별자 규칙 (identifier)

 

식별자란 변수 등에 대하여 프로그래머가 직접 선택한 이름이다. 식별자를 만들 때 몇가지 규칙이 있다.

 

- MASM 예약어는 사용할 수 없다.

 

- 대소문자 구분이 없다.

 

- 첫번째 문자는 알파벳, 밑줄 _ @ ? $ 가 사용가능하다.

 

- 240개 문자를 사용할 수 있다.

 

디렉티브 (directive - 지시자)

디렉티브는 스스로 실행되는 코드가 아니라 어셈블리 작업을 수행할 때 메타데이터로 전달한다.

 

메모리에 따라서 세그먼트를 나누는 역할을 하며 변수, 매크로 등을 정의할 수 있다.

 

디렉티브간에는 호환성이 없어서 MASM에서 작동한 디렉티브는 다른 어셈블러에서 작동하지 않는다.

 

MASM의 디렉티브는 종류가 수백가지나 된다. 기본 디렉티브는

 

data를 정의하는 .data 

 

명령어를 포함하는 .code

 

스택의 크기를 설정하는 .stack 디렉티브 들이 있다.

 

다음 포스팅은 어셈블리언어의 명령어 니모닉에 대한 내용이다.

공유하기

facebook twitter kakaoTalk kakaostory naver band