; Hybrid Assembler ; Copyright 2016. asmpro all rights reserved.
format pe_console
section data
strHybrid db "Hybrid",0
strHello db "Hello, world!",0
section code
main:
sub rsp, 0x28
mov rcx, 0
mov rdx, strHello
mov r8, strHybrid
mov r9, 0
call @MessageBoxA
mov rcx, 0
call @ExitProcess
add rsp, 0x28
ret
Hybrid compiler를 만들 때 Assembler와 Linker는 외부프로그램을 사용하려 했던 계획을 취소하고 Assembler를 개발하고 있습니다.
위의 코드는 현재 개발중인 Assembler에서 Assemble이 되는 Hybrid assembler 버전 Hello, world! 입니다.
Hybrid assembler(HASM)와 타 어셈블러와의 차이점은 OS API를 호출하기 위해 정의가 필요하지 않다는 겁니다.
위에 보면 strHello, strHybrid는 미리 정의가 되어 있는데 @로 시작하는 변수는 정의가 되어있지 않죠.
HASM은 @시작하는 토큰을 OS API로 인식합니다.
HASM은 실행시 해쉬테이블에 예약어와 더불어 OS API도 모두 등록하여 API 사용시 해당 API에 필요한 정의를 자동으로 합니다.
그 외에 타 어셈블러들에 비해 디테일한 설정을 기본값으로 집어넣어서 더 간결합니다.
이제 assembler가 대충 만들어진 만큼 여기다 살을 붙이는 형태로 Hybrid compiler를 만들겁니다.
일반적인 compiler는 고급문법과 기계어코드 생성부분이 분리되어 있고 멀티플랫폼 지원을 위해 중간코드를 생성하는데 반해 저는 완전히 역행하는 구조로 compiler를 만드는 것이죠.
그 동안 컴파일러들이 사용하기 쉽고 멀티플랫폼을 지원하는 방향으로 발전하면서 손해본 파일크기와 성능을 극대화시키기 위해서입니다.
데스크탑 운영체제들 대부분이 x86-64 아키텍처를 지원하기 때문에 내린 결정이기도 하구요.