33 lines
		
	
	
	
		
			454 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			454 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define .sli2
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
 | 
						|
! Shift 16 bits integer left
 | 
						|
! Expects on stack:	number of shifts
 | 
						|
!			number to be shifted
 | 
						|
! Yields in de-reg:	result
 | 
						|
 | 
						|
.sli2:	pop h
 | 
						|
	shld .retadr
 | 
						|
 | 
						|
	pop d		!de = number of shifts
 | 
						|
	pop h		!hl= number to be shifted
 | 
						|
	mov a,d		!if de>15 return zero
 | 
						|
	ora a
 | 
						|
	jnz 2f
 | 
						|
	mov a,e
 | 
						|
	cpi 16
 | 
						|
	jnc 2f
 | 
						|
1:	dcr e
 | 
						|
	jm 3f
 | 
						|
	dad h
 | 
						|
	jmp 1b
 | 
						|
 | 
						|
2:	lxi h,0
 | 
						|
3:	xchg		!result in de-registers
 | 
						|
 | 
						|
	lhld .retadr
 | 
						|
	pchl
 |