Initial commit
This commit is contained in:
		
							
								
								
									
										120
									
								
								lab-dbg/RTE/Hesso_pack/asmcalls.s
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								lab-dbg/RTE/Hesso_pack/asmcalls.s
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| ;/****************************************************************************** | ||||
| ; * file:	 	for_asm_calls.S | ||||
| ; * function:	save and restore scratch registers | ||||
| ; * ---------------------------------------------------------------------------- | ||||
| ; * comments:	These calls are used in the first assembler laboratories | ||||
| ; * 				to hide the scratch register usage | ||||
| ; *****************************************************************************/ | ||||
| 	EXPORT decOut | ||||
| 	EXPORT strOut | ||||
| 	EXPORT decIn | ||||
| 	EXPORT strIn | ||||
| 	IMPORT printf | ||||
| 	IMPORT scanf | ||||
| 	IMPORT getchar | ||||
|  | ||||
| 	AREA    |.text|, CODE, READONLY | ||||
|  | ||||
|  | ||||
| ;/****************************************************************************** | ||||
| ; * name:	 	decOut | ||||
| ; * function:	display a decimal value on the debug terminal | ||||
| ; * ---------------------------------------------------------------------------- | ||||
| ; * parameters:	r0 - the value to display | ||||
| ; * | ||||
| ; * comments:	use USE_STDIO_NOBUF 1 in config.h to print direclty the value | ||||
| ; * 				on the serial port | ||||
| ; *****************************************************************************/ | ||||
| decOut | ||||
| 	push	{r0-r3,ip,lr} | ||||
| 	mov		r1,r0 | ||||
| 	ldr		r0,=strDecOut | ||||
| 	bl		printf | ||||
| 	pop		{r0-r3,ip,pc} | ||||
|  | ||||
|  | ||||
| ;/****************************************************************************** | ||||
| ; * name:	 	strOut | ||||
| ; * function:	display a string on the debug terminal | ||||
| ; * 				The string has to finish with a NULL character | ||||
| ; * ---------------------------------------------------------------------------- | ||||
| ; * parameters:	r0 - the string pointer | ||||
| ; * | ||||
| ; * comments:	use USE_STDIO_NOBUF 1 in config.h to print direclty the value | ||||
| ; * 				on the serial port | ||||
| ; *****************************************************************************/ | ||||
| strOut | ||||
| 	push	{r0-r3,ip,lr} | ||||
| 	mov		r1,r0 | ||||
| 	ldr		r0,=strStrOut | ||||
| 	bl		printf | ||||
| 	pop		{r0-r3,ip,pc} | ||||
|  | ||||
| ;/****************************************************************************** | ||||
| ; * name:	 	decIn | ||||
| ; * function:	read a decimal value on the debug terminal | ||||
| ; * 				The value ends with a CR (as standard scanf) | ||||
| ; * ---------------------------------------------------------------------------- | ||||
| ; * parameters:	- | ||||
| ; * | ||||
| ; * return:		r0 - the readed value | ||||
| ; * | ||||
| ; * comments:	use USE_STDIO_ECHO 1 in config.h to have an echo | ||||
| ; * 				on the serial port when typing | ||||
| ; *****************************************************************************/ | ||||
| decIn | ||||
| 	push	{r1-r4,ip,lr} | ||||
| 	ldr		r0,=strDecIn | ||||
| 	ldr		r1,=readVal | ||||
| 	bl		scanf | ||||
| 	bl      getchar			; flush CR | ||||
| 	ldr		r1,=readVal | ||||
| 	ldr		r0,[r1] | ||||
| 	pop		{r1-r4,ip,pc} | ||||
|  | ||||
|  | ||||
| ;/****************************************************************************** | ||||
| ; * name:	 	strIn | ||||
| ; * function:	reads a string on the debug terminal | ||||
| ; * 				The string ends with a CR | ||||
| ; * ---------------------------------------------------------------------------- | ||||
| ; * parameters:	r0 - the string pointer | ||||
| ; *				r1 - length max | ||||
| ; * | ||||
| ; * comments:	use USE_STDIO_ECHO 1 in config.h to have an echo | ||||
| ; * 				on the serial port when typing | ||||
| ; *****************************************************************************/ | ||||
| strIn | ||||
| 	push	{r0-r5,ip,lr} | ||||
| 	mov		r4,r1 | ||||
| 	mov		r5,r0 | ||||
| loopStrIn | ||||
| 	mov		r1,r5 | ||||
| 	bl		getchar | ||||
| 	cmp		r0,#0x0D | ||||
| 	beq		replaceCrStrIn | ||||
| 	strb    r0,[r5] | ||||
| 	sub		r4,r4,#1 | ||||
| 	cmp		r4,#0 | ||||
| 	beq		endNull | ||||
| 	add		r5,r5,#1 | ||||
| 	b		loopStrIn | ||||
| replaceCrStrIn | ||||
| 	mov		r0,#0 | ||||
| 	strb	r0,[r5] | ||||
| 	pop		{r0-r5,ip,pc} | ||||
| endNull | ||||
| 	mov		r1,#0 | ||||
| 	strb	r1,[r5,#1] | ||||
| 	pop		{r0-r5,ip,pc} | ||||
|  | ||||
| ;/* strings for printf and scanf usage		*/ | ||||
| strDecOut		DCB	"%ld",0 | ||||
| strDecIn		DCB	"%ld",0 | ||||
| strStrOut		DCB	"%s",0,0 | ||||
|  | ||||
| 	AREA  |.data|, DATA, READWRITE, ALIGN=4 | ||||
| readVal		DCD	0		;/* one word byte for read	*/ | ||||
|  | ||||
| 	END | ||||
| 		 | ||||
		Reference in New Issue
	
	Block a user