J'ai commencé à expérimenter avec la programmation Gameboy à l'aide de l'assemblage Z80, mais j'ai trouvé quelque chose de bizarre.Problème lié à l'utilisation de dec pour créer un délai
Je trouve un extrait de code utilisé pour créer un retard:
simpleDelay:
dec bc
ld a,b
or c
jr nz, simpleDelay
ret
Tout en jouant avec ça, j'ai découvert que l'écriture bc dec raccourcit deux fois le retard, mais l'écriture 3 fois rend le délai plus long que en l'utilisant une ou deux fois. Pourquoi avoir un nombre pair d'instructions dec
raccourcit-il le délai?
EDIT: Voici l'extrait de code appelant le retard:
ld hl,Title2
ld de, _SCRN0+3+(SCRN_VY_B*5) ;
ld bc, Title2End-Title2
call mem_CopyVRAM
call simpleDelay
IDK Z80, mais la condition de boucle vérifie-t-elle '! = 0'? Votre nombre initial est-il un multiple de 2 mais pas de 3? –
Pas directement pertinent, mais voir 'DJNZ' pour les boucles plus courtes; cela trahit la logique appliquée ici: décrément, compare à zéro, saute si la comparaison échoue. C'est avec un OU pour comparer une valeur de 16 bits plutôt que simplement une valeur de 8 bits - 'OR' définit l'indicateur zéro et la seule façon dont deux valeurs peuvent produire zéro est si les deux étaient individuellement zéro. – Tommy
@Tommy Oh cool, merci! –