Spring 2001 CSCI 255 Homework 12 Solution

Problem 1 and only

Translate the following worthless function from C to LC-2 assembler. Use Chapter 14 style activation records to transmit parameters.


int *dmbprg(int *X, int *Y) {
  if (Y[2] == Y[3])
    *X = Y[2] ;
  else
    *X = Y[2] + 1 ;
  return X ;
}


;; Activation record for dmbprg
;;
;;   0 -- return value		int *dmbprg
;;   1 -- return address
;;   2 -- dynamic link
;;   3 -- argument 1		int *X
;;   4 -- argument 2		int *Y
;;

	.orig	x3000
dmbprg	str	r7, r6, #1	; store return address
	ldr	r0, r6, #4	; R0 <- Y
	ldr	r1, r0, #2	; R1 <- Y[2]
	ldr	r2, r0, #3	; R2 <- Y[3]
	not	r2, r2
	add	r2, r2, #1
	add	r2, r1, r2	; R2 <- Y[2] - Y[3]
	brz	noadd
	add	r1, r1, #1	; R1 <- Y[2] + 1
noadd	ldr	r0, r6, #3	; R0 <- X
	str	r1, r0, #0	; *X <- R1
	str	r1, r6, #0	; save return value
	ldr	r7, r6, #1	; load return address
	ldr	r6, r6, #2	; load dynamic link
	ret
	.end