!--------------------------------------
! rect.S
! Arithmetic and Logical Instructions
!--------------------------------------

.section ".rodata"

pcLengthPrompt:
	.asciz "Rectangle length:  "

pcWidthPrompt:
	.asciz "Rectangle width:  "

pcScanfFormat:
	.asciz "%d"

pcResult:
	.asciz "The rectangle's perimeter is %d.\n"

!--------------------------------------

.section ".data"

!--------------------------------------

.section ".bss"

	.align 4
piLength:
	.skip 4

	.align 4
piWidth:
	.skip 4

	.align 4
piPerimeter:
	.skip 4

!--------------------------------------

.section ".text"

	.align 4
	.global main

main:

	save	%sp, -96, %sp

	! printf("Rectangle length:  ") ; 
	set	pcLengthPrompt, %o0
	call	printf
	nop

	! scanf("%d", &iLength); 
	set	pcScanfFormat, %o0
	set	piLength, %o1
	call	scanf
	nop

	! printf("Rectangle width:  "); 
	set	pcWidthPrompt, %o0
	call	printf
	nop

	! scanf("%d", &iWidth); 
	set	pcScanfFormat, %o0
	set	piWidth, %o1
	call	scanf
	nop

	! iPerimeter = 2 * (iLength + iWidth);
	set	piLength, %l0
	ld 	[%l0], %l0
	set	piWidth, %l1
	ld 	[%l1], %l1
	add	%l0, %l1, %l2
	sll	%l2, 1, %l2
	set	piPerimeter, %l3
	st 	%l2, [%l3]

	! printf("The rectangle's perimeter is %d.\n", iPerimeter); 
	set	pcResult, %o0
	set	piPerimeter, %o1
	ld 	[%o1], %o1
	call	printf
	nop
	
	! return 0;
	mov	0, %i0
	ret
	restore

