<font face="맑은 고딕"><span class="sc1" style="font-size:10pt;color:#008000;white-space:pre;">; Hybrid Assembler</span></font> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"></span><span class="sc1" style="font-size:10pt;color:#008000;white-space:pre;">; Copyright 2016. asmpro all rights reserved.</span></font> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"><br></span></font></div> <div><font face="맑은 고딕"><span class="sc5" style="font-size:10pt;white-space:pre;">format</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">pe_console</span></font></div> <div><font face="맑은 고딕"><span class="sc9" style="font-size:10pt;color:#0080ff;white-space:pre;"><br></span></font></div> <div><font face="맑은 고딕"><span class="sc9" style="font-size:10pt;color:#0080ff;white-space:pre;">section</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">data</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"><br></span></font></div> <div><font face="맑은 고딕"><span class="sc5" style="font-size:10pt;white-space:pre;">strHybrid</span></font><span class="sc0" style="font-family:'맑은 고딕';font-size:10pt;white-space:pre;"> </span><span class="sc9" style="font-family:'맑은 고딕';font-size:10pt;color:#0080ff;white-space:pre;">db</span><span class="sc0" style="font-family:'맑은 고딕';font-size:10pt;white-space:pre;"> </span><span class="sc3" style="font-family:'맑은 고딕';font-size:10pt;color:#808080;white-space:pre;">"Hybrid"</span><span class="sc4" style="font-family:'맑은 고딕';font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">,</span><span class="sc2" style="font-family:'맑은 고딕';font-size:10pt;color:#ff8000;white-space:pre;">0</span></div> <div><span class="sc0" style="font-family:'맑은 고딕';font-size:10pt;white-space:pre;"></span><span class="sc5" style="font-family:'맑은 고딕';font-size:10pt;white-space:pre;">strHello</span><span class="sc0" style="font-family:'맑은 고딕';font-size:10pt;white-space:pre;"> </span><span class="sc9" style="font-family:'맑은 고딕';font-size:10pt;color:#0080ff;white-space:pre;">db</span><span class="sc0" style="font-family:'맑은 고딕';font-size:10pt;white-space:pre;"> </span><span class="sc3" style="font-family:'맑은 고딕';font-size:10pt;color:#808080;white-space:pre;">"Hello, world!"</span><span class="sc4" style="font-family:'맑은 고딕';font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">,</span><span class="sc2" style="font-family:'맑은 고딕';font-size:10pt;color:#ff8000;white-space:pre;">0</span></div> <div><span class="sc2" style="font-family:'맑은 고딕';font-size:10pt;color:#ff8000;white-space:pre;"><br></span></div> <div><font face="맑은 고딕"><span class="sc9" style="font-size:10pt;color:#0080ff;white-space:pre;">section</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">code</span></font></div> <div><font face="맑은 고딕"><span class="sc5" style="font-size:10pt;white-space:pre;"><br></span></font></div> <div><font face="맑은 고딕"><span class="sc5" style="font-size:10pt;white-space:pre;">main</span><span class="sc4" style="font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">:</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">sub</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">rsp</span><span class="sc4" style="font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">,</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc2" style="font-size:10pt;color:#ff8000;white-space:pre;">0x28</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">mov</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">rcx</span><span class="sc4" style="font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">,</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc2" style="font-size:10pt;color:#ff8000;white-space:pre;">0</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">mov</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">rdx</span><span class="sc4" style="font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">,</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">strHello</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">mov</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">r8</span><span class="sc4" style="font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">,</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">strHybrid</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">mov</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">r9</span><span class="sc4" style="font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">,</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc2" style="font-size:10pt;color:#ff8000;white-space:pre;">0</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">call</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">@MessageBoxA</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">mov</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">rcx</span><span class="sc4" style="font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">,</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc2" style="font-size:10pt;color:#ff8000;white-space:pre;">0</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">call</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">@ExitProcess</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">add</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc5" style="font-size:10pt;white-space:pre;">rsp</span><span class="sc4" style="font-size:10pt;color:#000080;font-weight:bold;white-space:pre;">,</span><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc2" style="font-size:10pt;color:#ff8000;white-space:pre;">0x28</span></font></div> <div><font face="맑은 고딕"><span class="sc0" style="font-size:10pt;white-space:pre;"> </span><span class="sc6" style="font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;">ret</span></font> <div><span class="sc6" style="font-family:D2Coding;font-size:10pt;color:#0000ff;font-weight:bold;white-space:pre;"><br></span></div> <div><br></div> <div>Hybrid compiler를 만들 때 Assembler와 Linker는 외부프로그램을 사용하려 했던 계획을 취소하고 Assembler를 개발하고 있습니다.</div> <div>위의 코드는 현재 개발중인 Assembler에서 Assemble이 되는 Hybrid assembler 버전 Hello, world! 입니다.</div> <div><br></div> <div>Hybrid assembler(HASM)와 타 어셈블러와의 차이점은 OS API를 호출하기 위해 정의가 필요하지 않다는 겁니다.</div> <div>위에 보면 strHello, strHybrid는 미리 정의가 되어 있는데 @로 시작하는 변수는 정의가 되어있지 않죠.</div> <div>HASM은 @시작하는 토큰을 OS API로 인식합니다.</div> <div>HASM은 실행시 해쉬테이블에 예약어와 더불어 OS API도 모두 등록하여 API 사용시 해당 API에 필요한 정의를 자동으로 합니다.</div> <div><span style="font-size:9pt;">그 외에 타 어셈블러들에 비해 디테일한 설정을 기본값으로 집어넣어서 더 간결합니다.</span></div> <div><br></div> <div>이제 assembler가 대충 만들어진 만큼 여기다 살을 붙이는 형태로 Hybrid compiler를 만들겁니다.</div> <div>일반적인 compiler는 고급문법과 기계어코드 생성부분이 분리되어 있고 멀티플랫폼 지원을 위해 중간코드를 생성하는데 반해 저는 완전히 역행하는 구조로 compiler를 만드는 것이죠.</div> <div>그 동안 컴파일러들이 사용하기 쉽고 멀티플랫폼을 지원하는 방향으로 발전하면서 손해본 파일크기와 성능을 극대화시키기 위해서입니다.</div> <div>데스크탑 운영체제들 대부분이 x86-64 아키텍처를 지원하기 때문에 내린 결정이기도 하구요.</div></div></div>
이 게시물을 추천한 분들의 목록입니다.
[1] 2016/10/11 14:26:55 110.11.***.174 Pr0g1
353995[2] 2016/10/11 15:18:00 122.44.***.166 fork()
589159[3] 2016/10/11 16:33:56 110.76.***.64 佐倉杏子
655684[4] 2016/10/11 19:24:37 175.223.***.79 정겨울
423595[5] 2016/10/12 03:55:36 125.180.***.177 나이쓰한넘
458806[6] 2016/10/12 16:41:15 182.211.***.111 cobain
273427
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.