5.2 · exercise

The overflow detective

A 32-bit add can go wrong in two different ways, and the flags record both:

  • V (overflow) is set when the answer does not fit as a signed number: two positives giving a negative, or two negatives giving a positive.
  • C (carry) is set when the answer does not fit as an unsigned number: a 1 carried out of bit 31.

The starter reads two integers into left_r and right_r and prints the report. Add them into sum_r with adds, which sets the flags (a plain add does not). Then point ovf_r at str_yes when V is set, and carry_r at str_yes when C is set. The conditions vs and vc test V; cs and cc test C. Keep the add in w registers: the same numbers added in x registers would never overflow.

With the sample input 2147483647 1 the program prints 2147483647 + 1 = -2147483648 (overflow: yes, carry: no).

What is checked

  • the report for the sample input
  • the program exits cleanly
  • the sum comes from adds
  • the right report for other pairs, including 0 + 0, two negatives, and a pair that sets both flags

specification

stdin2147483647 1
stdoutprints the right output
exitexits with the right code
sourceuses adds
hiddenright output and exit code on 6 more inputs you do not see

We run your program on the input above and on the hidden ones, and compare what it does. Nothing is matched against a stored solution.

loading editor...

regfile

N clearZ clearC clearV clear

x0–x30 are the integer registers.

X0arg00x0000000000000000
X1arg10x0000000000000000
X2arg20x0000000000000000
X3arg30x0000000000000000
X4arg40x0000000000000000
X5arg50x0000000000000000
X6arg60x0000000000000000
X7arg70x0000000000000000
X8ind0x0000000000000000
X90x0000000000000000
X100x0000000000000000
X110x0000000000000000
X120x0000000000000000
X130x0000000000000000
X140x0000000000000000
X150x0000000000000000
X16ip00x0000000000000000
X17ip10x0000000000000000
X18pr0x0000000000000000
X190x0000000000000000
X200x0000000000000000
X210x0000000000000000
X220x0000000000000000
X230x0000000000000000
X240x0000000000000000
X250x0000000000000000
X260x0000000000000000
X270x0000000000000000
X280x0000000000000000
X29fp0x0000000000000000
X30lr0x0000000000000000
SP0x0000000080000000
PC0x0000000000400000
console

Output prints here as your program runs.

Press step or run under the editor, or feed stdin from the box below.

not assembled

Open in playground