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
addshiddenright 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.