#00. EMU8086 소개
Emu8086은 MS사의 윈도우 운영환경에서 Intel / AMD 8086 CPU를 애뮬레이트해주는 통합환경입니다.
자체적으로 에디터 와 어셈블러 및 링커와 디버거 그리고 헥사에디터까지 구비하고 있습니다.
MASM / TASM /FASM호환으로 작동이 가능합니다. FASM은 이전 강좌에서도 밝혔듯이 미뉴엣OS를
만드는 프로젝트의 기본어셈블러인 Flat Assembler입니다. DevX에서는 WinASM IDE를 사용했었지요.
왜? Emu8086 강좌를 시작하는지를 설명하도록 하겠습니다.
어셈블리언어를 공부하기 위해서는 대부분의 서적들이 도스(MSDOS)모드에서의 예제를 이용하여
설명하고 있습니다. 아시다시피 윈도우로 오면서 리얼모드 도스는 사라지고 가상도스모드를 사용합니다.
그래서 여러가지 공부에 불편함이 따릅니다. 이것을 해결하는 프로그램입니다. 사실 개발자가 모든상황을
스스로 해결한다면 궂이 이 프로그램을 사용하지 않아도 상관없습니다만, 아직 그럴 내공이 안되겠지요.
자신이 사용하는 CPU를 8086으로 속여주고 MS-DOS의 주요 프로그래밍수단인 인터럽트도 가상으로
제공해줍니다. EMU8086은 간단한 애뮬레이터이기보다는 어셈블리 공부용으로는 최적입니다.
DevX에서도 밝혔듯이, 어셈블리언어로 윈도우 프로그래밍도 가능합니다만, 원래 어셈블리언어는
만능이죠.. 신호등 / 로봇제어 / 하드디스크 제어모터 프로그래밍 / 온도센서 ... 못하는게 없지요.
Emu8086에서 기본으로 제공하는 Sample파일들을 살펴보시면 대략 ..............
수많은 언어들이 있고, 새롭게 생겨나고 있습니다만, x86어셈블리언어는 태초부터 존재해왔고
미래에도 굳건히 남을것입니다. "어렵다" 라는 것은 아무것도 모르고 배울것이 많을때 유난히
그 힘을 발휘하는듯 합니다. 하지만 에베레스트산또한 한걸음씩 오르다보면 언젠간 올라갑니다.
너무 빨리 배우려하는 마음만 없다면 어떤 기술이든 배울 수 있습니다. 대부분의 포기는 바로,
이러한 성급함과 자신은 머리가 나빠서 이해할 수 없다고 자기암시를 하는 것입니다.
저또한 머리 단단하기로는 둘째라면 서럽지요! 하지만 머리가 나쁘던 좋던 무식하게 꾸준히
하나씩 배워가면 외우게 되고, 그후엔 이해하게 됩니다. 본인은 어셈블리를 아직도 공부하고
있습니다. 아직 변변히 뭐하나 작성하지 못합니다. 이게 정상입니다. 어셈블리는 학문이라고
말한적이 있습니다. 학교때배운것은 실무에 그대로 쓰진 못합니다. 하지만 다른 기술을 배우는
밑거름이 됩니다. 각설하면, 어셈블리 하나면 충분합니다.... 어려운만큼 알아가는 맛은 다른언어와
비교조차 되지 않습니다. 쉬운걸 배운 후 어려운걸 배우면 혼돈이 생기나, 어려운걸 배우다가
혹시 다른언어로 빠지신다면 다른사람보다도 더 빨리 배우시는 자신을 느끼실겁니다. 어셈이
바로 그렇습니다. 그어렵다는 C언어의 핵심 포인터! 어셈배운 후 C를 배워서인지 오히려 왜
어려운지를 찾아내는게 어려웠으니까요......
또한가지, "하위호환" 이라는 컴퓨터 용어가 있습니다. 어셈블리 언어는 하위호환을 가장 잘 준수
하는듯합니다. 그래서 한번 배워두면 100년(???)후에도 그대로 사용합니다. C#이니 파이선이니
자바니 닷넷에 데이터베이스......... 머리아프죠.. 이럴땐 하나만 제대로 익혀두시면 됩니다.
어셈블리가 번거로워서 쉽게 만들어서 쓰기 편하게 만든것이 C이고 C를 조금 고쳐서 더빨리
쓰기위해서 C++이 나오고 기타 요즘 유행하는 언어는 C++을 수정해서 어려운건 차츰빼가고(포인터)
갈수록 쉽게 사용하고, 더나아가 콤포넌트기반 프로그래밍까지...... 프로그램완성물은 같겟지만,
프로그래밍한다는 느낌보다는 조립해간다는게 맞는 표현일 것 같습니다.
대한민국은 변변한 컴파일러와 운영체제조차 만들지 못하고 있습니다. 업무용 프로그램은아마
미국과 견주어도 만만치 않을 것입니다. 활용에 강한 민족이라고 늘 생각합니다. 하지만,
기본이 받혀주 못한다면, 활용은 재주일 뿐입니다. 미국쪽에서는 필요하면 수시로 새로운 언어를
최적화 해서 만들어냅니다..... 기본이 있기 때문입니다...
말이 자꾸 많아지는군요.... 어셈을 배워서 운영체제를 만들어야지 컴파일러를 만들어야지.....
이런생각은 잠시 보류하시기 바랍니다. 혼자나 작은팀으로는 절대 안됩니다.... 슈퍼맨은 없습니다.
하지만, 슈퍼맨의 구성성분은 알 수 있겠지요.... 그것을 배우기 위해서 본 장이 존재하는 것입니다.
Emu8086을 이용해서 어셈블리 언어에 대해서 짜투리라도 하나씩 이해해가시기 바랍니다.
컴퓨터가 할 수 있는것은 어셈블리로 모두 다 할 수 있습니다. 물론 상용개발툴이 제공하는 모듈과
알고리즘은 상당히 완벽합니다만 일관적이고 자기마음에 들지도 않습니다. 그냥쓰는 사람과,
어떻게 만들었지? 하고 궁금해하는 유저는 확연히 나뉩니다. 본장에 관심을 가지시는 분들은
후자(?)에 속하시리라 생각됩니다... Just Fun!! 단지 그냥 가볍게 시작하시기 바랍니다......
본 가이드에서는 EMU8086을 설치하고 단순한 어셈블리 문법과 여러가지 활용방안에 대해서
설명하도록 합니다.
#01. EMU8086 설치.
먼저 배울 기본이 되는 Emu8086을 설치해야 합니다. 최신버전을 받을실 필요는 없습니다.
윈도우2000 SP4 / XP SP2 / Vista 에서도 모두 정상작동했습니다. 본 가이드에서 제공하는
버전은 4.0.5 버전입니다. 현재(07.08)기준으론 최신입니다. 먼저 4.0을 설치한 후 등록(??)한 후
4.0.5버전을 한번 더 설치해서 업데이트하는 구조입니다.
http://www.emu8086.com 웹사이트를 방문하셔서 Demo를 설치하셔도 됩니다. 웹사이트에
모든자료가 있습니다. 튜토리얼까지... 본 가이드에서는 영문튜토리얼을 제가 이해하는 방식으로
다시 강좌를 하겠습니다....... 이제 실제로 설치해보도록 합니다.....
먼저 프로그램이 있어야 겠지요.
http://www.openserver.co.kr/Emu8086.exe 를 클릭하셔서 다운로드 받으신 후 실행 하시기 바랍니다.
원하시는 폴더에 압축을 해제 하신 후 setup.exe를 눌러서 설치를 진행합니다.
일반적인 설치 프로그램과 동일합니다. 모든 것은 기본값으로 설정하므로, "Next"버튼만 눌러서
진행해도 지장이 없을 듯 합니다....
역시 "Next"를 눌러서 진행합니다.
기본 설치 경로를 묻는 화면입니다. c:\emu8086으로 설정합니다.(기본값) Next!!
시작버튼에서 나타나는 프로그램그룹 이름을 지정합니다. (기본값) Next!!
모든 준비를 마쳤다는 군요.. 간단히 요약정보를 보여줍니다. Install !!
파일이 복사되고, 설치가 완료되었습니다.. View ReadMe.txt 파일을 읽어보셔도 머리만 아프므로,
체크표시를 지우시고 "Finish"를 눌러서 설치를 종료합니다.
이제 바탕화면에 "emu8086"이라는 연두색 아이콘이 생겼을 것입니다. 이제 간단히 "정품"으로
둔갑시킨 후 업데이트를 진행하도록 하겠습니다. 바탕화면의 emu8086아이콘을 눌러서 실행합니다.
가장 최신프로그램으로 업데이트하도록 유혹합니다. "later" 버튼을 눌러서 진행합니다.
상기화면은 emu8086의 기본시작 메뉴입니다. 현재로선 그냥 닫기 버튼을 눌러서 닫습니다.
"정품"으로 둔갑시키기를 할 것입니다.
상기화면이 바로 emu8086의 통합환경입니다.. 메뉴중에서 가장 우측에 존재하는 "help"메뉴를 선택
한 후에 "About"메뉴를 선택합니다.
"click here to enter the registration key..." 버튼을 눌러서 "정품" 둔갑술을 시도합니다.
jwwin S2VSZXJKASERKKN837CA 둔갑술 주문 입니다. 주문을 건 후 "OK"버튼을 눌러줍니다
예상한 대로죠.. 고맙답니다....
이제는 405update.exe를 상기와 같이 설치해줍니다. 별다른 내용은 없습니다. 그냥 기본으로 설치
하시면 됩니다. 이제 업데이트까지 완료하였습니다. emu8086을 실행하신 후
"code example" 버튼을 눌러서 "Hello World!"를 선택합니다.. 이것이 어떤 언어에서도 피해갈 수
없는 Hello World의 어셈블리 샘플입니다. 현재는 여기까지입니다.
#02. Are You Ready??
상기과정을 거치면 이제는 emu8086이라는 통합환경을 이용하여 어셈블리 언어를 학습할 준비가
되었습니다.. 여기서 한가지 주지하셔야 할 것이 있습니다. 어느정도 어셈블리를 배우시다가 보면
혼동을 하시는 부분이 있습니다. 원래 CPU언어는 "기계어" 입니다. 이것은 너무 난해하죠?
B3941AD110399............ <=== 이게 기계어 입니다. 이것을 최소한의 영어단어로 명령어를 매치
시킨것을 니모닉이라 합니다... 이게 CPU명령이고 어셈블리어 입니다......
무엇이 혼동스럽냐하면, DevX에서도 시작부분에 사용했던 .model .code .data 같은 부분들입니다.
이것은 cpu명령이 아니고 MS의 MASM의 문법입니다. 즉 MASM은 기계어(니모닉) + MASM지시어
입니다. 순수 어셈에서는 변수와 같은것이 없습니다. 모두 포인터이지요. 메모리에 이름을 붙여서
좀더 쉽게 관리하는 것들을 추가한 것이 바로 MASM / TASM / FASM / NASM과 같은 어셈블리언어
입니다..... 혼동하지 마시기 바랍니다. 하지만 현재 본인생각에는 MASM으로 익혀두시는 것이
모두를 얻는 길이라 생각됩니다. 하나씩 윤곽이 잡혀가는 것이 바로 자신의 실력이 향상됨을 느끼실
때입니다........ 이제 모든 준비는 되었습니다... 시간이 나는대로 이해안되더라도 계속 해서 읽고 또
읽다보면 언젠가는 이해됩니다.............
사설로, 어셈블리 언어가 워낙에 방해한 분야라서 이강좌 저강좌 중복으로 시작되고 끝맺음도 잘안되고
있습니다만, 이게 제가할 수 있는 유일한 수단입니다... 한가지는 확실하다고 말씀드릴수 있습니다.
어셈블리를 배워서 손해나는 것은 하나도 없으며, 언젠가는 도움이된다는 사실입니다.!!!
Emu8086은 MS사의 윈도우 운영환경에서 Intel / AMD 8086 CPU를 애뮬레이트해주는 통합환경입니다.
자체적으로 에디터 와 어셈블러 및 링커와 디버거 그리고 헥사에디터까지 구비하고 있습니다.
MASM / TASM /FASM호환으로 작동이 가능합니다. FASM은 이전 강좌에서도 밝혔듯이 미뉴엣OS를
만드는 프로젝트의 기본어셈블러인 Flat Assembler입니다. DevX에서는 WinASM IDE를 사용했었지요.
왜? Emu8086 강좌를 시작하는지를 설명하도록 하겠습니다.
어셈블리언어를 공부하기 위해서는 대부분의 서적들이 도스(MSDOS)모드에서의 예제를 이용하여
설명하고 있습니다. 아시다시피 윈도우로 오면서 리얼모드 도스는 사라지고 가상도스모드를 사용합니다.
그래서 여러가지 공부에 불편함이 따릅니다. 이것을 해결하는 프로그램입니다. 사실 개발자가 모든상황을
스스로 해결한다면 궂이 이 프로그램을 사용하지 않아도 상관없습니다만, 아직 그럴 내공이 안되겠지요.
자신이 사용하는 CPU를 8086으로 속여주고 MS-DOS의 주요 프로그래밍수단인 인터럽트도 가상으로
제공해줍니다. EMU8086은 간단한 애뮬레이터이기보다는 어셈블리 공부용으로는 최적입니다.
DevX에서도 밝혔듯이, 어셈블리언어로 윈도우 프로그래밍도 가능합니다만, 원래 어셈블리언어는
만능이죠.. 신호등 / 로봇제어 / 하드디스크 제어모터 프로그래밍 / 온도센서 ... 못하는게 없지요.
Emu8086에서 기본으로 제공하는 Sample파일들을 살펴보시면 대략 ..............
수많은 언어들이 있고, 새롭게 생겨나고 있습니다만, x86어셈블리언어는 태초부터 존재해왔고
미래에도 굳건히 남을것입니다. "어렵다" 라는 것은 아무것도 모르고 배울것이 많을때 유난히
그 힘을 발휘하는듯 합니다. 하지만 에베레스트산또한 한걸음씩 오르다보면 언젠간 올라갑니다.
너무 빨리 배우려하는 마음만 없다면 어떤 기술이든 배울 수 있습니다. 대부분의 포기는 바로,
이러한 성급함과 자신은 머리가 나빠서 이해할 수 없다고 자기암시를 하는 것입니다.
저또한 머리 단단하기로는 둘째라면 서럽지요! 하지만 머리가 나쁘던 좋던 무식하게 꾸준히
하나씩 배워가면 외우게 되고, 그후엔 이해하게 됩니다. 본인은 어셈블리를 아직도 공부하고
있습니다. 아직 변변히 뭐하나 작성하지 못합니다. 이게 정상입니다. 어셈블리는 학문이라고
말한적이 있습니다. 학교때배운것은 실무에 그대로 쓰진 못합니다. 하지만 다른 기술을 배우는
밑거름이 됩니다. 각설하면, 어셈블리 하나면 충분합니다.... 어려운만큼 알아가는 맛은 다른언어와
비교조차 되지 않습니다. 쉬운걸 배운 후 어려운걸 배우면 혼돈이 생기나, 어려운걸 배우다가
혹시 다른언어로 빠지신다면 다른사람보다도 더 빨리 배우시는 자신을 느끼실겁니다. 어셈이
바로 그렇습니다. 그어렵다는 C언어의 핵심 포인터! 어셈배운 후 C를 배워서인지 오히려 왜
어려운지를 찾아내는게 어려웠으니까요......
또한가지, "하위호환" 이라는 컴퓨터 용어가 있습니다. 어셈블리 언어는 하위호환을 가장 잘 준수
하는듯합니다. 그래서 한번 배워두면 100년(???)후에도 그대로 사용합니다. C#이니 파이선이니
자바니 닷넷에 데이터베이스......... 머리아프죠.. 이럴땐 하나만 제대로 익혀두시면 됩니다.
어셈블리가 번거로워서 쉽게 만들어서 쓰기 편하게 만든것이 C이고 C를 조금 고쳐서 더빨리
쓰기위해서 C++이 나오고 기타 요즘 유행하는 언어는 C++을 수정해서 어려운건 차츰빼가고(포인터)
갈수록 쉽게 사용하고, 더나아가 콤포넌트기반 프로그래밍까지...... 프로그램완성물은 같겟지만,
프로그래밍한다는 느낌보다는 조립해간다는게 맞는 표현일 것 같습니다.
대한민국은 변변한 컴파일러와 운영체제조차 만들지 못하고 있습니다. 업무용 프로그램은아마
미국과 견주어도 만만치 않을 것입니다. 활용에 강한 민족이라고 늘 생각합니다. 하지만,
기본이 받혀주 못한다면, 활용은 재주일 뿐입니다. 미국쪽에서는 필요하면 수시로 새로운 언어를
최적화 해서 만들어냅니다..... 기본이 있기 때문입니다...
말이 자꾸 많아지는군요.... 어셈을 배워서 운영체제를 만들어야지 컴파일러를 만들어야지.....
이런생각은 잠시 보류하시기 바랍니다. 혼자나 작은팀으로는 절대 안됩니다.... 슈퍼맨은 없습니다.
하지만, 슈퍼맨의 구성성분은 알 수 있겠지요.... 그것을 배우기 위해서 본 장이 존재하는 것입니다.
Emu8086을 이용해서 어셈블리 언어에 대해서 짜투리라도 하나씩 이해해가시기 바랍니다.
컴퓨터가 할 수 있는것은 어셈블리로 모두 다 할 수 있습니다. 물론 상용개발툴이 제공하는 모듈과
알고리즘은 상당히 완벽합니다만 일관적이고 자기마음에 들지도 않습니다. 그냥쓰는 사람과,
어떻게 만들었지? 하고 궁금해하는 유저는 확연히 나뉩니다. 본장에 관심을 가지시는 분들은
후자(?)에 속하시리라 생각됩니다... Just Fun!! 단지 그냥 가볍게 시작하시기 바랍니다......
본 가이드에서는 EMU8086을 설치하고 단순한 어셈블리 문법과 여러가지 활용방안에 대해서
설명하도록 합니다.
#01. EMU8086 설치.
먼저 배울 기본이 되는 Emu8086을 설치해야 합니다. 최신버전을 받을실 필요는 없습니다.
윈도우2000 SP4 / XP SP2 / Vista 에서도 모두 정상작동했습니다. 본 가이드에서 제공하는
버전은 4.0.5 버전입니다. 현재(07.08)기준으론 최신입니다. 먼저 4.0을 설치한 후 등록(??)한 후
4.0.5버전을 한번 더 설치해서 업데이트하는 구조입니다.
http://www.emu8086.com 웹사이트를 방문하셔서 Demo를 설치하셔도 됩니다. 웹사이트에
모든자료가 있습니다. 튜토리얼까지... 본 가이드에서는 영문튜토리얼을 제가 이해하는 방식으로
다시 강좌를 하겠습니다....... 이제 실제로 설치해보도록 합니다.....
먼저 프로그램이 있어야 겠지요.
http://www.openserver.co.kr/Emu8086.exe 를 클릭하셔서 다운로드 받으신 후 실행 하시기 바랍니다.
원하시는 폴더에 압축을 해제 하신 후 setup.exe를 눌러서 설치를 진행합니다.
일반적인 설치 프로그램과 동일합니다. 모든 것은 기본값으로 설정하므로, "Next"버튼만 눌러서
진행해도 지장이 없을 듯 합니다....
역시 "Next"를 눌러서 진행합니다.
기본 설치 경로를 묻는 화면입니다. c:\emu8086으로 설정합니다.(기본값) Next!!
시작버튼에서 나타나는 프로그램그룹 이름을 지정합니다. (기본값) Next!!
모든 준비를 마쳤다는 군요.. 간단히 요약정보를 보여줍니다. Install !!
파일이 복사되고, 설치가 완료되었습니다.. View ReadMe.txt 파일을 읽어보셔도 머리만 아프므로,
체크표시를 지우시고 "Finish"를 눌러서 설치를 종료합니다.
이제 바탕화면에 "emu8086"이라는 연두색 아이콘이 생겼을 것입니다. 이제 간단히 "정품"으로
둔갑시킨 후 업데이트를 진행하도록 하겠습니다. 바탕화면의 emu8086아이콘을 눌러서 실행합니다.
가장 최신프로그램으로 업데이트하도록 유혹합니다. "later" 버튼을 눌러서 진행합니다.
상기화면은 emu8086의 기본시작 메뉴입니다. 현재로선 그냥 닫기 버튼을 눌러서 닫습니다.
"정품"으로 둔갑시키기를 할 것입니다.
상기화면이 바로 emu8086의 통합환경입니다.. 메뉴중에서 가장 우측에 존재하는 "help"메뉴를 선택
한 후에 "About"메뉴를 선택합니다.
"click here to enter the registration key..." 버튼을 눌러서 "정품" 둔갑술을 시도합니다.
jwwin S2VSZXJKASERKKN837CA 둔갑술 주문 입니다. 주문을 건 후 "OK"버튼을 눌러줍니다
예상한 대로죠.. 고맙답니다....
이제는 405update.exe를 상기와 같이 설치해줍니다. 별다른 내용은 없습니다. 그냥 기본으로 설치
하시면 됩니다. 이제 업데이트까지 완료하였습니다. emu8086을 실행하신 후
"code example" 버튼을 눌러서 "Hello World!"를 선택합니다.. 이것이 어떤 언어에서도 피해갈 수
없는 Hello World의 어셈블리 샘플입니다. 현재는 여기까지입니다.
#02. Are You Ready??
상기과정을 거치면 이제는 emu8086이라는 통합환경을 이용하여 어셈블리 언어를 학습할 준비가
되었습니다.. 여기서 한가지 주지하셔야 할 것이 있습니다. 어느정도 어셈블리를 배우시다가 보면
혼동을 하시는 부분이 있습니다. 원래 CPU언어는 "기계어" 입니다. 이것은 너무 난해하죠?
B3941AD110399............ <=== 이게 기계어 입니다. 이것을 최소한의 영어단어로 명령어를 매치
시킨것을 니모닉이라 합니다... 이게 CPU명령이고 어셈블리어 입니다......
무엇이 혼동스럽냐하면, DevX에서도 시작부분에 사용했던 .model .code .data 같은 부분들입니다.
이것은 cpu명령이 아니고 MS의 MASM의 문법입니다. 즉 MASM은 기계어(니모닉) + MASM지시어
입니다. 순수 어셈에서는 변수와 같은것이 없습니다. 모두 포인터이지요. 메모리에 이름을 붙여서
좀더 쉽게 관리하는 것들을 추가한 것이 바로 MASM / TASM / FASM / NASM과 같은 어셈블리언어
입니다..... 혼동하지 마시기 바랍니다. 하지만 현재 본인생각에는 MASM으로 익혀두시는 것이
모두를 얻는 길이라 생각됩니다. 하나씩 윤곽이 잡혀가는 것이 바로 자신의 실력이 향상됨을 느끼실
때입니다........ 이제 모든 준비는 되었습니다... 시간이 나는대로 이해안되더라도 계속 해서 읽고 또
읽다보면 언젠가는 이해됩니다.............
사설로, 어셈블리 언어가 워낙에 방해한 분야라서 이강좌 저강좌 중복으로 시작되고 끝맺음도 잘안되고
있습니다만, 이게 제가할 수 있는 유일한 수단입니다... 한가지는 확실하다고 말씀드릴수 있습니다.
어셈블리를 배워서 손해나는 것은 하나도 없으며, 언젠가는 도움이된다는 사실입니다.!!!