71 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define .cmi4
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
 | 
						|
! Compare 32 bits integers
 | 
						|
! Expects:	operands on stack
 | 
						|
!		a-register = 1 for signed integers
 | 
						|
!		a-register = 0 for unsigned integers
 | 
						|
! Yields in de-registers: -1 if second operand < first operand
 | 
						|
!			   0 if second operand = first operand
 | 
						|
!			   1 if second operand > first operand
 | 
						|
 | 
						|
.cmi4:	pop h
 | 
						|
	shld .retadr
 | 
						|
	mov h,b
 | 
						|
	mov l,c
 | 
						|
	shld .bcreg
 | 
						|
 | 
						|
	lxi b,4
 | 
						|
	lxi h,0
 | 
						|
	dad sp
 | 
						|
	dad b
 | 
						|
	dcx h
 | 
						|
	mov d,h
 | 
						|
	mov e,l		!now de points to the first operand
 | 
						|
	dad b		!and hl to the second
 | 
						|
	ora a		!is it a cmi or cmu?
 | 
						|
	jz 1f
 | 
						|
 | 
						|
!for cmi only:
 | 
						|
	mov a,m
 | 
						|
	ral
 | 
						|
	jnc 2f
 | 
						|
	ldax d		!second operand is negative
 | 
						|
	ral
 | 
						|
	jc 1f		!jump if both operands are negative
 | 
						|
	lxi d,-1	!second operand is smaller
 | 
						|
	jmp 4f
 | 
						|
2:	ldax d		!second operand is positive
 | 
						|
	ral
 | 
						|
	jnc 1f		!jump if both operand are positive
 | 
						|
	lxi d,1		!second operand is larger
 | 
						|
	jmp 4f
 | 
						|
 | 
						|
!cmi and cmu rejoin here
 | 
						|
1:	ldax d
 | 
						|
	cmp m
 | 
						|
	jz 3f
 | 
						|
	jnc 2f
 | 
						|
	lxi d,1		!second operand is larger
 | 
						|
	jmp 4f
 | 
						|
2:	lxi d,-1	!second operand is smaller
 | 
						|
	jmp 4f
 | 
						|
3:	dcx d
 | 
						|
	dcx h
 | 
						|
	dcr c
 | 
						|
	jnz 1b
 | 
						|
	lxi d,0		!operands are equal
 | 
						|
 | 
						|
4:	lxi h,8
 | 
						|
	dad sp
 | 
						|
	sphl
 | 
						|
 | 
						|
	lhld .bcreg
 | 
						|
	mov b,h
 | 
						|
	mov c,l
 | 
						|
	lhld .retadr
 | 
						|
	pchl
 |