Сравнение R0 с R1 с помощью ассемблера (Keil)

У меня есть два значения, хранящиеся в R0 и R1. Я сравниваю их следующим образом:

MOV R3, #(R0 XOR R1)
CJNE R3,#0,NOT_EQUAL

По-видимому, таким образом невозможно использовать ОПЕРАТОР XOR. Есть ли другой способ сравнить R0 с R1 и проверить, равны они или нет?


person dritech    schedule 28.04.2015    source источник


Ответы (1)


Поскольку вы хотите выполнить 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
person Jester    schedule 28.04.2015