What are the contents of the CCR and D3 after the following instructions sequence executes? Perform the calculation by hand and show your work.
MOVE.B #7,D3
CMPI.B
D3 will be unchanged by the CMPI, but of course its low byte will be 7 due to the MOVE. (Thanks to @unwind for pointing this out.)
The instruction set reference will tell you that CMPI works by subtracting the first operand from the second. It also says that the X flag is not affected, and the others are set according to the result as follows:
N: 7-11 < 0, so N=1Z: 7-11 != 0, so Z=0V: 7-11=-4, that's in range for signed numbers, V=0C: 7-11=-4, that is out of range of unsigned numbers, C=1.These are the human versions for the flags, the cpu actually uses bitwise logic:
N: The most significant bit of the result. In 2's complement represenation, negative numbers have the MSB set.Z: Just a bitwise NAND of all the result bits. Z=1 if all bits are zero.V: This one is tricky. V=(-R7)*(-A7)*B7+R7*A7*(-B7), with R7 being the MSB of the result, A7 and B7 the MSB of the two operands. What this means is that you have a signed overflow if subtracting a negative number from a positive gives you negative number, or if subtracting a positive number from a negative gives you positive.C: the final carry of the subtraction, aka. the 9th bit.