include "%FastASM%\Init.inc"
GUI
__Const DEBUG = True
;___________________________________________________________________________________________________
include "%FastASM%\FastASM.inc"
include "MainForm.inc"
Dim C As Integer = 400
Dim D As Integer = 100, 200
Dim E As String = "Test", " Test2"
Dim F(2) As Integer
;___________________________________________________________________________________________________
include "%FastASM%\FastASM.asm"
include "MainForm.asm"
;___________________________________________________________________________________________________
Main
Dimension
Dim .EBX As ebx
Dim .ECX As ecx
Dim .EDX As edx
Dim .Loop As esi
Dim .A(3) As Integer
Dim .B As Integer
EndDim
Let .EBX = 7
Let .EBX %= 4
Debug.Print ".EBX: %d" , .EBX
Select .EBX
Case 2
Debug.Print ".EBX: 2"
Case 4
Debug.Print ".EBX: 4"
CaseElse
Debug.Print ".EBX: Not found"
EndSelect
Let .ECX = C(0) Mod 256
Debug.Print ".ECX: %d" , .ECX
Let .EDX = 10
Debug.Print ".EDX: %d" , .EDX
If .A(0) <> .EBX Then .A(0) = .ECX
Debug.Print ".A(0): %d" , .A(0)
Let .Loop = 2
Let .A(.Loop) = .EBX Or 5
Debug.Print ".A(%d): %d" , .Loop, .A(.Loop)
Let .B(0) = .A(.Loop) ** D(0)
Debug.Print ".B(0): %d" , .B(0)
Debug.Print "C(0): %d" , C(0)
Let .EDX = AddressOf D
For .Loop = 0 To 1
Debug.Print "D(%d): %d" , .Loop, .EDX(.Loop)
Next
Debug.Print "E: %s" , E
Let F(0) = Neg .ECX
Let F(1) = 5
For Each .Loop In F
Debug.Print "F(%d): %d" , .Loop, F(.Loop)
Next
EndMain
FASM을 기반으로 매크로와 라이브러리를 이용한 언어를 만드는 프로젝트를 FastASM으로 명명했습니다.
특징은 Visual Basic과 유사한 문법을 사용하는 어셈블리 언어로 어셈블리로 직접 개발하는 것과 동일한 실행파일을 생성합니다.
한마디로 어셈블리 언어와 동일한 속도와 파일크기를 생성하면서 생산성만 높이는 프로젝트 입니다.
기존의 어셈블리 코드와 100% 호환되기 때문에 Flat 어셈블러로 제작된 코드는 그대로 사용가능 합니다.
현재 변수 타입, 조건문, 반복문, 구조체, 클래스 등을 구현하고 있는 중으로 위는 구현된 기능중 일부를 테스트하는 코드입니다.
FastASM은 모든 변수를 배열로 접근할 수 있습니다.
배열이 아닌 변수명을 사용하면 해당 변수의 주소값이 되기 때문에 배열이 아닌 변수의 경우 A(0)으로 사용하는 것이죠.
스트링의 경우도 배열을 사용하면 개별 문자로 접근할 수 있습니다.
심지어 레지스터 조차 AddressOf 문을 이용하여 변수를 대입해 주면 해당 변수의 배열을 사용할 수 있습니다.
Let .EDX = AddressOf D
For .Loop = 0 To 1
Debug.Print "D(%d): %d" , .Loop, .EDX(.Loop)
Next
그외에는 비베와 비슷한 문법을 사용하나 비베보다는 훨씬 제한된 문법을 사용합니다.
성능하락 요소가 있는 문법은 배제했기 때문이죠.
컴파일러들이 최적화를 지원하듯이 최적화 또한 지원합니다.
나누기, 곱하기, 나머지 등의 연산은 CPU 사이클을 가장 적게 사용할 수 있는 방식으로 풀어서 코드를 생성하고 변수에 값을 대입하는 방법 또한 최소 사이즈 코드 또는 가장 빠른 코드로 코드를 생성합니다.
클래스는 장고 끝에 상속을 지원하지 않기로 했지만 알다시피 C로도 객체지향 프로그래밍이 가능하듯이 필요시에 상속을 직접 구현하면 됩니다.
Private, Public, Static 등은 일단 초기버전에서는 지원하지 않지만 구현이 어렵지는 않은 관계로 나중에 지원하게 될지도 모르겠습니다.
구조체와 클래스 지원을 구현하고 나면 IDE 개발과 FastASM 개발을 병행해 나갈 생각입니다.