我有一个简单的程序,我试图理解如何比较两个地址寄存器,如果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
,那会有什么影响呢?
答案 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