Page 1 of 1

in wich modes ROR overwrites original data?

Posted: Thu Aug 19, 2010 8:33 pm
by ehguacho
...that's what i'm wondering now while looking at the ROR behavior.

e.g.: ROR Accumulator:

Code: Select all

byte src; // just an unsigned 8-bit number

src = (ACC >> 1); // store the rotation temporary
if(C_FLAG) src |= 0x80; // if C was set, then set the #7 bit of the rotation's result
C_FLAG = ACC & 0x1;
Z_FLAG = !(src);
N_FLAG = !!(src & 0x80);
but it's only that? or i'm missing the...:

Code: Select all

ACC = src;
...final line?

in that case, flags are setted/reseted relying on the accumulator's (or whatever the source is) final value? or is it correct to change the flags BEFORE the original data gets overwriten?

Posted: Sat Aug 21, 2010 6:04 pm
by dclxvi
Yes, you need the ACC=src line. With that line, it looks correct. The N and Z flags are always based on the final value (for any instruction that affects them), not the original value. For other addressing modes, you would read and write to the appropriate memory location rather than the accumulator, of course.

Posted: Sat Aug 21, 2010 9:31 pm
by ehguacho
...so it means that the instruction DO overwrite the original data, even in all the others addressing modes.

thanks a lot mate! :wink: