flat assembler
Message board for the users of flat assembler.
 Home   FAQ   Search   Register 
 Profile   Log in to check your private messages   Log in 
flat assembler > Programming Language Design > [FASMG] Minimal Intel Windows

Author
Thread Post new topic Reply to topic
codestar



Joined: 25 Dec 2014
Posts: 254
[FASMG] Minimal Intel Windows
Standalone .EXE example. 1K.

SYSTEM.INC

Code:
; SYSTEM.INC - INTEL, WINDOWS

macro align n
  db ((n-1)-($+n-1mod ndup(0)
end macro

;;;;;;;;;;;;;;;;;;;;;; CPU ;;;;;;;;;;;;;;;;;;;;;;;

eax=0
ecx=1
edx=2
ebx=3

macro int3
  db $CC
end macro

macro push_r r
  db $50+r
end macro

macro push_i i
  db $68
  dd i
end macro

macro mov_ri ri
  db $B8+r
  dd i
end macro

macro call_p a
  db $FF$15
  dd a
end macro

;;;;;;;;;;;;;;;;;;;;; SYSTEM ;;;;;;;;;;;;;;;;;;;;;

@rva equ ($1000-$200)
@base equ $400000+@rva

@entry=$1000+(@main-@section)
@section_size=@end_section-@section
@image_size =\
  ((($1000+@section_sizeshr 12)+1shl 12
@import_size=@end_import-@section

macro write_exe_header
  dw 'MZ'
  db $3A dup(0)
  dd $40
  db 'PE'00
  dd $1014C000$10F00E0$10B000
  dd @entry00$400000$1000$200
  dd 1040@image_size$20002
  dd $1000$1000$10000016
  dd 00$1000@import_size
  dq 14 dup(0)
end macro

macro write_section_header
  dq '.one'
  dd @end_program-@end_section$1000
  dd @end_program-$200$200000
  dd $0E0000020
end macro

macro library p&     ; import library
  irp dllp
    dd 000
    dd @rva+dll#_name@rva+dll#_table
  end irp
  dd 00000
end macro

macro import dllp; import functions
  dll#_name db \     ; 'name.dll'
    `dll'.DLL'0
  dll#_table:        ; table
  irp namep        ; import rvas
    label name \
      at @base+$
    dd @rva+_#name
  end irp
  dd 0
  irp namep        ; import names
    _#name dw 0      ; ordinal=0
    db `name0      ; 'name'
  end irp
end macro

write_exe_header
write_section_header

align $200
@section:
  library KERNEL32USER32
  import KERNEL32ExitProcess
  import USER32MessageBoxA
@end_import:
align 16

macro main
  align 16
  @main:
end macro

postpone
  align 16
  @end_section:
    align $200
  @end_program:
end postpone

;;;;;;;;;;;;;;;;;;; LANGUAGE ;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;; CONSTANTS ;;;;;;;;;;;;;;;;;;;;

; numeric BLACK, WHITE=1, RED, GREEN, BLUE

macro numeric p&
  local i
  i=0
  irp qp
    match name==valueq
      i=value
      name=i
    else match nameq
      name=i
    end match
    i=i+1
  end irp
end macro

;;;;;;;;;;;;;;;;;;;; VARIABLE ;;;;;;;;;;;;;;;;;;;;

; int i=7, n='Z', j=$CAFEBABE

scope=0

macro variable typep&
  irp qp
    match name==valueq
      label name at @base+$
      type value
    else match nameq
      label name at @base+$
      type 0
    end match
  end irp
end macro

macro byte p&
  variable dbp
end macro

macro int p&
  irp qp
    match name[]==valuesq
      match {v}, values
        label name at @base+$
        dd v
      else
        err 'Use: ={...}'
      end match
    else match name[size], q
      label name at @base+$
      dd size dup(0)
    else
      variable ddq
    end match
  end irp
end macro

macro integer p&
  int p
end macro

macro void p&
  int p
end macro

macro text p&
  irp qp
    match name==valueq
      label name at @base+$
      db value0
    else match name[size], q
      label name at @base+$
      db size dup(0)
    else
      err ''
    end match
  end irp
end macro

;;;;;;;;;;;;;;;;;;;;; CLASS ;;;;;;;;;;;;;;;;;;;;;;

macro class type
  esc macro type name
    scope='c'
    name:
    namespace name
      ; ...
end macro

macro endc!
      ; ...
    end namespace
    scope=0
  esc end macro
end macro

; EXAMPLE:

; class POINT
;   int x, y
; endc

; POINT point

; 2-DO: single-line classes:

; class RGB   = byte a, r, g, b
; class POINT = int x, y
; class LINE  = POINT a, b
; class BOX   = int x, y, w, h
; class RECT  = int l, t, r, b

EXAMPLE.ASM

Code:
; EXAMPLE.ASM > .EXE. ONLY 1K

include 'system.inc'

text title='Hello, FASMG!'
text caption='Minimal Win32 Example'

main
  push_i 0
  mov_ri eaxtitle
  push_r eax
  mov_ri eaxcaption
  push_r eax
  push_i 0
  call_p MessageBoxA
  push_i 0
  call_p ExitProcess



Description:
Download
Filename: windowsg.zip
Filesize: 2.55 KB
Downloaded: 60 Time(s)

Post 15 May 2015, 07:35
View user's profile Send private message Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >

Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001-2005 phpBB Group.

Main index   Download   Documentation   Examples   Message board
Copyright © 2004-2016, Tomasz Grysztar.