ВУЗ:
Составители:
CJNE<байт_назначения>,<байт_источника>,<смещение>
сравнение и переход `если не равно`
1) (PC): = (PC)+3;
if (direct) < (A) then (PC): = (PC)+<rel8>, (C): = 0;
if (direct) > (A) then (PC):=(PC)+<rel8>, (C): = 1;
<rel 8> – число со знаком.
П р и м е р: A = 97h, P2 = F0h, CY = 0
CJNE A, P2, MT3
…
MT3: CLRA → A = 97h, P2 = F0h, CY = 1,
PC = PC+3+(rel8).
2) (PC): = (PC)+3;
if #data < (A) then (PC)+ <rel8>, (C): = 0;
if #data > (A) then (PC)+ <rel8>, (C): = 1.
П р и м е р: A = FCh, CY = 1
CJNE A, # 0BFh, MT4
…
MT4: JNC A → A = FDh, C=0, PC = PC+3+(rel8).
3) алгоритм тот же, но с Ri i = 0÷7.
П р и м е р: CJNE R7, #81h, MT5
…
MT5: NOP.
4) алгоритм тот же, но с @Ri, i = 0,1.
П р и м е р: CJNE @R0, #29h, MT6
…
MT6: DEC R0.
2.5.6 Подпрограммы
Для обращения к подпрограммам необходимо использовать команды вызова подпрограмм LCALL
и ACALL. Эти команды в отличие от команд перехода LJMP и AJMP сохраняют в стеке адрес возврата
в основную программу. Для возврата из подпрограммы необходимо выполнить команду RET. Команда
RETI отличается от команды RET тем, что разрешает прерывания обслуженного уровня.
LCALL<adds 16>
длинный вызов
(PC): = (PC)+3;
(SP): = (SP)+1, ((SP)): = (PC[7÷0]);
(SP): = (SP)+1, ((SP)): = ( PC [15÷8]);
(PC): = < addr[15÷0]>.
П р и м е р: Пусть SP = 07h, адрес PRN = 1234h, адрес LCALL = 0126h
После LCALL PRN→ SP=09h, PC 1234h
(ОЗУ [08])=26h, (ОЗУ [09]) = 01h.
ACALL <addr 11>
абсолютный вызов
Страницы
- « первая
- ‹ предыдущая
- …
- 38
- 39
- 40
- 41
- 42
- …
- следующая ›
- последняя »