mirror of
				https://github.com/netwide-assembler/nasm.git
				synced 2025-10-10 00:25:06 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ; -*- 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 <whygee_corp@hol.fr>
 | |
| 
 | |
| 
 | |
| 
 | |
| %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
 | |
| 
 |