81 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			1.1 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
 | |
| .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
 | |
| 	push	ax
 | |
| 	call	__exit
 | |
| .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:
 |