Creative Commons License Foxbond's Repo

.data  ; (c) 2016 Michał (Foxbond) Chraniuk

		;*** Data for Read-Trap
ReadBuffer:	.space		80
ReadPar:	.word		0,ReadBuffer,80

		;*** Data for Printf-Trap
PrintfPar:	.space		4

SaveR2:		.space		4
SaveR3:		.space		4
SaveR4:		.space		4
SaveR5:		.space		4
SaveR6:		.space		4


		.text

		.global		czytaj
czytaj:	
		;*** save register contents
		sw		SaveR2,r2
		sw		SaveR3,r3
		sw		SaveR4,r4
		sw		SaveR5,r5
		sw		SaveR6,r6

		;*** Prompt
		sw		PrintfPar,r1
		addi		r14,r0,PrintfPar
		trap		5

		;*** call Trap-3 to read line
		addi		r14,r0,ReadPar
		trap		3

		;*** determine value
		addi		r2,r0,ReadBuffer
		addi		r1,r0,0
		addi		r4,r0,10	;Decimal system

						;sprawdzanie znaku
		addi		r6,r0,#0;
		lb		r3,0(r2)
		seqi		r5,r3,#43	;+
		bnez		r5,plus
		seqi		r5,r3,#45	;-
		bnez		r5,minus
		j		Loop
	plus:	addi		r2,r2,1
		j		Loop
	minus:	addi		r6,r0,#1
		addi		r2,r2,#1

Loop:		;*** reads digits to end of line
		lbu		r3,0(r2)
		seqi		r5,r3,10	;LF -> Exit
		bnez		r5,Finish
		subi		r3,r3,48	;´0´
		multu		r1,r1,r4	;Shift decimal
		add		r1,r1,r3
		addi		r2,r2,1 	;increment pointer
		j		Loop
		
Finish: 	beqz		r6,norm
		sub		r1,r0,r1		

		;*** restore old register contents		
	norm:	lw		r2,SaveR2
		lw		r3,SaveR3
		lw		r4,SaveR4
		lw		r5,SaveR5
		lw		r6,SaveR6
		jr		r31		; Return

> Back