Assembly 68000上的CCR

Assembly 68000上的CCR,assembly,68000,Assembly,68000,所以我的一个朋友问了我一个大会问题,他也在努力学习和理解这门语言。他问: 给定以下寄存器值: D0: 364B 421E D1: F3FC 9066 执行指令后: cmp.w D0,D1 CCR中的结果值是什么: N: Z: V: C: 以及是否会发生以下各分支: BLO <Label> Yes or No? BVC <Label> Yes or No? BGE <Label> Yes

所以我的一个朋友问了我一个大会问题,他也在努力学习和理解这门语言。他问:

给定以下寄存器值:

D0: 364B 421E
D1: F3FC 9066
执行指令后:

cmp.w    D0,D1
CCR中的结果值是什么:

N:    Z:    V:    C:
以及是否会发生以下各分支:

BLO    <Label>     Yes or No?

BVC    <Label>     Yes or No?

BGE    <Label>     Yes or No?

BMI    <Label>     Yes or No?

BLT    <Label>     Yes or No?

BCS    <Label>     Yes or No?
BLO是还是否?
BVC是或否?
BGE是或否?
体重指数是还是不是?
BLT是还是不是?
是还是不是?

如果有人能帮助我理解它,那么当我向他解释它时,我就能加深对概念和答案的理解。谢谢。

将概念映射到现代术语可能会有所帮助。C标志对应无符号算术,N和V标志对应有符号算术。Z标志对两者都有效

分支指令在本手册表3-19中有详细说明。请注意,表中有几个输入错误

对于无符号算术,请使用以下分支:

>   BHI
<=  BLS
>=  BCC/BHS
<   BCS/BLO
>=  BGE
<   BLT
>   BGT
<=  BLE

最后是BVS/BVC对。V标志在溢出时设置,这意味着结果的符号位不跟随输入的符号位。例如,从正数减去负数应该总是得到正数。

对于ccr标志,除了溢出和进位之外,大多数都是自解释的,但是根据这一点,您应该能够计算出它们

挂旗 在二进制/整数数学中打开进位标志的规则有两条:

  • 如果两个数字相加导致进位,则设置进位标志 已添加的最高有效位(最左边)中

    1111+0001=0000(进位标志打开)

  • 如果两个数字相减,也会设置进位(借用)标志 需要借用到减去的最高有效(最左边)位

    0000-0001=1111(进位标志打开)

  • 否则,进位标志将关闭(零)。 *0111+0001=1000(进位标志关闭[零]) *1000-0001=0111(进位标志关闭[零])

    在无符号算术中,观察进位标志以检测错误。 在有符号算术中,进位标志告诉您没有什么有趣的事情

    溢出标志 在二进制/整数数学中打开溢出标志的规则有两个:

  • 如果两个数字之和的符号位为off,则产生一个结果数 符号位打开时,“溢出”标志打开

    0100+0100=1000(溢出标志打开)

  • 如果符号位为on的两个数字之和产生一个结果数 关闭符号位后,“溢出”标志打开

    1000+1000=0000(溢出标志打开)

  • 否则,溢出标志将关闭。 *0100+0001=0101(溢出标志关闭) *0110+1001=1111(溢出标志关闭) *1000+0001=1001(溢出标志关闭) *1100+1100=1000(溢出标志关闭)

    请注意,您只需要查看三个符号位中的符号位(最左侧) 决定溢出标志是打开还是关闭的数字

    如果您正在执行2的补码(带符号)运算,则启用溢出标志 意味着答案是错误的-你加了两个正数,得到了一个 负数,或者你加了两个负数,得到一个正数

    如果您正在执行无符号算术,则溢出标志不表示任何内容
    而且应该被忽略。

    哇,这超级棒好像是家庭作业@nycynik我相信这是一份工作表,供他们使用,但我不认为这是为了学分或其他什么,我现在回想起来,我在页面上看到了“练习工作表”,但再次不确定它是否是为了学分。从@Mark Ransom开始,我们已经看到了这一点,这对初学者来说不是很友好,即使在询问其他人时,分支指令的结果也可以很容易地从表3-19中得出。剩下的就是确定CCR标志的值。如何检查溢出标志是否已设置?我会写什么Easy86k代码?
    ==  BEQ
    !=  BNE