jeśli wartość, którą chcesz dodać jest 8-bitowa i nie chciałbyś niszczyć zawartości bc (bo np. używasz jej jeszcze do czegoś innego), to zamiast:
ld bc,nnnn
add hl,bc
możesz użyć:
ld a,l
add a,nn ; teraz a = l + twoja_wartość
ld l,a ; zapisujesz zmiany w l
adc a,h ; jeśli suma przekroczyła 255, to zapalona została flaga carry - dodajesz wartość flagi do h (1 lub 0) [a=l+h+carry]
sub l ; aby a=nowe_h, musimy odjąć l (bo obecnie jest a=l+nowe_h)
ld h,a
zabiera 1 bajt więcej i jest ciut wolniejsze, ale jeśli potrzebujesz bc lub de do czegoś innego to bardzo się ten kod przydaje...
Inną możliwością jest zachowanie bc na stosie i przywrócenie poprzedniej wartości po dodawaniu, ale to jest bardziej kosztowne...
Poniżej odejmowanie 8-bitowej wartości od 16-bitowej wartości w hl:
ld a,l
sub nn
ld l,a
sbc a,l
add a,h
ld h,a