Команда CJNE <байт-назначения>, <байт-источник>, <смещение>
Команда "сравнение и переход, если не равно" сравнивает значения первых двх операндов и выполняет ветвление, если операнды не равны. Адрес перехода (ветвления) вычисляетчя при помощи сложения значения (со знаком), указанного в последнем байте команды, с содержимым счетчика команд после увеличения его на три.
Флаг переноса "С" устанавливается в "1", если значение целого без знака <байта назначения> меньше, чем значение целого без знака <байта источника>, в противном случае перенос сбрасывается (если значения операндов равны, флаг переноса сбрасывается). Эта команда не оказывает влияния на операнды.
Операнды, стоящие в команде, обеспечивают комбинации четырех режимов адресации:
- если байтом-назначения является аккумулятор:
- прямой
- непосредственный
- если байтом-назначения является любая ячейка ОЗУ с косвенно-регистровой или регистровой адресацией:
- непосредственный к регистровому
- непосредственный к косвенно-регистровому
Рассмотрим их.
Ассемблер: |
CJNE A, <direct>, <метка> |
Код: |
|
|
|
Время: |
2 цикл
|
Алгоритм: |
(PC) : =(PC)+3
если (direct) < (A) то (PC) :=(PC)+<rel8>, C:=0
если (direct) > (A) то (PC) :=(PC)+<rel8>, C:=1 |
Пример: |
;(A)=97H, (P2)=F0H, (C)=0
CJNE A,P2,MT3
...
MT3: CLR A ;(A)=97H, (P2)=F0H, (C)=1
;Адрес, соответствющий метке
;МТ3 вычисляется, как
;(PC):=(PC)+3+(rel8)
|
Ассемблер: |
CJNE A, #data, <метка> |
Код: |
|
|
|
Время: |
2 циклa |
Алгоритм: |
(PC) :=(PC)+3,
если #data< (A), то (PC)+<rel8>, C:=0
если #data8>(A), то (PC) :=(PC)+<rel8>, C:=1 |
Пример: |
;(A)=FCH, (C)=1
CJNE A,#0BFH,MT4
...
MT4: INC A ;(A)=FDH, (C)=0
;(PC):=(PC)+3+(rel8)
|
Ассемблер: |
CJNE Rn,#data, <метка>; где n=0-7 |
Код: |
|
|
|
Время: |
2 циклa |
Алгоритм: |
(PC) : = (PC)+3,
если #data <(Rn), то (PC) :=(PC)+<rel8>, C:=0
если #data8 >(Rn), то (PC)+<rel8>, C:=1 |
Пример: |
;(R7)=80H, (C)=0
CJNE R7,#81H,MT5
...
MT5: NOP ;(R7)=80H, (C)=1
;(PC):=(PC)+3+(rel8)
|
Ассемблер: |
CJNE @Ri, #data, <метка>; где i=0,1 |
Код: |
|
|
|
Время: |
2 циклa |
Алгоритм: |
(PC) :=(PC)+3,
если #data <((Ri)), то (PC)+<rel8>, C:=0
если #data8>((Ri)), то (PC)+<rel8>, C:=1 |
Пример: |
;(R0)=41H, (C)=1, (ОЗУ[41])=57H
CJNE @R0,#29H,MT6
...
MT6: DEC R0 ;(ОЗУ[41])=57H, (C)=0
;(PC):=(PC)+3+(rel8)
|
|