比较 Motorolla 68k 中的两个地址寄存器

Compare two Address Registers in Motorolla 68k

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

因此:

    ORG    00
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

这是正确的做法吗?如果我在这里改用宏CMPA,会不会有什么不同?

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

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

CMPA.L A2,A1
BLE.S  LOOP

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

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

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

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