게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
FastASM 개발상황
게시물ID : programmer_12698짧은주소 복사하기
작성자 : 중용자
추천 : 6
조회수 : 948회
댓글수 : 16개
등록시간 : 2015/08/12 20:29:01
include "%FastASM%\Init.inc"
GUI

__Const DEBUG   = True
;___________________________________________________________________________________________________

include "%FastASM%\FastASM.inc"
include "MainForm.inc"

Dim As Integer     = 400
Dim As Integer     = 100, 200
Dim 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 개발을 병행해 나갈 생각입니다.
출처 본인
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호