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

时间:2015-10-25 18:52:33

标签: assembly branch memory-address motorola 68000

我有一个简单的程序,我试图理解如何比较两个地址寄存器,如果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

这是正确的做法吗?如果我在这里使用宏CMPA,那会有什么影响呢?

2 个答案:

答案 0 :(得分:3)

您必须使用cmpa与68K上的地址注册进行比较。你没有选择。

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

CMPA.L A2,A1
BLE.S  LOOP

答案 1 :(得分:0)

我确实使用cmp.L,因为当没有设置大小时,许多68k汇编程序默认为.w,然后你最终会使用CPU符号扩展低16位内容的地址然后将它们比作32位数量(68k仅用于地址算术)。

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

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

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