ack/mach/xenix3/libsys/head_em.s
1992-06-30 15:51:31 +00:00

88 lines
1.2 KiB
ArmAsm

.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: