www.pudn.com > nasm-0.98.zip > exebin.mac


; -*- nasm -*- 
; NASM macro file to allow the `bin' output format to generate 
; simple .EXE files by constructing the EXE header by hand. 
; Adapted from a contribution by Yann Guidon  
 
%define EXE_stack_size EXE_realstacksize 
 
%macro EXE_begin 0 
	  ORG 0E0h 
	  section .text 
 
header_start: 
	  db 4Dh,5Ah		; EXE file signature 
	  dw EXE_allocsize % 512 
	  dw (EXE_allocsize + 511) / 512 
	  dw 0			; relocation information: none 
	  dw (header_end-header_start)/16 ; header size in paragraphs 
	  dw (EXE_absssize + EXE_realstacksize) / 16 ; min extra mem 
	  dw (EXE_absssize + EXE_realstacksize) / 16 ; max extra mem 
	  dw -10h		; Initial SS (before fixup) 
	  dw EXE_endbss + EXE_realstacksize ; Initial SP (1K DPMI+1K STACK) 
	  dw 0			; (no) Checksum 
	  dw 100h		; Initial IP - start just after the header 
	  dw -10h		; Initial CS (before fixup) 
	  dw 0			; file offset to relocation table: none 
	  dw 0			; (no overlay) 
	  align 16,db 0 
header_end: 
 
EXE_startcode: 
	  section .data 
EXE_startdata: 
	  section .bss 
EXE_startbss: 
%endmacro 
 
%macro EXE_stack 1 
EXE_realstacksize equ %1 
%define EXE_stack_size EXE_bogusstacksize ; defeat EQU in EXE_end 
%endmacro 
 
%macro EXE_end 0 
	  section .text 
EXE_endcode: 
	  section .data 
EXE_enddata: 
	  section .bss 
	  alignb 4 
EXE_endbss: 
 
EXE_acodesize equ (EXE_endcode-EXE_startcode+3) & (~3) 
EXE_datasize equ EXE_enddata-EXE_startdata 
EXE_absssize equ (EXE_endbss-EXE_startbss+3) & (~3) 
EXE_allocsize equ EXE_acodesize + EXE_datasize 
 
EXE_stack_size equ 0x800	; default if nothing else was used 
%endmacro