mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-12-21 09:19:31 +08: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
|
||
|
|