【问题标题】:Compare two Address Registers in Motorolla 68k比较 Motorolla 68k 中的两个地址寄存器
【发布时间】:2015-10-25 18:52:33
【问题描述】:

我有一个简单的程序,我试图了解如何比较两个地址寄存器,并在 A1 小于或等于 A2 时进行分支

这样:

    ORG    $8000
START:                  ; first instruction of program

    CMP A2,A1
    BLE LOOP ;if A1 is less then or equal to A2, BRANCH

LOOP: 

* Put variables and constants here

    END    START        ; last line of source

这是正确的做法吗?如果我改用宏CMPAhere 会怎样,会有所不同吗?

【问题讨论】:

    标签: assembly branch memory-address motorola 68000


    【解决方案1】:

    您必须使用cmpa 与 68K 上的地址寄存器进行比较。你别无选择。

    此外,最好包含大小后缀 .L,以确保比较完整的 32 位,而不是低 16 位的符号扩展版本。

    CMPA.L A2,A1
    BLE.S  LOOP
    

    【讨论】:

    • 难道汇编语言不会自动适当地转换 CMP 吗?
    【解决方案2】:

    我肯定会使用cmp.L,因为许多 68k 汇编程序在未设置大小时默认为 .w,然后您最终会得到 CPU 符号扩展地址的低 16 位内容,然后将它们比较为 32位数量(68k 仅用于地址算术)。

    相反,当 cmp 的目标是地址寄存器时,大多数汇编程序(至少我知道)会自动选择 cmpa

    另外,我认为没有理由将地址与ble 进行签名比较。 无符号比较在这里更合适,例如:

         lea   Start,a0
         lea   Start+size,a1
    loop:clr.l (a0)+
         cmp.l a0,a1
         bhi.s loop
    

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 2020-08-15
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      相关资源
      最近更新 更多