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