2016-02-14 4 views
0

Je faisais des recherches sur l'application «fausse» de Brandon W pour le ti-84 pour voir comment cela fonctionnait. (http://brandonw.net/calculators/fake/) En parcourant le code, j'ai remarqué plusieurs étiquettes et instructions de saut que je n'ai pas comprises. Je voudrais apprendre comment il utilise ces signes dollar et sauts. Mes questions sont posées dans l'extrait de code suivant: (Tout le code est de fausse application open source de Brandon W!)Comprendre les signes et les étiquettes du dollar Z80

resetKeys: 
     xor a 
     ld (de),a 
$$:  ld a,(MenuCurrent) ;How is this label two dollar signs? What does this mean? 
     cp 02h 
     jr nz,$F   ;Are we jumping to the instruction at 0xF or to one of these dollar sign labels? 
     ld hl,sFakeAppVar 
     rst 20h 
     B_CALL ChkFindSym 
     jr c,$F   ;If we are jumping to 0xF, what are the dollar signs used for? 
     ld a,b 
     or a 
     jr nz,$F 
     inc de 
     inc de 
     ld a,(de) 
     cp 25h 
     jr z,ignoreAppsKeys 
     cp 26h 
     jr z,ignoreAppsKeys 
     cp 27h 
     jr z,ignoreAppsKeys 
$$:  pop af    ;Here's another 
     ld b,a 
     ld a,(cxCurApp) 
     cp 45h 
     jr nz,$F 
     ld a,b 
     cp kCapS 
     jr nz,$F 

D'après ce que j'ai fait des recherches, le signe dollar est utilisé lorsque signifiant hex ou le compteur de l'emplacement actuel. Corrigez-moi si j'ai tort, s'il-vous plait. Toute aide serait très appréciée!

+6

Si je devais hasarder une hypothèse '$ f' signifie trouver le prochain (' F'orward) '' $$ étiquette et la branche/jmp à elle. Je pense que "$$" agit comme une étiquette temporaire. Il est tout à fait possible que '$ B' irait' B'ackward à l'étiquette '$$' précédente. Ceci est juste une supposition basée sur la syntaxe de certains autres assembleurs. –

+0

@MichaelPetch Merci beaucoup! – MentalFrostbyte

+1

'jr c, $ F' est un saut relatif si le drapeau de report est un. Donc si 'carry flag == 1' alors' PC = PC + 0x0F'. N'oubliez pas que PC pointera déjà sur l'instruction suivante, donc juste pour être clair, c'est "PC = address_of_next_instruction + 0x0F". – GabrielOshiro

Répondre

1

Le signe $ a plusieurs utilisations. La plupart des assembleurs utilisent Z80 $ comme préfixe pour les numéros hexadécimaux, comme dans ce cas:

jr z, $2A 

Ces assembleurs utilisent également $ pour représenter l'emplacement étaient présents ligne de code sera dans le binaire. Ceci est utile pour créer des constantes pour représenter des emplacements de code, comme dans ce cas:

value_to_jump = $+1 
jr $10 

Dans ce cas, « value_to_jump » est une constante qui contiendra l'adresse où 10 $ est stocké (jr 10 $ est 2-octets , donc $ + 1 points au second de ces octets).

Enfin, certains assembleurs vous permettent de créer des étiquettes anonymuos, comme $$ ou @@. C'est le cas que vous voyez ici. Dans ce code:

jr $f 
.... 
$$: 
.... 
jr $b 

Les instructions de saut signifie « le plus proche de l'avant » ou « le plus proche en arrière », se référant aux étiquettes anonymes.