【问题标题】:CCR on the 6800068000 上的 CCR
【发布时间】:2023-03-27 00:35:01
【问题描述】:

因此,一位也在努力学习和理解该语言的朋友向我提出了一个汇编问题。他问:

给定以下寄存器值:

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?

谁能帮助我理解它,当我向他解释时,我可以加深我对这个概念和答案的理解。谢谢。

【问题讨论】:

  • 哇,这个超级看起来像家庭作业。 68k.hax.com/CMP
  • @nycynik 我相信这是他们工作的工作表,但我不相信这是为了信用或任何东西,我现在记得但又在页面上看到了“练习工作表”不知道是不是为了信用。
  • @Mark Ransom 我们已经看过了,这对初学者不太友好,即使是在询问其他人时
  • 分支指令的结果可以很容易地从表3-19推导出来。剩下的就是确定 CCR 标志的值。

标签: assembly 68000


【解决方案1】:

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

分支指令在M68000 Programmer's Reference Manual 的表 3-19 中有完整的说明。请注意,表格中有几个拼写错误。

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

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

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

>=  BGE
<   BLT
>   BGT
<=  BLE

这些对两者都有效:

==  BEQ
!=  BNE

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

【讨论】:

    【解决方案2】:

    除了溢出和进位之外,大多数 ccr 标志都是自我解释的,但是根据http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt,您应该能够弄清楚它们

    携带标志

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

    1. 如果两个数字相加导致进位,则设置进位标志 添加的最重要(最左边)位中。

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

    2. 如果两个数字相减,也会设置进位(借位)标志 需要借位到减去的最重要(最左边)位。

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

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

    在无符号算术中,观察进位标志以检测错误。 在有符号算术中,进位标志告诉你什么有趣的东西。

    溢出标志

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

    1. 如果两个数字的总和没有符号位产生一个结果数字 符号位打开时,“溢出”标志打开。

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

    2. 如果两个带有符号位的数字之和产生一个结果数字 关闭符号位,打开“溢出”标志。

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

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

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

    如果你正在做二进制补码(有符号)算术,溢出标志打开 意味着答案是错误的 - 你添加了两个正数并得到一个 负数,或者您将两个负数相加得到一个正数。

    如果你在做无符号算术,溢出标志没有任何意义 并且应该被忽略。

    【讨论】:

    • 如何检查是否设置了溢出标志?我会写什么 Easy86k 代码?
    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多