CCR on the 68000

不打扰是莪最后的温柔 提交于 2019-12-04 17:55:24

It may help to map the concepts to modern-day terms. The C flag corresponds to unsigned arithmetic and the N and V flags correspond to signed arithmetic. The Z flag is valid for both.

The branch instructions are fully spelled out in table 3-19 of the M68000 Programmer's Reference Manual. Note that there are a couple of typos in the table.

For unsigned arithmetic use the following branches:

>   BHI
<=  BLS
>=  BCC/BHS
<   BCS/BLO

For signed arithmetic use the following branches:

>=  BGE
<   BLT
>   BGT
<=  BLE

And these work for both:

==  BEQ
!=  BNE

Finally there's the BVS/BVC pair. The V flag is set when there's overflow, meaning the sign bit of the result doesn't follow from the sign bits of the inputs. Subtracting a negative number from a positive number should always result in a positive number for example.

with the ccr flags most are self explanitory except overflow and carry but, according to this http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt you should be able to figure them out

Carry Flag

The rules for turning on the carry flag in binary/integer math are two:

  1. The carry flag is set if the addition of two numbers causes a carry out of the most significant (leftmost) bits added.

    1111 + 0001 = 0000 (carry flag is turned on)

  2. The carry (borrow) flag is also set if the subtraction of two numbers requires a borrow into the most significant (leftmost) bits subtracted.

    0000 - 0001 = 1111 (carry flag is turned on)

Otherwise, the carry flag is turned off (zero). * 0111 + 0001 = 1000 (carry flag is turned off [zero]) * 1000 - 0001 = 0111 (carry flag is turned off [zero])

In unsigned arithmetic, watch the carry flag to detect errors. In signed arithmetic, the carry flag tells you nothing interesting.

Overflow Flag

The rules for turning on the overflow flag in binary/integer math are two:

  1. If the sum of two numbers with the sign bits off yields a result number with the sign bit on, the "overflow" flag is turned on.

    0100 + 0100 = 1000 (overflow flag is turned on)

  2. If the sum of two numbers with the sign bits on yields a result number with the sign bit off, the "overflow" flag is turned on.

    1000 + 1000 = 0000 (overflow flag is turned on)

Otherwise, the overflow flag is turned off. * 0100 + 0001 = 0101 (overflow flag is turned off) * 0110 + 1001 = 1111 (overflow flag is turned off) * 1000 + 0001 = 1001 (overflow flag is turned off) * 1100 + 1100 = 1000 (overflow flag is turned off)

Note that you only need to look at the sign bits (leftmost) of the three numbers to decide if the overflow flag is turned on or off.

If you are doing two's complement (signed) arithmetic, overflow flag on means the answer is wrong - you added two positive numbers and got a negative, or you added two negative numbers and got a positive.

If you are doing unsigned arithmetic, the overflow flag means nothing and should be ignored.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!