2017-07-31 4 views
0

Cela me tracasse vraiment lors de l'écriture de mon émulateur 6502/NES ...6502 instructions de magasin (STA, STX, etc.) et les adresses mémoire

Les instructions de magasin de 6502 fonctionnent comme ceci:

STA $2A78 - Store the value of the accumulator into memory address $2A78. 

Toutefois, cette instruction utilise le mode d'adressage absolu, qui doit renvoyer la valeur de 8 bits stockée dans la mémoire $2A78. L'instruction AND, ne suit cette règle:

(If $6A is stored in $2A78) 
AND $2A78 - Perform a logical AND between the accumulator and the value stored in $2A78 (which is $6A) 

Par conséquent, dans des situations normales, l'instruction STA absolue doit stocker la valeur de l'accumulateur dans le 8 bit zéro adresse de la page qui est stockée dans $2A78. S'il devait vraiment stocker la valeur dans $2A78, le mode d'adressage ne devrait-il pas être immédiat? - par exemple.

De même, y a-t-il d'autres instructions qui se comportent «anormalement» comme les instructions de magasin?

+0

Que voulez-vous dire par «situations normales»? Que voulez-vous dire, par conséquent? Votre argument n'est pas clair.Pour que nous puissions résoudre votre malentendu, quelle référence utilisez-vous? – philipxy

Répondre

3

Je pense que vous pouvez être confus au sujet de l'utilisation des modes d'adressage. Le mode d'adressage absolu signifie simplement que l'adresse mémoire à utiliser pour l'opération suit immédiatement l'opcode. Dans les deux cas mentionnés, STA et AND, c'est le cas.

Toutefois, comment cette adresse de mémoire est utilisée dépend de l'opcode lui-même.STA l'utilisera comme emplacement pour stocker l'accumulateur. AND l'utilisera pour charger un octet puis utiliser cet octet pour modifier l'accumulateur. Ils sont à la fois le mode d'adressage absolu malgré cette différence.

Ce que vous paraissez à dire est que vous attendez un magasin à une adresse mémoire directement utiliser quelque chose comme:

STA #$2A78 

et je peux voir pourquoi vous pouvez penser que plus cohérente logique, mais c'est

Notez que cela n'a pas beaucoup de sens pour AND un accumulateur 8 bits avec une valeur d'adresse de 16 bits directement.

+0

Ohhhh, cela explique tout! Ce diagramme que je faisais référence (https: // drive. google.com/file/d/0B6OHeG0FVYP8ZFNVd1p5emVfNnM/view?usp=sharing) était déroutant de comprendre avec les instructions de magasin - Maintenant, il est logique :) –