Page 1
Question 1
- full credit for
nop
Question 2
- full credit for mentioning condition codes
- half credit for
nop
- none for incorrect statements
Page 2
Questions 3–6
- Full credit for getting the right answer.
- Partial for one of
- having one extra modification
- missing the modification
- having the wrong value in the correct register
- having the wrong register with the correct value
- No credit if have two or more of above problems
extraneous %, 0x, etc OK.
Correct answers:
- Q3
- RDX = 0x100000009 (half for the 32-bit register answer 0x9)
- Q4
- RSP = 28 (also accept 22)
- Q5
- none (condition codes are not program registers)
- Q6
- accept RSI = 1110 or RSI = 11110
Page 3
Question 7
This code (a) changes %rsp
and (b) jumps to flub
. Hence,
- Full credit for C or H
- Half credit for G or I
- No credit for the other options
Question 8
- full credit for
4
- half credit for
6
Question 9
- full for
16
, half for12
Question 10
- full for
our
Page 4
The following errors are in the code:
- Line 1 does nothing (i.e., unused thereafter)
- Line 12 uses wrong sizeof
- Line 21 should be
*array
not*ans
- Line pair (12, 23) constitute a memory leak
Question 11
- full for
22
- half for any other not-in-loop before-return line (12 through 15)
Question 12
- full for
ans
Question 13
- blank 1: 18; this is subtle enough, full credit for none as well
- blank 2: none
- blank 3: 13, 18, 19
- blank 4: none
- blank 5: none
- blank 6: 12
Page 5
Question 14
An example correct solution:
int i = 0;
loop:
if (i >= n) goto end;
if (i % x == 0) y *= i;
if (i % x != 0) z += 1;
i += 1;
goto loop;
end:
The if/else can be done as either of
if (i % x == 0) y *= i;
if (i % x != 0) z += 1;
or
if (i % x == 0) goto ifcase;
z += 1;
goto endif
ifcase:
y *= i;
endif:
And the loop can be done as either of
int i = 0;
loop:
if (i >= n) goto end;
// if goes here
i += 1;
goto loop;
end:
or
int i = 0;
goto guard;
loop:
// if goes here
i += 1;
guard:
if (i < n) goto loop;
Page 6
Question 15
- Should comment freeing
a
,b
, andd
(half if one left, 0 if all); - Should not comment freeing
c
(all or nothing)
Question 16
- Full of L, half for R
Question 17
- Full of R, half for C
Question 18
- Full of C