
Сообщение от
Zidane
В общем решил так:
LD BC,nn ;количество итераций, 2 байта
LD HL,nn ;число с которым выполняются операции
LOOP
LD A,n ;константа в регистр
; Код программы
DEC BC
LD A,B
OR C
JR NZ,LOOP
Если использовать CP C, то выполняется почему то 253 итерации. И все. А вот с OR пошло как надо. Всем спасибо )
LD A,n не имеет смысла, т.к. чуть ниже идёт LD A,B
Ну и попробуем сравнить:
Код:
ld bc, 1000
loop:
dec bc ; 6t
ld a,b ; 4t
or c ; 4t
jr nz, loop ; 12t
; итого 26 тактов
или так
Код:
ld bc, 1000
loop:
djnz loop ; 13/8t
dec c ; 4t
jr nz, loop ; 12/7t
; итого 29 тактов (чуть меньше, т.к. последний виток быстрее переход)
или так
Код:
ld bc, 1000
loop:
dec c ; 4t
jr nz, loop ; 12/7t
dec b ; 4t
jr nz, loop ; 12/7t
; итого 32 такта (чуть меньше, т.к. последний виток быстрее переход)
и предложенное выше
Код:
ld de, 1000
loop:
dec de ; 6t
bit 7,d ; 8t
jr z, loop ; 12t
; итого 26 тактов
Первый вариант быстрее, и чуть короче, но использует регистр А.
Третий вариант медленнее второго, но зато не привязан к B, можно использовать два любых регистра.
Четвёртый не привязан к А, но имеет ограничение на 32765 значений.
Что лучше - выбирать нужно по конкретной задаче.