; Public Domain FIRSTFIT equ 0 BESTFIT equ 1 LASTFIT equ 2 cpu 8086 org 256 start: mov bp, $ cmp sp, stack.top jb error mov bx, 1000h mov ah, 4Ah int 21h mov bx, -1 mov ah, 48h int 21h mov bp, $ jnc error mov ah, 48h int 21h mov bp, $ jc error cmp bx, 100h mov bp, $ jb error mov word [first], ax mov word [firstsize], bx loop: mov bx, -1 mov ah, 48h int 21h mov bp, $ jnc error mov ah, 48h int 21h mov bp, $ jnc loop %imacro gap 2 mov es, [first] mov bx, [firstsize] sub bx, %2 mov [firstsize], bx mov ah, 4Ah int 21h mov bp, $ jc error mov ax, [first] add ax, bx inc ax mov word [%1], ax mov es, [first] mov bx, [firstsize] sub bx, 2 mov [firstsize], bx mov ah, 4Ah int 21h mov bp, $ jc error mov dx, [first] add dx, bx inc dx mov ax, 5801h mov bx, FIRSTFIT stc int 21h mov ah, 48h mov bx, 1 int 21h cmp ax, dx mov bp, $ jne error %endmacro gap last, 12h gap midlate, 11h gap midearly, 11h gap early, 13h %imacro alloc 2-3 mov ax, 5801h mov bx, %2 int 21h mov bx, 10h mov ah, 48h int 21h mov bp, $ jc error %ifnempty %3 sub ax, %3 %endif cmp ax, word [%1] mov bp, $ jne error mov es, ax mov ah, 49h int 21h mov bp, $ jc error %endmacro alloc early, FIRSTFIT alloc midearly, BESTFIT alloc last, LASTFIT, 1 success: int3 nop mov dx, msg.success mov ah, 09h int 21h mov ax, 5801h mov bx, FIRSTFIT int 21h mov ax, 4C00h int 21h error: int3 mov dx, msg.error.1 mov ah, 09h int 21h xchg ax, bp call disp_ax_hex mov dx, msg.error.2 mov ah, 09h int 21h mov ax, 5801h mov bx, FIRSTFIT int 21h mov ax, 4CFFh int 21h disp_ax_hex: xchg al, ah call .al xchg al, ah .al: push cx mov cl, 4 rol al, cl call .nybble rol al, cl pop cx .nybble: push ax push dx and al, 15 add al, '0' cmp al, '9' jbe .got add al, 7 .got: xchg dx, ax mov ah, 02h int 21h pop dx pop ax retn msg: .success: db "Success",13,10,36 .error.1: db "Error=",36 .error.2: db 13,10,36 absolute $ alignb 2 first: resw 1 firstsize: resw 1 last: resw 1 midlate: resw 1 midearly: resw 1 early: resw 1 alignb 16 stack: resb 512 alignb 2 .top: