【问题标题】:Assembly Motorola 68k, how to branch if a tested bit is zero?组装摩托罗拉68k,如果测试位为零,如何分支?
【发布时间】:2012-10-10 12:29:52
【问题描述】:

我正在使用 easy68k 编写一个汇编程序,我正在寻找一种方法,如果测试位等于 0 [SR 中的 Z=0],则创建一个分支。

我搜索了很多,但没有得到答案,

例如,我有这行:

  BTST #0,D2 ;Testing the LSB bit in data register 0

现在我想要一种方法,或者如果存在,一条指令来检查 SR 中的 Z,这样我就可以知道测试的位是否为零。

【问题讨论】:

  • @Damien_The_Unbeliever,我之前看到过,但是那些使用 Z 是 BEQ 的,BNE 似乎没有用,因为我看到它们是用于比较而不在这里做的,不是比较两个值。没有任何指令将单个定义的位移动到数据寄存器吗?
  • @Damien_The_Unbeliever 所以我可以在没有操作数的情况下使用指令BEQ,它将基于Z 值进行分支?或者我应该在不使用它们的情况下放置任何操作数?但是这样做会重新影响Z 的值,对吧?

标签: assembly branch 68000


【解决方案1】:

测试条件代码和基于它们的分支的指令一般称为Bcc。这些条件分支指令的各个名称是基于如果前一条指令是 CMP 时它们的含义。

但是,他们自己所做的只是测试条件代码并获取分支。所以,你可以这样做:

BTST #0,D2 ;Testing the LSB bit in data register 0
BEQ LabelForZSet
;Code for Z clear

【讨论】:

    【解决方案2】:

    Z-Flag 上的分支:

    btst #0,d2
    beq bitIsCleared
    ; or
    bne bitIsSet
    

    Z-Flag 注册:

    btst #0,d2
    sne  d0
    ; d0 (byte only) will now be 0xFF if bit was set, 0x00 otherwise)
    ; if a word is required add ext.w d0
    ; if a long is required add also ext.l d0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多