使用汇编 (Keil) 比较 R0 和 R1
Comparing R0 with R1 using assembly (Keil)
我有两个值存储在 R0
和 R1
中。我将两者进行如下比较:
MOV R3, #(R0 XOR R1)
CJNE R3,#0,NOT_EQUAL
显然不可能以这种方式使用 XOR OPERATOR。
有没有另一种方法可以比较 R0
和 R1
并检查它们是否相等?
由于您想在运行时执行 XOR
,您将不得不使用指令来完成它。不幸的是,XRL
指令仅在 A
寄存器上运行,因此您可能需要重新排列。假设 A
不可用,但 R3
可用,你可以这样做:
MOV R3, A ; save A to R3
MOV A, R0
XRL A, R1
XCH A, R3 ; restore A and put the result into R3
CJNE R3, #0, NOT_EQUAL
如果 A
可用,您可以使用 CJNE
接受内存操作数,知道寄存器是内存映射的:
MOV A, R0
CJNE A, 1, NOT_EQUAL ; 1 is the bank0 address of R1
我有两个值存储在 R0
和 R1
中。我将两者进行如下比较:
MOV R3, #(R0 XOR R1)
CJNE R3,#0,NOT_EQUAL
显然不可能以这种方式使用 XOR OPERATOR。
有没有另一种方法可以比较 R0
和 R1
并检查它们是否相等?
由于您想在运行时执行 XOR
,您将不得不使用指令来完成它。不幸的是,XRL
指令仅在 A
寄存器上运行,因此您可能需要重新排列。假设 A
不可用,但 R3
可用,你可以这样做:
MOV R3, A ; save A to R3
MOV A, R0
XRL A, R1
XCH A, R3 ; restore A and put the result into R3
CJNE R3, #0, NOT_EQUAL
如果 A
可用,您可以使用 CJNE
接受内存操作数,知道寄存器是内存映射的:
MOV A, R0
CJNE A, 1, NOT_EQUAL ; 1 is the bank0 address of R1