|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2009
Messaggi: 16
|
assembler 6502 cmp cpy cpx
Ciao ragazzi ho un dubbio nel linguaggio assembler 6502 in particolare nelle istruzioni di confronto
Ho letto che le tre istruzioni di confronto sono usate per settare i bit dello Stato del Processore; la relazione tra i valori confrontati e i bit di Stato è: A, X, o Y < memoria ---> N=1, Z=0, C=0 A, X, o Y = memoria ---> N=0, Z=1, C=1 A, X, o Y > memoria ---> N=0, Z=0, C=1 Ma facendo qualche prova con gli emulatori in rete alcune cose non tornano; per esempio: confronto tra FF e 2F dove l'emulatore mi restituisce N=1, Z=0, C=1 confronto tra 1 e fF dove l'emulatore mi restituisce N=0, Z=0, C=0 etc.. vi ringrazio anticipatamente |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Qui trovi tutto sui confronti, e in effetti sembra che la prima tabella ricalchi il funzionamento della CMP.
Che emulatore hai usato? Inoltre FF sta nell'accumulatore e 2F in memoria (o come immediato)?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
In realtà il flag N assume il valore del bit 7 del risultato della sottrazione tra i due operandi. La tabella è
A, X, o Y < memoria ---> N=*, Z=0, C=0 A, X, o Y = memoria ---> N=0, Z=1, C=1 A, X, o Y > memoria ---> N=*, Z=0, C=1 * bit 7 di Reg-Operand |
|
|
|
|
|
#4 | |
|
Junior Member
Iscritto dal: Jun 2009
Messaggi: 16
|
Quote:
http://skilldrick.github.io/easy6502/ Negli esempi che ho scritto: FF sta nell'accumulatore e 2F in memoria 1 nell'accumulatore e FF in memoria |
|
|
|
|
|
|
#5 | |
|
Junior Member
Iscritto dal: Jun 2009
Messaggi: 16
|
Quote:
in A--> 1 e in memoria --> FF provando nell'emulatore online ho N=0 Z=0 e C=0 quindi non capisco.. magari è un problema dell'emulatore.. |
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Nello specifico, ho provato con: Codice:
LDA #$ff CMP #$2f BRK Codice:
NV-BDIZC 10110001 Dunque è diverso da zero -> Z = 0. E' negativo -> N = 1. Non ha generato nessun riporto, quindi C è rimasto lo stesso -> C = 1. Attenzione, perché la CMP funziona nel seguente modo: Codice:
SEC SUB Riguardo all'altra operazione abbiamo: Codice:
LDA #$01 CMP #$ff BRK Codice:
NV-BDIZC 00110000 E' diverso da zero -> Z = 0. Non è negativo -> N = 0. Ha generato un riporto, quindi C è cambiato -> C = 0. Per cui la precedente tabella che avevi riportato in precedenza non è corretta. Scusami per non averlo verificato prima.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:58.




















