Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-02-2015, 15:37   #1
vemi
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
vemi è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2015, 17:29   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2015, 19:38   #3
lorenzo001
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
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2015, 01:57   #4
vemi
Junior Member
 
Iscritto dal: Jun 2009
Messaggi: 16
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
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)?
Utilizzo l'emulatore disponibile qui:
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
vemi è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2015, 01:58   #5
vemi
Junior Member
 
Iscritto dal: Jun 2009
Messaggi: 16
Quote:
Originariamente inviato da lorenzo001 Guarda i messaggi
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
Ci avevo pensato ma nell'esempio sopra citato:
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..
vemi è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2015, 08:47   #6
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da lorenzo001 Guarda i messaggi
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
E' corretto.
Quote:
Originariamente inviato da vemi Guarda i messaggi
Utilizzo l'emulatore disponibile qui:
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
L'emulatore è lo stesso che usato tempo fa, e dovrebbe essere affidabile.

Nello specifico, ho provato con:
Codice:
LDA #$ff
CMP #$2f
BRK
che mi ha restituito:
Codice:
NV-BDIZC
10110001
Che è corretto, in quanto $ff-$2f = $d0.
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
Dunque prima setta il carry, e poi esegue internamente la sottrazione. Ecco perché viene fuori C = 1: il carry è stato settato, ma non è stato poi "usato" dalla sottrazione.

Riguardo all'altra operazione abbiamo:
Codice:
LDA #$01
CMP #$ff
BRK
che mi ha restituito:
Codice:
NV-BDIZC
00110000
Anche questo è corretto, in quanto $01-$ff = $02.
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
MacBook Neo sorprende iFixit: 'Non vedev...
Venus Optics presenta due nuovi obiettiv...
AMD pubblica una guida per eseguire Open...
Tomb Raider I-III Remastered arriva su A...
X fa marcia indietro: si adeguerà...
Framework e la crisi delle memorie: terz...
Doom è ovunque: perché il ...
NVIDIA aggiorna G-Sync Pulsar: migliorat...
Portatile gaming con RTX 5060 a 1.099€: ...
6G for dummies: al MWC 2026 il CEO di Qu...
Le RAM tornano a salire di prezzo: quest...
5 robot aspirapolvere bestseller al mini...
A 59 anni il mio primo hackathon: dieci ...
Come sfruttare le Offerte di Primavera p...
NVIDIA promette un salto enorme: path tr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:27.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v