|
Например, sub zh,zh сбросит бит переноса, а eor zh,zh и clr zh (на самом деле это одна и та же команда) его не тронет. Аналогично и add zl,zl и lsl zl - lsl сбрасывает флаг N, но не трогает H, а add может изменить и тот, и другой флаги в зависимости от величины операндов. В том примере это несущественно, но в других случаях может потребоваться либо тот, либо другой вариант.
А как макрос тот пример в лоб вставлять нельзя, не позаботившись предварительно о локальности или глобальности метки jmp_table - если таблица будет частью тела макроса (что нехорошо), то ошибки не возникнет, иначе эту метку надо передавать в макрос как параметр:
.macro jtab
mov zl,@0
add zl,zl
sub zh,zh
subi zl,low(-@1)
sbci zh,high(-@1)
ijmp
.endm
;
;Таблица переходов (не jmp, как в оригинале у MSE, а сразу адреса):
jmp_table: .dw foo1,foo2,foo3;и т.д.
;
;
;Вызов макроса:
jtab r3,jmp_table
;....
;
foo1:
;.....
;
foo2:
;.....
;
foo3:
;.....
;
;
E-mail: info@telesys.ru