.sect .text; .sect .rom; .sect .data; .sect .bss .define begtext,begdata,begbss,syscal .define hol0,.reghp,.limhp,.trppc,.ignmask .define ERANGE,ESET,EHEAP,ECASE,EILLINS,EIDIVZ,EODDZ .define EXIT,BRK .extern endbss ERANGE = 1 ESET = 2 EIDIVZ = 6 EHEAP = 17 EILLINS = 18 EODDZ = 19 ECASE = 20 .sect .text .data1 0353 .data1 0176 ! jmp to begtext in 2 bytes. Assembler generates 3 ! bytes. syscal: jmp 1f grow: jmp 2f jmp 2f .data2 -277, -277, -277, -277, -277, -277 2: mov ax,2088 1: int 5 jmp 1f .space 100 1: ret begtext: mov bx,sp mov cx,(bx) add bx,2 mov ax,cx inc ax shl ax,1 add ax,bx push ax push bx push cx xor bp,bp mov bx,endbss mov cx,9 add bx,1024 shr bx,cl shl bx,cl call grow xor cx,cx push cx call __sbrk mov (.limhp),ax mov (.reghp),ax ! on Xenix, heap begins above stack! pop ax call __m_a_i_n EXIT: push ax call __exit BRK: jmp __brk .sect .data begdata: hol0: .data2 0,0 .data2 0,0 argv: .data2 3f envp: .data2 0 3: .asciz "PROGRAM" .reghp: .data2 endbss .limhp: .data2 endbss .ignmask: .data2 0 .trppc: .data2 0 .sect .bss begbss: