52 lines
		
	
	
	
		
			570 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			570 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define .ror4
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
 | 
						|
! Rotate 4 bytes right
 | 
						|
! Expects in de-reg:	number of rotates
 | 
						|
! Expects on stack:	operand
 | 
						|
! Yields on stack:	result
 | 
						|
 | 
						|
.ror4:	pop h
 | 
						|
	shld .retadr
 | 
						|
	mov h,b
 | 
						|
	mov l,c
 | 
						|
	shld .bcreg
 | 
						|
 | 
						|
	pop h		! low-order bytes of operand
 | 
						|
	pop b		! high order bytes of operand
 | 
						|
 | 
						|
	mov a,e
 | 
						|
	ani 31
 | 
						|
	jz 2f
 | 
						|
	mov e,a
 | 
						|
 | 
						|
	mov a,l
 | 
						|
	rar
 | 
						|
1:	mov a,b
 | 
						|
	rar
 | 
						|
	mov b,a
 | 
						|
	mov a,c
 | 
						|
	rar
 | 
						|
	mov c,a
 | 
						|
	mov a,h
 | 
						|
	rar
 | 
						|
	mov h,a
 | 
						|
	mov a,l
 | 
						|
	rar
 | 
						|
	mov l,a
 | 
						|
 | 
						|
	dcr e
 | 
						|
	jnz 1b		! keep looping
 | 
						|
 | 
						|
2:	push b
 | 
						|
	push h
 | 
						|
 | 
						|
	lhld .bcreg
 | 
						|
	mov b,h
 | 
						|
	mov c,l
 | 
						|
	lhld .retadr
 | 
						|
	pchl
 |