చాప్టర్ 4: ది 6502 మైక్రోప్రాసెసర్ అసెంబ్లీ లాంగ్వేజ్ ట్యుటోరియల్
4.1 పరిచయం
6502 మైక్రోప్రాసెసర్ 1975లో విడుదలైంది. ఇది Apple II, Commodore 64 మరియు BBC మైక్రో వంటి కొన్ని వ్యక్తిగత కంప్యూటర్లకు మైక్రోప్రాసెసర్గా ఉపయోగించబడింది.
6502 మైక్రోప్రాసెసర్ నేటికీ పెద్ద సంఖ్యలో ఉత్పత్తి చేయబడుతోంది. ఇది నేడు పర్సనల్ కంప్యూటర్లలో (ల్యాప్టాప్లు) ఉపయోగించబడే సెంట్రల్ ప్రాసెసింగ్ యూనిట్ కాదు, కానీ ఇది ఇప్పటికీ పెద్ద సంఖ్యలో ఉత్పత్తి చేయబడుతోంది మరియు నేటికీ ఎలక్ట్రానిక్ మరియు ఎలక్ట్రికల్ ఉపకరణాలలో ఉపయోగించబడుతుంది. మరింత ఆధునిక కంప్యూటర్ నిర్మాణాలను అర్థం చేసుకోవడానికి, 6502 వంటి పాతదైన కానీ చాలా విజయవంతమైన మైక్రోప్రాసెసర్ను పరిశీలించడం చాలా ఉపయోగకరంగా ఉంటుంది.
అర్థం చేసుకోవడం మరియు ప్రోగ్రామ్ చేయడం సులభం కనుక, అసెంబ్లీ భాషను బోధించడానికి ఉపయోగించే ఉత్తమమైన (ఉత్తమమైనది కాకపోతే) మైక్రోప్రాసెసర్లో ఇది ఒకటి. అసెంబ్లీ భాష అనేది కంప్యూటర్ను ప్రోగ్రామ్ చేయడానికి ఉపయోగించే తక్కువ-స్థాయి భాష. ఒక మైక్రోప్రాసెసర్ యొక్క అసెంబ్లీ భాష మరొక మైక్రోప్రాసెసర్ యొక్క అసెంబ్లీ భాష నుండి భిన్నంగా ఉంటుందని గమనించండి. 6502 మైక్రోప్రాసెసర్ అసెంబ్లీ భాష ఈ అధ్యాయంలో బోధించబడింది. మరింత ఖచ్చితంగా, ఇది బోధించబడిన 65C02, కానీ దీనిని 6502గా సూచిస్తారు.
గతంలో ఒక ప్రసిద్ధ కంప్యూటర్ను కమోడోర్_64 అని పిలుస్తారు. 6502 అనేది 6500 కుటుంబానికి చెందిన మైక్రోప్రాసెసర్. Commodore_64 కంప్యూటర్ 6510 మైక్రోప్రాసెసర్ని ఉపయోగిస్తుంది. 6510 మైక్రోప్రాసెసర్ 6500 µP. 6502 µP యొక్క సూచనల సమితి 6510 µP యొక్క దాదాపు అన్ని సూచనలను కలిగి ఉంటుంది. ఈ అధ్యాయం మరియు తదుపరి అధ్యాయం యొక్క జ్ఞానం commodore_64 కంప్యూటర్పై ఆధారపడి ఉంటుంది. ఆన్లైన్ కెరీర్ కోర్సులోని ఈ భాగంలో ఆధునిక కంప్యూటర్ ఆర్కిటెక్చర్లు మరియు ఆధునిక ఆపరేటింగ్ సిస్టమ్లను వివరించడానికి ఈ పరిజ్ఞానం బేస్లుగా ఉపయోగించబడుతుంది.
కంప్యూటర్ ఆర్కిటెక్చర్ అనేది కంప్యూటర్ యొక్క మదర్బోర్డ్ యొక్క భాగాలను సూచిస్తుంది మరియు ప్రతి భాగం లోపల డేటా ఎలా ప్రవహిస్తుంది, ముఖ్యంగా మైక్రోప్రాసెసర్, భాగాల మధ్య డేటా ఎలా ప్రవహిస్తుంది మరియు డేటా ఎలా సంకర్షణ చెందుతుంది అనే వివరణను సూచిస్తుంది. డేటాకు ఏకవచనం డేటా. కంప్యూటర్ యొక్క కంప్యూటర్ నిర్మాణాన్ని అధ్యయనం చేయడానికి సమర్థవంతమైన మార్గం మదర్బోర్డు యొక్క అసెంబ్లీ భాషను అధ్యయనం చేయడం.
కమోడోర్_64 కంప్యూటర్ 8-బిట్ కంప్యూటర్ వర్డ్ యొక్క కంప్యూటర్ అని చెప్పబడింది. అంటే సమాచారం ఎనిమిది-బిట్ బైనరీ కోడ్ల రూపంలో నిల్వ చేయబడుతుంది, బదిలీ చేయబడుతుంది మరియు మార్చబడుతుంది.
కమోడోర్ 64 మదర్బోర్డ్ యొక్క బ్లాక్ రేఖాచిత్రం
కమోడోర్ 64 మదర్బోర్డు యొక్క బ్లాక్ రేఖాచిత్రం:
అత్తి 4.1 Commodore_64 సిస్టమ్ యూనిట్ యొక్క బ్లాక్ రేఖాచిత్రం
6510 మైక్రోప్రాసెసర్ను 6502 మైక్రోప్రాసెసర్గా ఊహించుకోండి. మొత్తం మెమరీ బైట్ల శ్రేణి (బైట్కు 8-బిట్లు). యాదృచ్ఛిక-యాక్సెస్ (చదవడానికి/వ్రాయడానికి) మెమరీ ఉంది, దీని కోసం బైట్లను వ్రాయవచ్చు లేదా తొలగించవచ్చు. కంప్యూటర్ యొక్క పవర్ స్విచ్ ఆఫ్ అయినప్పుడు, రాండమ్-యాక్సెస్ మెమరీ (RAM)లోని మొత్తం సమాచారం తొలగించబడుతుంది. చదవడానికి మాత్రమే మెమరీ (ROM) కూడా ఉంది. కంప్యూటర్ పవర్ స్విచ్ ఆఫ్ అయినప్పుడు, ROMలోని సమాచారం అలాగే ఉంటుంది (చెరిపివేయబడదు).
రేఖాచిత్రంలో ఇన్పుట్/అవుట్పుట్ పరికరాలుగా సూచించబడే ఇన్పుట్/అవుట్పుట్ పోర్ట్ (సర్క్యూట్) ఉంది. ఈ పోర్ట్ కంప్యూటర్ సిస్టమ్ యూనిట్ యొక్క ఎడమ మరియు కుడి లేదా ముందు మరియు వెనుక నిలువు ఉపరితలాల వద్ద కనిపించే పోర్ట్లతో గందరగోళం చెందకూడదు. అవి రెండు వేర్వేరు విషయాలు. ఈ అంతర్గత పోర్ట్ నుండి హార్డ్-డిస్క్ (లేదా ఫ్లాపీ-డిస్క్), కీబోర్డ్ మరియు మానిటర్ వంటి పెరిఫెరల్స్కు కనెక్షన్లు రేఖాచిత్రంలో చూపబడవు.
రేఖాచిత్రంలో మూడు బస్సులు (ఎలక్ట్రికల్ చాలా చిన్న వైర్ కండక్టర్ల సమూహాలు) ఉన్నాయి. ప్రతి వైర్ బిట్ 1 లేదా బిట్ 0ని బదిలీ చేయగలదు. డేటా బస్, ఒక సమయంలో ఎనిమిది-బిట్ బైట్ను (ఒక క్లాక్ పల్స్) RAM మరియు ఇన్పుట్/అవుట్పుట్ పోర్ట్ (ఇన్పుట్/అవుట్పుట్ పరికరాలు)కి బదిలీ చేయడం కోసం ద్విదిశాత్మకంగా ఉంటుంది. డేటా బస్సు ఎనిమిది బిట్ల వెడల్పుతో ఉంటుంది.
అన్ని భాగాలు చిరునామా బస్సుకు కనెక్ట్ చేయబడ్డాయి. అడ్రస్ బస్సు మైక్రోప్రాసెసర్ నుండి ఏక దిశలో ఉంటుంది. అడ్రస్ బస్సుకు పదహారు కండక్టర్లు ఉన్నారు మరియు ఒక్కొక్కరు ఒక్కో బిట్ (1 లేదా 0)ని కలిగి ఉంటారు. ఒక క్లాక్ పల్స్లో పదహారు బిట్లు పంపబడతాయి.
కంట్రోల్ బస్సు ఉంది. కంట్రోల్ బస్ యొక్క కొన్ని కండక్టర్లు మైక్రోప్రాసెసర్ నుండి ఇతర భాగాలకు ఒక్కొక్క బిట్ను బదిలీ చేస్తారు. కొన్ని నియంత్రణ పంక్తులు ఇన్పుట్/అవుట్పుట్ (IO) పోర్ట్ నుండి మైక్రోప్రాసెసర్కు బిట్లను తీసుకువెళతాయి.
కంప్యూటర్ మెమరీ
RAM మరియు ROMలను ఒక మెమరీ అసెంబ్లీగా పరిగణిస్తారు. హెక్సాడెసిమల్ సంఖ్యలు “$” ఉపసర్గను కలిగి ఉన్న ఈ అసెంబ్లీ క్రింది విధంగా రేఖాచిత్రంగా సూచించబడుతుంది:
కమోడోర్ 64 కంప్యూటర్ కోసం Figure 4.11 మెమరీ లేఅవుట్
RAM 0000 నుండి 16 DFFFకి 16 ఇది $0000 నుండి $DFFF వరకు వ్రాయబడింది. 6502 µP అసెంబ్లీ భాషతో, హెక్సాడెసిమల్ సంఖ్య '$'తో ఉపసర్గ చేయబడింది మరియు 16 లేదా H లేదా హెక్స్తో ప్రత్యయం (సబ్స్క్రిప్ట్ చేయబడింది) కాదు. కంప్యూటర్ స్విచ్ ఆఫ్ అయినప్పుడు ర్యామ్లోని ఏదైనా సమాచారం ఆఫ్ అవుతుంది. ROM $E000 నుండి $FFFF వరకు ప్రారంభమవుతుంది. ఇది కంప్యూటర్ స్విచ్ ఆఫ్ అయినప్పుడు ఆఫ్ చేయని సబ్ట్రౌటిన్లను కలిగి ఉంది. ఈ సబ్ట్రౌటిన్లు ప్రోగ్రామింగ్లో సహాయపడే సాధారణంగా ఉపయోగించే రొటీన్లు. వినియోగదారు ప్రోగ్రామ్ వారిని పిలుస్తుంది (తదుపరి అధ్యాయాన్ని చూడండి).
$0200 నుండి $D000 వరకు ఖాళీ (బైట్లు) వినియోగదారు ప్రోగ్రామ్ల కోసం. $D000 నుండి $DFFF వరకు ఉన్న స్థలం పెరిఫెరల్స్ (ఇన్పుట్/అవుట్పుట్ పరికరాలు)కి నేరుగా సంబంధించిన సమాచారం కోసం. ఇది ఆపరేటింగ్ సిస్టమ్లో భాగం. కాబట్టి, కమోడోర్-64 కంప్యూటర్ యొక్క ఆపరేటింగ్ సిస్టమ్ రెండు ప్రధాన భాగాలలో ఉంటుంది: ROMలోని భాగం ఎప్పటికీ ఆపివేయబడదు మరియు $D000 నుండి $DFFF వరకు పవర్ స్విచ్ ఆఫ్ అయినప్పుడు ఆపివేయబడుతుంది. కంప్యూటర్ స్విచ్ ఆన్ చేసిన ప్రతిసారీ ఈ IO (ఇన్పుట్/అవుట్పుట్) డేటా డిస్క్ నుండి లోడ్ చేయబడాలి. నేడు, అటువంటి డేటాను పరిధీయ డ్రైవర్లు అంటారు. ఇన్పుట్/అవుట్పుట్ పరికర పోర్ట్ నుండి మదర్బోర్డ్లోని కనెక్షన్ల ద్వారా మానిటర్, కీబోర్డ్ మొదలైనవి కనెక్ట్ చేయబడిన కంప్యూటర్ యొక్క నిలువు ఉపరితలాలపై గుర్తించదగిన పోర్ట్లకు (మానిటర్, కీబోర్డ్, మొదలైనవి) ప్రారంభమవుతాయి. .)
మెమరీ 2 కలిగి ఉంటుంది 16 = 65,536 బైట్ స్థానాలు. హెక్సాడెసిమల్ రూపంలో, ఇవి 10000 16 = 10000 హెచ్ = 10000 హెక్స్ = $10000 స్థానాలు. కంప్యూటింగ్లో, బేస్ టూ, బేస్ టెన్, బేస్ పదహారు మొదలైన వాటిలో లెక్కింపు 0 నుండి ప్రారంభమవుతుంది మరియు 1 నుండి కాదు. కాబట్టి, మొదటి స్థానం వాస్తవానికి స్థాన సంఖ్య 000000000000000 2 = 0 10 = 0000 16 = $0000. 6502 µP అసెంబ్లీ భాషలో, చిరునామా స్థానం యొక్క గుర్తింపు $తో ఉపసర్గ చేయబడింది మరియు ప్రత్యయం లేదా సబ్స్క్రిప్ట్ లేదు. చివరి స్థానం 1111111111111111 స్థాన సంఖ్య 2 = 65,535 10 = FFFF 16 = $FFFF మరియు 1000000000000000 కాదు 2 , లేదా 65,536 10 , లేదా 10000 16 , లేదా $10000. 1000000000000000 2 , 65,536 10 , 10000 16 , లేదా $10000 బైట్ స్థానాల మొత్తం సంఖ్యను అందిస్తుంది.
ఇక్కడ, 2 16 = 65,536 = 64 x 1024 = 64 x 2 10 = 64 Kbytes (కిలోబైట్లు). కమోడోర్-64 పేరులోని 64 ప్రత్యయం అంటే 64KB మొత్తం మెమరీ (RAM మరియు ROM). ఒక బైట్ 8 బిట్లు మరియు 8 బిట్లు మెమరీలో ఒక బైట్ స్థానానికి వెళ్తాయి.
64 Kbytes మెమరీ పేజీలుగా విభజించబడింది. ప్రతి పేజీకి 0100 ఉంటుంది 16 = 256 10 బైట్ స్థానాలు. మొదటి 256 10 = మొదటి 0100 16 స్థానాలు పేజీ 0. రెండవది పేజీ 1, మూడవది పేజీ 2 మరియు మొదలైనవి.
65,536 స్థానాలను పరిష్కరించడానికి, ప్రతి స్థానానికి (చిరునామా) 16 బిట్లు అవసరం. కాబట్టి, మైక్రోప్రాసెసర్ నుండి మెమరీకి చిరునామా బస్సు 16 లైన్లను కలిగి ఉంటుంది; ఒక బిట్ కోసం ఒక లైన్. ఒక బిట్ 1 లేదా 0.
6502 µP రిజిస్టర్లు
రిజిస్టర్ అనేది బైట్ మెమరీ లొకేషన్ కోసం బైట్ సెల్స్ లాంటిది. 6502 µP ఆరు రిజిస్టర్లను కలిగి ఉంది: ఐదు 8-బిట్ రిజిస్టర్లు మరియు ఒక 16-బిట్ రిజిస్టర్. 16-బిట్ రిజిస్టర్ను ప్రోగ్రామ్ కౌంటర్ అని పిలుస్తారు, దీనిని పిసిగా సంక్షిప్తీకరించారు. ఇది తదుపరి సూచనల కోసం మెమరీ చిరునామాను కలిగి ఉంటుంది. అసెంబ్లీ భాషా ప్రోగ్రామ్ మెమరీలో ఉంచబడిన సూచనలను కలిగి ఉంటుంది. మెమరీలో నిర్దిష్ట బైట్ స్థానాన్ని పరిష్కరించడానికి పదహారు (16) వేర్వేరు బిట్లు అవసరం. నిర్దిష్ట క్లాక్ పల్స్ వద్ద, ఈ బిట్లు సూచనలను చదవడం కోసం అడ్రస్ బస్సు యొక్క 16-బిట్ అడ్రస్ లైన్లకు పంపబడతాయి. 6502 µP కోసం అన్ని రిజిస్టర్లు క్రింది విధంగా వర్ణించబడ్డాయి:
Fig. 4.12 6502 µP రిజిస్టర్లు
ప్రోగ్రామ్ కౌంటర్ లేదా PCని రేఖాచిత్రంలో 16-బిట్ రిజిస్టర్గా చూడవచ్చు. తక్కువ ముఖ్యమైన ఎనిమిది బిట్లు ప్రోగ్రామ్ కౌంటర్ తక్కువ కోసం PCLగా లేబుల్ చేయబడ్డాయి. అధిక ముఖ్యమైన ఎనిమిది బిట్లు ప్రోగ్రామ్ కౌంటర్ హై కోసం PCHగా లేబుల్ చేయబడ్డాయి. కమోడోర్-64 కోసం మెమరీలో ఒక సూచన ఒకటి, రెండు లేదా మూడు బైట్లను కలిగి ఉంటుంది. PCలోని 16 బిట్లు మెమరీలో అమలు చేయాల్సిన తదుపరి సూచనను సూచిస్తాయి. మైక్రోప్రాసెసర్లోని సర్క్యూట్లలో, వాటిలో రెండింటిని అర్థమెటిక్ లాజిక్ యూనిట్ మరియు ఇన్స్ట్రక్షన్ డీకోడర్ అంటారు. µP (మైక్రోప్రాసెసర్)లో ప్రాసెస్ చేయబడే ప్రస్తుత సూచన ఒక బైట్ పొడవుగా ఉంటే, ఈ రెండు సర్క్యూట్లు తదుపరి సూచన కోసం PCని 1 యూనిట్ పెంచుతాయి. µPలో ప్రాసెస్ చేయబడే ప్రస్తుత సూచన రెండు బైట్ల పొడవు ఉంటే, అంటే అది మెమరీలో వరుసగా రెండు బైట్లను ఆక్రమించినట్లయితే, ఈ రెండు సర్క్యూట్లు తదుపరి సూచనల కోసం PCని 2 యూనిట్లు పెంచుతాయి. µPలో ప్రాసెస్ చేయబడే ప్రస్తుత సూచన మూడు బైట్ల పొడవు ఉంటే, అంటే అది మెమరీలో వరుసగా మూడు బైట్లను ఆక్రమించినట్లయితే, ఈ రెండు సర్క్యూట్లు తదుపరి సూచనల కోసం PCని 3 యూనిట్లు పెంచుతాయి.
అక్యుమ్యులేటర్ 'A' అనేది ఎనిమిది-బిట్ సాధారణ ప్రయోజన రిజిస్టర్, ఇది చాలా అంకగణిత మరియు లాజిక్ ఆపరేషన్ల ఫలితాన్ని నిల్వ చేస్తుంది.
ప్రోగ్రామ్ దశలను లెక్కించడానికి “X” మరియు “Y” రిజిస్టర్లు ఒక్కొక్కటి ఉపయోగించబడతాయి. ప్రోగ్రామింగ్లో లెక్కింపు 0 నుండి ప్రారంభమవుతుంది. కాబట్టి, వాటిని ఇండెక్స్ రిజిస్టర్లు అంటారు. వారికి మరికొన్ని ఇతర ప్రయోజనాలున్నాయి.
స్టాక్ పాయింటర్ రిజిస్టర్ అయినప్పటికీ, “S” 9 బిట్లను కలిగి ఉంది, ఇది ఎనిమిది-బిట్ రిజిస్టర్గా పరిగణించబడుతుంది. దాని కంటెంట్ రాండమ్ యాక్సెస్ మెమరీ (RAM) పేజీ 1లో బైట్ స్థానాన్ని సూచిస్తుంది. పేజీ 1 బైట్ $0100 నుండి ప్రారంభమవుతుంది (256 10 ) బైట్ చేయడానికి $01FF (511 10 ) ప్రోగ్రామ్ రన్ అవుతున్నప్పుడు, అది మెమరీలో ఒక సూచన నుండి తదుపరి వరుస సూచనలకు కదులుతుంది. అయితే, ఇది ఎల్లప్పుడూ కేసు కాదు. అక్కడ సూచనలను వరుసగా అమలు చేయడం కొనసాగించడానికి ఇది ఒక మెమరీ ప్రాంతం నుండి మరొక మెమరీ ప్రాంతానికి జంప్ చేసిన సందర్భాలు ఉన్నాయి. RAMలో పేజీ 1 స్టాక్గా ఉపయోగించబడుతుంది. స్టాక్ అనేది పెద్ద RAM మెమరీ ప్రాంతం, ఇది జంప్ ఉన్న చోట నుండి కోడ్ కొనసాగింపు కోసం తదుపరి చిరునామాలను కలిగి ఉంటుంది. జంపింగ్ సూచనలతో కూడిన కోడ్లు స్టాక్లో లేవు; అవి స్మృతిలో మరెక్కడా ఉన్నాయి. అయినప్పటికీ, జంప్-టు సూచనలు అమలు చేయబడిన తర్వాత, కొనసాగింపు చిరునామాలు (కోడ్ విభాగాలు కాదు) స్టాక్లో ఉంటాయి. జంప్ లేదా శాఖ సూచనల ఫలితంగా వారు అక్కడికి నెట్టబడ్డారు.
P యొక్క ఎనిమిది-బిట్ ప్రాసెసర్ స్థితి రిజిస్టర్ ఒక ప్రత్యేక రకమైన రిజిస్టర్. వ్యక్తిగత బిట్లు ఒకదానికొకటి సంబంధం కలిగి ఉండవు లేదా కనెక్ట్ చేయబడవు. అక్కడ ఉన్న ప్రతి బిట్ను ఫ్లాగ్ అని పిలుస్తారు మరియు ఇతరులతో సంబంధం లేకుండా ప్రశంసించబడుతుంది. అవసరాన్ని బట్టి జెండాల అర్థాలు క్రింది వాటిలో ఇవ్వబడ్డాయి.
ప్రతి రిజిస్టర్ కోసం మొదటి మరియు చివరి బిట్ సూచిక మునుపటి రేఖాచిత్రంలో ప్రతి రిజిస్టర్ పైన సూచించబడుతుంది. రిజిస్టర్లో బిట్ ఇండెక్స్ (స్థానం) లెక్కింపు కుడి వైపున 0 నుండి ప్రారంభమవుతుంది.
బైనరీ, హెక్సాడెసిమల్ మరియు డెసిమల్లో మెమరీ పేజీలు
కింది పట్టిక బైనరీ, హెక్సాడెసిమల్ మరియు డెసిమల్లో మెమరీ పేజీల ప్రారంభాన్ని చూపుతుంది:
ప్రతి పేజీలో 1,0000,0000 ఉంటుంది 2 100కి సమానమైన బైట్ల సంఖ్య హెచ్ 256కి సమానమైన బైట్ల సంఖ్య 10 బైట్ల సంఖ్య. మునుపటి మెమరీ రేఖాచిత్రంలో, పేజీలు 0 పేజీ నుండి పైకి వెళ్లడం మరియు పట్టికలో సూచించిన విధంగా క్రిందికి వెళ్లకుండా సూచించబడతాయి.
ఈ పట్టికలోని బైనరీ, హెక్సాడెసిమల్ మరియు దశాంశ నిలువు వరుసలు మెమరీ బైట్ స్థాన చిరునామాలను వాటి విభిన్న స్థావరాలలో అందిస్తాయి. పేజీ సున్నా కోసం, కోడింగ్ చేస్తున్నప్పుడు టైప్ చేయడానికి దిగువ బైట్ కోసం బిట్లు మాత్రమే అవసరమని గమనించండి. అధిక బైట్ కోసం బిట్లు విస్మరించబడతాయి ఎందుకంటే అవి ఎల్లప్పుడూ సున్నాలు (పేజీ సున్నాకి). మిగిలిన పేజీలకు, అధిక బైట్ కోసం బిట్లను ఉపయోగించాలి.
ఈ అధ్యాయంలోని మిగిలిన భాగం మొత్తం మునుపటి సమాచారాన్ని ఉపయోగించి 6502 µP అసెంబ్లీ భాషను వివరిస్తుంది. భాషను త్వరగా అర్థం చేసుకోవాలంటే, పాఠకుడు పది బేస్కు బదులుగా పదహారు మూలాధారాన్ని జోడించి తీసివేయాలి. వాస్తవానికి ఇది బేస్ టూగా ఉండాలి, కానీ బేస్ టూలో లెక్కించడం గజిబిజిగా ఉంటుంది. బేస్ టూలో రెండు సంఖ్యలను జోడించినప్పుడు, ఒక క్యారీ ఇప్పటికీ 1 బేస్ టెన్లో ఉన్నట్లు గుర్తుంచుకోండి. కానీ బేస్ టూలో రెండు సంఖ్యలను తీసివేసినప్పుడు, ఒక అరువు రెండు మరియు బేస్ టెన్లో పది కాదు. ఆధార పదహారులో రెండు సంఖ్యలను జోడించినప్పుడు, ఒక క్యారీ ఇప్పటికీ 1 బేస్ టెన్లో ఉంటుంది. కానీ ఆధారం పదహారులో రెండు సంఖ్యలను తీసివేసినప్పుడు, ఒక రుణం పదహారు మరియు పది కాదు.
4.2 డేటా బదిలీ సూచనలు
6502 µP కోసం అసెంబ్లీ భాష డేటా బదిలీ సూచనల యొక్క క్రింది పట్టికను పరిగణించండి:
ఒక బైట్ (8-బిట్లు) మెమరీ బైట్ స్థానం నుండి అక్యుమ్యులేటర్ రిజిస్టర్, X రిజిస్టర్ లేదా Y రిజిస్టర్కి కాపీ చేయబడినప్పుడు, అది లోడ్ అవుతోంది. ఈ రిజిస్టర్లలో ఏదైనా ఒక బైట్ను మెమరీ బైట్ స్థానానికి కాపీ చేసినప్పుడు, అది బదిలీ అవుతుంది. ఒక బైట్ ఒక రిజిస్టర్ నుండి మరొక రిజిస్టర్కి కాపీ చేయబడినప్పుడు, అది ఇప్పటికీ బదిలీ చేయబడుతోంది. పట్టిక యొక్క రెండవ నిలువు వరుసలో, బాణం బైట్ కోసం కాపీ యొక్క దిశను చూపుతుంది. మిగిలిన నాలుగు నిలువు వరుసలు వేర్వేరు చిరునామా మోడ్లను చూపుతాయి.
అడ్రసింగ్ మోడ్ కాలమ్లోని ఎంట్రీ హెక్సాడెసిమల్లోని సూచనల యొక్క సంబంధిత జ్ఞాపిక భాగానికి సంబంధించిన వాస్తవ బైట్ కోడ్. AE, ఉదాహరణకు, LDX కోసం అసలైన బైట్ కోడ్, ఇది AE వంటి సంపూర్ణ చిరునామా మోడ్లో మెమరీ నుండి X రిజిస్టర్కి బైట్ను లోడ్ చేయడం. 16 = 10101110 2 . కాబట్టి, మెమరీ బైట్ లొకేషన్లో LDX కోసం బిట్స్ 10101110.
సూచనల యొక్క LDX స్మృతి భాగానికి, A2, AE మరియు A6 అనే మూడు బైట్లు ఉన్నాయి మరియు ప్రతి ఒక్కటి నిర్దిష్ట అడ్రసింగ్ మోడ్కు చెందినవని గమనించండి. X రిజిస్టర్లోకి లోడ్ అయ్యే బైట్ను మెమరీ బైట్ స్థానం నుండి కాపీ చేయనప్పుడు, హెక్సాడెసిమల్ లేదా డెసిమల్లో సూచనలో LDX జ్ఞాపకశక్తితో విలువను టైప్ చేయాలి (తర్వాత). ఈ అధ్యాయంలో, అటువంటి విలువలు హెక్సాడెసిమల్లో టైప్ చేయబడ్డాయి. ఇది తక్షణ చిరునామా, కాబట్టి LDXని సూచించడానికి మెమరీలోని అసలు బైట్ A2 16 = 10100010 2 మరియు AE కాదు 16 ఇది 10101110కి సమానం 2 .
పట్టికలో, అడ్రసింగ్ మోడ్ హెడ్డింగ్ల క్రింద ఉన్న అన్ని బైట్లను ఆపరేషన్ కోడ్లు అంటారు, వీటిని ఆప్కోడ్లుగా సంక్షిప్తీకరించారు. అడ్రసింగ్ మోడ్ను బట్టి ఒక జ్ఞాపకార్థం ఒకటి కంటే ఎక్కువ ఆప్కోడ్లు ఉండవచ్చు.
గమనిక: కంప్యూటర్ సిస్టమ్ యూనిట్లోని “లోడ్” అనే పదానికి రెండు అర్థాలు ఉండవచ్చు: ఇది డిస్క్ నుండి కంప్యూటర్ మెమరీకి ఫైల్ను లోడ్ చేయడాన్ని సూచిస్తుంది లేదా మెమరీ బైట్ స్థానం నుండి మైక్రోప్రాసెసర్ రిజిస్టర్కి బైట్ను బదిలీ చేయడాన్ని సూచిస్తుంది. .
6502 µP కోసం పట్టికలో నాలుగు కంటే ఎక్కువ అడ్రసింగ్ మోడ్లు ఉన్నాయి.
పేర్కొనకపోతే, ఈ అధ్యాయంలోని అన్ని వినియోగదారు ప్రోగ్రామింగ్ కోడ్ చిరునామా 0200 నుండి ప్రారంభమవుతుంది 16 ఇది మెమరీలో వినియోగదారు ప్రాంతం యొక్క ప్రారంభం.
మెమరీ M మరియు అక్యుమ్యులేటర్ A
మెమరీ టు అక్యుమ్యులేటర్
తక్షణ చిరునామా
కింది సూచన FF సంఖ్యను నిల్వ చేస్తుంది 16 = 255 10 సంచితం లోకి:
LDA #$FF
'$' అనేది మెమరీ చిరునామాను గుర్తించడానికి మాత్రమే ఉపయోగించబడదు. సాధారణంగా, తరువాతి సంఖ్య హెక్సాడెసిమల్ అని సూచించడానికి ఇది ఉపయోగించబడుతుంది. ఈ సందర్భంలో, $FF అనేది ఏదైనా మెమరీ బైట్ స్థానం యొక్క చిరునామా కాదు. ఇది 255 సంఖ్య 10 హెక్సాడెసిమల్లో. బేస్ 16 లేదా దాని ఇతర సమానమైన సబ్స్క్రిప్ట్లు అసెంబ్లీ భాషా సూచనలో వ్రాయకూడదు. “#” తర్వాత వచ్చేది అక్యుమ్యులేటర్ రిజిస్టర్లో ఉంచాల్సిన విలువ అని సూచిస్తుంది. విలువను బేస్ టెన్లో కూడా వ్రాయవచ్చు, కానీ అది ఈ అధ్యాయంలో చేయలేదు. “#” అంటే వెంటనే చిరునామా అని అర్థం.
జ్ఞాపకార్థం దాని సంబంధిత ఆంగ్ల పదబంధానికి కొంత పోలికను కలిగి ఉంటుంది. “LDA #$FF” అంటే 255 సంఖ్యను లోడ్ చేయండి 10 అక్యుమ్యులేటర్ A. ఇది మునుపటి పట్టిక నుండి తక్షణ చిరునామా కాబట్టి, LDA A9 మరియు AD లేదా A5 కాదు. బైనరీలో A9 101010001. కాబట్టి, LDA కోసం A9 మెమరీలో $0200 చిరునామాలో ఉంటే, $FF $0301 = 0300 + 1 చిరునామాలో ఉంటుంది. #$FF అనేది ఖచ్చితంగా LDA జ్ఞాపిక కోసం ఆపరేండ్.
సంపూర్ణ చిరునామా
$FF విలువ మెమరీలో $0333 స్థానంలో ఉంటే, మునుపటి సూచన:
LDA $0333
# లేకపోవడాన్ని గమనించండి. ఈ సందర్భంలో, # లేకపోవడం అంటే కిందిది మెమరీ చిరునామా మరియు ఆసక్తి విలువ కాదు (అక్యుమ్యులేటర్లో ఉంచాల్సిన విలువ కాదు). కాబట్టి, LDA కోసం ఆప్కోడ్, ఈసారి AD, A9 లేదా A5 కాదు. ఇక్కడ LDA యొక్క ఆపరేండ్ $0333 చిరునామా మరియు $FF విలువ కాదు. $FF చాలా దూరంలో ఉన్న $0333 స్థానంలో ఉంది. 'LDA $0333' సూచన మెమరీలో వరుసగా మూడు స్థానాలను ఆక్రమించింది మరియు మునుపటి ఉదాహరణ వలె రెండు కాదు. LDA కోసం 'AD' $0200 స్థానంలో ఉంది. దిగువ బైట్ 0333 అంటే 33 $0301 స్థానంలో ఉంది. $0333 యొక్క అధిక బైట్ 03 $0302 స్థానంలో ఉంది. ఇది 6502 అసెంబ్లీ లాంగ్వేజ్లో ఉపయోగించబడే చిన్న ముగింపు. వివిధ మైక్రోప్రాసెసర్ల అసెంబ్లీ భాషలు భిన్నంగా ఉంటాయి.
ఇది సంపూర్ణ చిరునామాకు ఉదాహరణ. $0333 అనేది $FF ఉన్న స్థానం యొక్క చిరునామా. సూచన మూడు వరుస బైట్లను కలిగి ఉంటుంది మరియు $FF లేదా దాని వాస్తవ బైట్ స్థానాన్ని కలిగి ఉండదు.
సున్నా-పేజీ చిరునామా
$FF విలువ పేజీ సున్నాలో $0050 మెమరీ లొకేషన్లో ఉందని భావించండి. సున్నా-పేజీకి సంబంధించిన బైట్ స్థానాలు $0000 నుండి ప్రారంభమై $00FF వద్ద ముగుస్తాయి. ఇవి 256 10 మొత్తం స్థానాలు. కమోడోర్-64 మెమరీలోని ప్రతి పేజీ 256 10 పొడవు. మెమరీలో సున్నా-పేజీ స్థలంలో సాధ్యమయ్యే అన్ని స్థానాలకు అధిక బైట్ సున్నా అని గమనించండి. సున్నా-పేజీ అడ్రసింగ్ మోడ్ సంపూర్ణ అడ్రసింగ్ మోడ్ వలె ఉంటుంది, కానీ 00 యొక్క అధిక బైట్ సూచనలో టైప్ చేయబడదు. కాబట్టి, $FFని $0050 స్థానం నుండి అక్యుమ్యులేటర్లోకి లోడ్ చేయడానికి, జీరో-పేజీ అడ్రసింగ్ మోడ్ సూచన:
LDA $50
LDAతో A5 మరియు A9 లేదా AD, A5 కాదు 16 = 10100101 2 . మెమరీలోని ప్రతి బైట్లో 8 సెల్లు ఉన్నాయని మరియు ప్రతి సెల్లో కొంత భాగం ఉంటుందని గుర్తుంచుకోండి. ఇక్కడ సూచన రెండు వరుస బైట్లను కలిగి ఉంటుంది. LDA కోసం A5 $0200 మెమరీ లొకేషన్లో ఉంది మరియు $50 చిరునామా, 00 యొక్క అధిక బైట్ లేకుండా $0301 స్థానంలో ఉంది. మొత్తం 64K మెమరీలో ఒక బైట్ని వినియోగించే 00 లేకపోవడం మెమరీ స్థలాన్ని పొదుపు చేస్తుంది.
జ్ఞాపకశక్తికి సంచితం
సంపూర్ణ చిరునామా
కింది సూచన బైట్ విలువను కాపీ చేస్తుంది, అది ఏమైనప్పటికీ, అక్యుమ్యులేటర్ నుండి మెమరీ స్థానం $1444 వరకు:
అవి $1444
ఇది అక్యుమ్యులేటర్ నుండి మెమరీకి బదిలీ చేయబడుతుందని చెప్పబడింది. ఇది లోడ్ కావడం లేదు. లోడ్ అవుతోంది. STA కోసం ఆప్కోడ్ బైట్ 8D 16 = 10001101 2 . ఈ సూచన మెమరీలో మూడు వరుస బైట్లను కలిగి ఉంటుంది. 8D 16 $0200 స్థానంలో ఉంది. 44 16 $1444 చిరునామా $0201 స్థానంలో ఉంది. మరియు 14 16 $0202 స్థానంలో ఉంది - తక్కువ ముగింపు. కాపీ చేయబడిన అసలు బైట్ సూచనలో భాగం కాదు. 8D మరియు సున్నా-పేజీ చిరునామా కోసం 85 కాదు (టేబుల్లో) STA కోసం ఇక్కడ ఉపయోగించబడ్డాయి.
సున్నా పేజీ చిరునామా
కింది సూచన బైట్ విలువను కాపీ చేస్తుంది, అది ఏమైనప్పటికీ, అక్యుమ్యులేటర్ నుండి మెమరీ స్థానం వరకు పేజీ సున్నాలో $0050:
STA $0050
ఇక్కడ STA కోసం ఆప్కోడ్ బైట్ 85 16 = 10000101 2 . ఈ సూచన మెమరీలో రెండు వరుస బైట్లను కలిగి ఉంటుంది. 85 16 $0200 స్థానంలో ఉంది. 50 16 $0050 చిరునామా $0201 స్థానంలో ఉంది. అడ్రస్లో ఒక బైట్ మాత్రమే ఉంది, అది తక్కువ బైట్ని కలిగి ఉన్నందున ఇక్కడ అంతిమ సమస్య తలెత్తదు. కాపీ చేయబడిన అసలు బైట్ సూచనలో భాగం కాదు. STA కోసం ఇక్కడ సున్నా-పేజీ చిరునామా కోసం 85 మరియు 8D ఉపయోగించబడదు.
అక్యుమ్యులేటర్ నుండి మెమరీలోని స్థానానికి బైట్ను బదిలీ చేయడానికి తక్షణ చిరునామాను ఉపయోగించడం సమంజసం కాదు. ఎందుకంటే $FF వంటి వాస్తవ విలువను తక్షణ చిరునామాలో సూచనలో కోట్ చేయాలి. కాబట్టి, µPలోని రిజిస్టర్ నుండి ఏదైనా మెమరీ స్థానానికి బైట్ విలువను బదిలీ చేయడానికి తక్షణ చిరునామా సాధ్యం కాదు.
LDX, STX, LDY మరియు STY జ్ఞాపకాలు
LDX మరియు STX వరుసగా LDA మరియు STA లను పోలి ఉంటాయి. కానీ ఇక్కడ, X రిజిస్టర్ ఉపయోగించబడుతుంది మరియు A (అక్యుమ్యులేటర్) రిజిస్టర్ కాదు. LDY మరియు STY వరుసగా LDA మరియు STAలను పోలి ఉంటాయి. కానీ ఇక్కడ, Y రిజిస్టర్ ఉపయోగించబడుతుంది మరియు A రిజిస్టర్ కాదు. హెక్సాడెసిమల్లోని ప్రతి ఆప్కోడ్ కోసం టేబుల్ 4.21ని చూడండి, అది నిర్దిష్ట జ్ఞాపిక మరియు నిర్దిష్ట చిరునామా మోడ్కు అనుగుణంగా ఉంటుంది.
రిజిస్టర్-టు-రిజిస్టర్ బదిలీలు
టేబుల్ 4.21లోని మునుపటి రెండు సెట్ల సూచనలు మెమరీ/మైక్రోప్రాసెసర్-రిజిస్టర్ కాపీయింగ్ (బదిలీ) మరియు రిజిస్టర్/రిజిస్టర్ కాపీయింగ్ (బదిలీ)తో వ్యవహరిస్తాయి. TAX, TXA, TAY, TYA, TSX మరియు TXS సూచనలు మైక్రోప్రాసెసర్లోని రిజిస్టర్ నుండి అదే మైక్రోప్రాసెసర్ యొక్క మరొక రిజిస్టర్కి కాపీ చేయడం (బదిలీ) చేస్తాయి.
బైట్ను A నుండి Xకి కాపీ చేయడానికి, సూచన:
పన్ను
బైట్ను X నుండి Aకి కాపీ చేయడానికి, సూచన:
TX
బైట్ను A నుండి Yకి కాపీ చేయడానికి, సూచన:
చెయ్యి
బైట్ను Y నుండి Aకి కాపీ చేయడానికి, సూచన:
TYA
కమోడోర్ 64 కంప్యూటర్ కోసం, మెమరీలో పేజీ 0 తర్వాత స్టాక్ పేజీ 1 అవుతుంది. ప్రతి ఇతర పేజీలాగే, ఇది 25610ని కలిగి ఉంటుంది 10 బైట్ స్థానాలు, $0100 నుండి $01FF వరకు. సాధారణంగా, ఒక ప్రోగ్రామ్ మెమరీలో ఒక సూచన నుండి తదుపరి వరుస సూచనలకు అమలు చేస్తుంది. కాలానుగుణంగా, మరొక మెమరీ కోడ్ (సూచనల సెట్) విభాగానికి వెళ్లడం జరుగుతుంది. స్టాక్ ఏరియా ఇన్ మెమరీ (RAM) ప్రోగ్రామ్ కొనసాగింపు కోసం జంప్లు (లేదా బ్రాంచ్లు) వదిలివేసిన తదుపరి సూచన చిరునామాలను కలిగి ఉంటుంది.
స్టాక్ పాయింటర్ “S” అనేది 6502 µPలో 9-బిట్ రిజిస్టర్. మొదటి బిట్ (ఎడమవైపు) ఎల్లప్పుడూ 1. మొదటి పేజీలోని అన్ని బైట్ స్థాన చిరునామాలు 1తో ప్రారంభమవుతాయి, తర్వాత 256 కోసం 8 వేర్వేరు బిట్లు 10 స్థానాలు. స్టాక్ పాయింటర్ పేజీ 1లో స్థానం యొక్క చిరునామాను కలిగి ఉంది, ఇది ప్రోగ్రామ్ ప్రస్తుత (జంప్డ్-టు) కోడ్ సెగ్మెంట్ను అమలు చేసిన తర్వాత తిరిగి మరియు కొనసాగించాల్సిన తదుపరి సూచనల చిరునామాను కలిగి ఉంటుంది. స్టాక్ యొక్క అన్ని చిరునామాల మొదటి బిట్ (పేజీ ఒకటి) 1తో ప్రారంభమవుతుంది కాబట్టి, స్టాక్ పాయింటర్ రిజిస్టర్ మిగిలిన ఎనిమిది బిట్లను మాత్రమే ఉంచాలి. అన్నింటికంటే, దాని మొదటి బిట్, ఇది ఎడమవైపు-బిట్ (తొమ్మిదవ బిట్ దాని కుడి నుండి లెక్కింపు), ఎల్లప్పుడూ 1.
బైట్ని S నుండి Xకి కాపీ చేయడానికి, సూచన:
TSX
బైట్ను X నుండి Sకి కాపీ చేయడానికి, సూచన:
పదము
రిజిస్టర్-టు-రిజిస్టర్ సూచనలు ఎలాంటి ఆపరాండ్ను తీసుకోవు. అవి కేవలం జ్ఞాపకాలను కలిగి ఉంటాయి. ప్రతి జ్ఞాపికకు హెక్సాడెసిమల్లో ఆప్కోడ్ ఉంటుంది. ఒపెరాండ్ (మెమొరీ చిరునామా లేదు, విలువ లేదు) లేనందున ఇది సూచించబడిన చిరునామా మోడ్లో ఉంది.
గమనిక: X నుండి Y లేదా Y నుండి X బదిలీ (కాపీ చేయడం) లేదు.
4.3 అంకగణిత కార్యకలాపాలు
సర్క్యూట్, 6502 µPలోని అర్థమెటిక్ లాజిక్ యూనిట్, ఒకేసారి రెండు ఎనిమిది-బిట్ సంఖ్యలను మాత్రమే జోడించగలదు. ఇది తీసివేయదు, గుణించదు మరియు విభజించదు. కింది పట్టిక అంకగణిత కార్యకలాపాల కోసం ఆప్కోడ్లు మరియు అడ్రసింగ్ మోడ్లను చూపుతుంది:
గమనిక: అంకగణిత కార్యకలాపాలు మరియు ఇతర రకాల కార్యకలాపాల కోసం అన్ని జ్ఞాపకాలు (అంటే మొత్తం 6502 జ్ఞాపకాలు) ఒక బైట్ ఆపరేషన్ (op) కోడ్ను తీసుకుంటాయి. జ్ఞాపిక కోసం ఒకటి కంటే ఎక్కువ అడ్రసింగ్ మోడ్లు ఉంటే, అదే స్మృతికి వేర్వేరు ఆప్కోడ్లు ఉంటాయి: ఒక్కో అడ్రసింగ్ మోడ్కు ఒకటి. పట్టికలోని C, D మరియు V స్థితి రిజిస్టర్ యొక్క ఫ్లాగ్లు. అవసరాన్ని బట్టి వాటి అర్థాలు తరువాత ఇవ్వబడతాయి.
సంతకం చేయని సంఖ్యల జోడింపు
6502 µPతో, సంతకం చేసిన సంఖ్యలు రెండు పూరక సంఖ్యలు. సంతకం చేయని సంఖ్యలు సున్నా నుండి ప్రారంభమయ్యే సాధారణ సానుకూల సంఖ్యలు. కాబట్టి, ఎనిమిది-బిట్ల బైట్ కోసం, సంతకం చేయని అతి చిన్న సంఖ్య 00000000 2 = 0 10 = 00 16 మరియు సంతకం చేయని అతిపెద్ద సంఖ్య 11111111 2 = 255 10 = FF 16 . సంతకం చేయని రెండు సంఖ్యల కోసం, అదనంగా:
A+M+C→A
అంటే అక్యుమ్యులేటర్ యొక్క 8-బిట్ కంటెంట్ మెమరీ నుండి ఒక బైట్ (8-బిట్లు)కి అంకగణిత లాజిక్ యూనిట్ ద్వారా జోడించబడుతుంది. A మరియు M జోడించిన తర్వాత, తొమ్మిదవ బిట్కు క్యారీ స్టేటస్ రిజిస్టర్లోని క్యారీ ఫ్లాగ్ సెల్కి వెళుతుంది. స్థితి రిజిస్టర్లోని క్యారీ ఫ్లాగ్ సెల్లో ఇప్పటికీ ఉన్న మునుపటి జోడింపు నుండి ఏదైనా మునుపటి క్యారీ బిట్ కూడా A మరియు M మొత్తానికి జోడించబడుతుంది, ఇది A+M+C→Aగా మారుతుంది. ఫలితం తిరిగి అక్యుమ్యులేటర్లో ఉంచబడుతుంది.
వడ్డీ అదనంగా ఉంటే:
A + M
మరియు మునుపటి క్యారీని జోడించాల్సిన అవసరం లేదు, క్యారీ ఫ్లాగ్ను క్లియర్ చేయాలి, అది 0గా చేయబడింది, తద్వారా అదనంగా:
A+M+0→A అదే A+M→A
గమనిక: Aకి M జోడించబడితే మరియు 1 యొక్క క్యారీ ఏర్పడుతుంది ఎందుకంటే ఫలితం 255 కంటే ఎక్కువగా ఉంటుంది 10 = 11111111 2 = FF 16 , ఇది కొత్త క్యారీ. 1 యొక్క ఈ కొత్త క్యారీ, తదుపరి జత ఎనిమిది-బిట్ల సంగ్రహానికి (మరొక A + M) అవసరమైతే క్యారీ ఫ్లాగ్ సెల్కి స్వయంచాలకంగా పంపబడుతుంది.
రెండు సంతకం చేయని ఎనిమిది-బిట్లను జోడించడానికి కోడ్
00111111 2 +00010101 2 3F వలె ఉంటుంది 16 + 15 16 ఇది 63కి సమానం 10 +21 10 . ఫలితం 010101002 2 ఇది 54కి సమానం 16 మరియు 84 10 . ఫలితం ఎనిమిది బిట్ల గరిష్ట సంఖ్య 255 కంటే మించదు 10 = 11111111 2 = FF 16 . కాబట్టి, 1 ఫలితంగా వచ్చే క్యారీ లేదు. మరో విధంగా చెప్పాలంటే, ఫలితంగా వచ్చే క్యారీ 0. జోడింపుకు ముందు, మునుపటి క్యారీ 1 లేదు. మరో మాటలో చెప్పాలంటే, మునుపటి క్యారీ 0. ఈ జోడింపు చేయడానికి కోడ్. ఉంటుంది:
CLC
LDA #$3F
ADC #$15
గమనిక: అసెంబ్లీ భాషను టైప్ చేస్తున్నప్పుడు, కీబోర్డ్ యొక్క “Enter” కీ ప్రతి సూచన చివరిలో నొక్కబడుతుంది. ఈ కోడ్లో మూడు సూచనలు ఉన్నాయి. మునుపటి జోడింపులో 1 ఉంటే మొదటి సూచన (CLC) క్యారీ ఫ్లాగ్ను క్లియర్ చేస్తుంది. CLCని సూచించిన చిరునామా మోడ్లో మాత్రమే చేయవచ్చు. సూచించబడిన అడ్రసింగ్ మోడ్ కోసం జ్ఞాపికకు ఎటువంటి ఒపెరాండ్ అవసరం లేదు. ఇది పి స్టేటస్ రిజిస్టర్ యొక్క క్యారీ సెల్ను క్లియర్ చేస్తుంది. క్లియరింగ్ అంటే క్యారీ ఫ్లాగ్ సెల్కి 0 బిట్ ఇవ్వడం. కోడ్లోని తదుపరి రెండు సూచనలు తక్షణ చిరునామా మోడ్ను ఉపయోగిస్తాయి. తక్షణ చిరునామాతో, జ్ఞాపికకు ఒక ఒపెరాండ్ మాత్రమే ఉంది, అది ఒక సంఖ్య (మరియు మెమరీ లేదా రిజిస్టర్ చిరునామా కాదు). కాబట్టి, సంఖ్యకు ముందు తప్పనిసరిగా “#” ఉండాలి. “$” అంటే అనుసరించే సంఖ్య హెక్సాడెసిమల్ అని అర్థం.
రెండవ సూచన 3F సంఖ్యను లోడ్ చేస్తుంది 16 సంచితం లోకి. మూడవ సూచన కోసం, µP యొక్క అంకగణిత లాజిక్ యూనిట్ సర్క్యూట్ క్యారీ ఫ్లాగ్ సెల్ యొక్క మునుపటి (క్లియర్ చేయబడిన) క్యారీని 0 (0కి బలవంతంగా) తీసుకుని, స్టేటస్ రిజిస్టర్ని 15కి జోడిస్తుంది. 16 అలాగే ఇప్పటికే 3Fలో ఉన్న విలువకు 16 అక్యుమ్యులేటర్ మరియు పూర్తి ఫలితాన్ని తిరిగి అక్యుమ్యులేటర్లో ఉంచుతుంది. ఈ సందర్భంలో, ఫలితంగా క్యారీ 0 ఉంటుంది. ALU (అర్థమెటిక్ లాజిక్ యూనిట్) స్థితి రిజిస్టర్లోని క్యారీ ఫ్లాగ్ సెల్లోకి 0ని పంపుతుంది (పుట్ చేస్తుంది). ప్రాసెసర్ స్టేటస్ రిజిస్టర్ మరియు స్టేటస్ రిజిస్టర్ అంటే ఒకే విషయం. 1 క్యారీ ఫలితంగా, ALU 1ని స్టేటస్ రిజిస్టర్ యొక్క క్యారీ ఫ్లాగ్కు పంపుతుంది.
మునుపటి కోడ్ యొక్క మూడు పంక్తులు వాటిని అమలు చేయడానికి ముందు మెమరీలో ఉండాలి. CLC కోసం ఆప్కోడ్ 1816 (అనుకూల చిరునామా) $0200 బైట్ స్థానంలో ఉంది. ఆప్కోడ్ A9 16 LDA కోసం (తక్షణ చిరునామా) $0201 బైట్ స్థానంలో ఉంది. సంఖ్య 3F 10 $0202 బైట్ స్థానంలో ఉంది. ఆప్కోడ్ 69 16 LDA కోసం (తక్షణ చిరునామా) $0203 బైట్ స్థానంలో ఉంది. సంఖ్య 15 10 $0204 బైట్ స్థానంలో ఉంది.
గమనిక: LDA అనేది బదిలీ (లోడ్) సూచన మరియు అంకగణిత సూచన (జ్ఞాపకశక్తి) కాదు.
రెండు సంతకం చేయని పదహారు-బిట్లను జోడించడానికి కోడ్
6502 µPలోని అన్ని రిజిస్టర్లు తప్పనిసరిగా ఎనిమిది-బిట్ రిజిస్టర్లు, PC (ప్రోగ్రామ్ కౌంటర్) 16-బిట్లు తప్ప. స్టేటస్ రిజిస్టర్ కూడా 8-బిట్ల వెడల్పుతో ఉంటుంది, అయితే దాని ఎనిమిది బిట్లు కలిసి పనిచేయవు. ఈ విభాగంలో, మొదటి జత ఎనిమిది బిట్ల నుండి రెండవ జత ఎనిమిది బిట్ల వరకు రెండు 16 సంతకం చేయని బిట్ల జోడింపు పరిగణించబడుతుంది. ఎనిమిదవ బిట్ స్థానం నుండి తొమ్మిదవ బిట్ స్థానానికి క్యారీ చేయడం ఇక్కడ ఆసక్తిని కలిగి ఉంటుంది.
సంఖ్యలు 0010101010111111గా ఉండనివ్వండి 2 = 2ABF16 16 = 10,943 10 మరియు 0010101010010101 2 = 2A95 16 = 10,901 10 . మొత్తం 0101010101010100 2 = 5554 16 = 21,844 10 .
బేస్ టూలో ఈ రెండు సంతకం చేయని సంఖ్యలను జోడించడం క్రింది విధంగా ఉంటుంది:
కింది పట్టిక ఎనిమిదవ బిట్ నుండి తొమ్మిదవ బిట్ స్థానానికి 1 యొక్క క్యారీతో అదే జోడింపును చూపుతుంది, కుడి నుండి ప్రారంభమవుతుంది:
దీన్ని కోడింగ్ చేయడంలో, రెండు దిగువ బైట్లు ముందుగా జోడించబడతాయి. అప్పుడు, ALU (అర్థమెటిక్ లాజిక్ యూనిట్) 1 యొక్క క్యారీని ఎనిమిదవ బిట్ స్థానం నుండి తొమ్మిదవ బిట్ స్థానానికి, స్టేటస్ రిజిస్టర్లోని క్యారీ ఫ్లాగ్ సెల్కు పంపుతుంది. క్యారీ లేకుండా 0 1 0 1 0 1 0 0 ఫలితం అక్యుమ్యులేటర్కు వెళుతుంది. అప్పుడు, క్యారీతో రెండవ జత బైట్లు జోడించబడతాయి. ADC మెమోనిక్ అంటే మునుపటి క్యారీతో ఆటోమేటిక్గా జోడించడం. ఈ సందర్భంలో, మునుపటి క్యారీ, ఇది 1, రెండవ చేరికకు ముందు మార్చకూడదు. మొదటి జోడింపు కోసం, ఏదైనా మునుపటి క్యారీ ఈ పూర్తి జోడింపులో భాగం కానందున, అది తప్పనిసరిగా క్లియర్ చేయబడాలి (0 చేసినది).
రెండు జతల బైట్ల పూర్తి జోడింపు కోసం, మొదటి జోడింపు:
A + M + 0 -> A
రెండవ అదనంగా ఉంది:
A + M + 1 -> A
కాబట్టి, క్యారీ ఫ్లాగ్ను మొదటి జోడింపుకు ముందు (0 విలువ ఇచ్చిన) క్లియర్ చేయాలి. పాఠకుడు తప్పక చదవాల్సిన క్రింది ప్రోగ్రామ్ ఈ సమ్మింగ్ కోసం సంపూర్ణ చిరునామా మోడ్ను ఉపయోగిస్తుంది:
CLC
LDA $0213
ADC $0215
; క్యారీ ఫ్లాగ్ విలువ అవసరం కాబట్టి క్లియరింగ్ లేదు
STA $0217
LDA $0214
ADC $0216
STA $0218
6502 అసెంబ్లీ భాషతో, సెమికోలన్ వ్యాఖ్యను ప్రారంభిస్తుందని గమనించండి. దీని అర్థం ప్రోగ్రామ్ యొక్క అమలులో, సెమికోలన్ మరియు దాని కుడివైపు ఉన్న ప్రతిదీ విస్మరించబడుతుంది. మునుపు వ్రాసిన ప్రోగ్రామ్ టెక్స్ట్ ఫైల్లో ప్రోగ్రామర్ ఎంపిక పేరుతో మరియు “.asm” పొడిగింపుతో సేవ్ చేయబడుతుంది. మునుపటి ప్రోగ్రామ్ అమలు కోసం మెమరీకి వెళ్ళే ఖచ్చితమైన ప్రోగ్రామ్ కాదు. మెమరీలోని సంబంధిత ప్రోగ్రామ్ను అనువదించిన ప్రోగ్రామ్ అని పిలుస్తారు, ఇక్కడ జ్ఞాపకశక్తిని ఆప్కోడ్లతో (బైట్లు) భర్తీ చేస్తారు. ఏదైనా వ్యాఖ్య అసెంబ్లీ భాషా టెక్స్ట్ ఫైల్లో ఉంటుంది మరియు అనువదించబడిన ప్రోగ్రామ్ మెమరీకి చేరేలోపు తీసివేయబడుతుంది. వాస్తవానికి, ఈరోజు డిస్క్లో రెండు ఫైల్లు సేవ్ చేయబడ్డాయి: “.asm” ఫైల్ మరియు “.exe” ఫైల్. '.asm' ఫైల్ మునుపటి ఉదాహరణలో ఉంది. “.exe” ఫైల్ అనేది “.asm” ఫైల్, ఇందులో అన్ని వ్యాఖ్యలు తీసివేయబడతాయి మరియు అన్ని జ్ఞాపకాలను వాటి ఆప్కోడ్లు భర్తీ చేస్తాయి. టెక్స్ట్ ఎడిటర్లో తెరిచినప్పుడు, “.exe” ఫైల్ గుర్తించబడదు. పేర్కొనకపోతే, ఈ అధ్యాయం యొక్క ప్రయోజనం కోసం, $0200 స్థానం నుండి ప్రారంభమయ్యే మెమరీకి “.exe” ఫైల్ కాపీ చేయబడుతుంది. ఇది లోడ్ చేయడం యొక్క ఇతర అర్థం.
జోడించబడే రెండు 16-బిట్ సంఖ్యలు సంపూర్ణ చిరునామా కోసం మెమరీలో నాలుగు బైట్లను ఆక్రమిస్తాయి: ఒక్కో సంఖ్యకు రెండు బైట్లు (మెమొరీ అనేది బైట్ల క్రమం). సంపూర్ణ చిరునామాతో, ఆప్కోడ్కు ఆపరాండ్ మెమరీలో ఉంటుంది. సమ్మింగ్ ఫలితం రెండు బైట్ల వెడల్పుతో ఉంటుంది మరియు మెమరీలో కూడా ఉంచాలి. ఇది మొత్తం 6 ఇస్తుంది 10 = 6 16 ఇన్పుట్లు మరియు అవుట్పుట్ కోసం బైట్లు. ఇన్పుట్లు కీబోర్డ్ నుండి కాదు మరియు అవుట్పుట్ మానిటర్ లేదా ప్రింటర్ నుండి కాదు. ఇన్పుట్లు మెమరీ (RAM)లో ఉన్నాయి మరియు అవుట్పుట్ (సమ్మింగ్ ఫలితం) ఈ పరిస్థితిలో మెమరీకి (RAM) తిరిగి వెళుతుంది.
ప్రోగ్రామ్ని అమలు చేయడానికి ముందు, అనువదించబడిన సంస్కరణ ముందుగా మెమరీలో ఉండాలి. మునుపటి ప్రోగ్రామ్ కోడ్ను చూస్తే, వ్యాఖ్య లేకుండా సూచనలు 19గా ఉన్నాయని చూడవచ్చు 10 = 13 16 బైట్లు. కాబట్టి, ప్రోగ్రామ్ మెమరీలో $0200 బైట్ స్థానం నుండి $0200 + $13 - $1 = $0212 బైట్ స్థానాలకు తీసుకుంటుంది ($0200 నుండి మొదలై $0201 కాదు - $1). ఇన్పుట్ మరియు అవుట్పుట్ నంబర్ల కోసం 6 బైట్లను జోడించడం వలన ప్రోగ్రామ్ మొత్తం $0212 + $6 = $0218కి ముగుస్తుంది. కార్యక్రమం యొక్క మొత్తం నిడివి 19 16 = 25 10 .
ఆజెండ్ యొక్క దిగువ బైట్ $0213 చిరునామాలో ఉండాలి మరియు అదే ఆజెండ్ యొక్క అధిక బైట్ $0214 చిరునామాలో ఉండాలి - చిన్న ముగింపు. అదేవిధంగా, యాడెండ్ యొక్క దిగువ బైట్ $0215 చిరునామాలో ఉండాలి మరియు అదే జోడింపు యొక్క అధిక బైట్ $0216 చిరునామాలో ఉండాలి - చిన్న ముగింపు. ఫలితం యొక్క దిగువ బైట్ (మొత్తం) $0217 చిరునామాలో ఉండాలి మరియు అదే ఫలితం యొక్క అధిక బైట్ $0218 చిరునామాలో ఉండాలి - చిన్న ముగింపు.
ఆప్కోడ్ 18 16 CLC కోసం (సూచించిన చిరునామా) $0200 బైట్ స్థానంలో ఉంది. 'LDA $0213' కోసం ఆప్కోడ్, అంటే AD 16 LDA కోసం (సంపూర్ణ చిరునామా), $0201 బైట్ స్థానంలో ఉంది. ఆగెండ్ యొక్క దిగువ బైట్ 10111111 $0213 యొక్క మెమరీ బైట్ స్థానంలో ఉంది. ప్రతి ఆప్కోడ్ ఒక బైట్ను ఆక్రమించిందని గుర్తుంచుకోండి. 'LDA $0213' యొక్క '$0213' చిరునామా $0202 మరియు $0203 బైట్ స్థానాల్లో ఉంది. 'LDA $0213' సూచన ఆజెండ్ యొక్క దిగువ బైట్ను అక్యుమ్యులేటర్కు లోడ్ చేస్తుంది.
“ADC $0215” కోసం ఆప్కోడ్, అంటే 6D 16 ADC కోసం (సంపూర్ణ చిరునామా), $0204 బైట్ స్థానంలో ఉంది. యాడెండ్ యొక్క దిగువ బైట్ 10010101 $0215 బైట్ స్థానంలో ఉంది. 'ADC $0215' యొక్క '$0215' చిరునామా $0205 మరియు $0206 బైట్ స్థానాల్లో ఉంది. “ADC $0215” సూచన ఇప్పటికే అక్యుమ్యులేటర్లో ఉన్న ఆజెండ్ దిగువ బైట్కు యాడ్ఎండ్ యొక్క దిగువ బైట్ను జోడిస్తుంది. ఫలితం తిరిగి సంచితంలో ఉంచబడుతుంది. ఎనిమిదవ బిట్ తర్వాత ఏదైనా క్యారీ స్టేటస్ రిజిస్టర్ యొక్క క్యారీ ఫ్లాగ్కు పంపబడుతుంది. అధిక బైట్లను రెండవ జోడింపుకు ముందు క్యారీ ఫ్లాగ్ సెల్ తప్పనిసరిగా క్లియర్ చేయకూడదు. ఈ క్యారీ స్వయంచాలకంగా అధిక బైట్ల మొత్తానికి జోడించబడుతుంది. వాస్తవానికి, CLC కారణంగా ప్రారంభంలో స్వయంచాలకంగా తక్కువ బైట్ల మొత్తానికి 0 క్యారీ జోడించబడుతుంది (ఏ క్యారీ జోడించబడనందుకు సమానం).
వ్యాఖ్య తదుపరి 48 పడుతుంది 10 = 30 16 బైట్లు. అయితే, ఇది “.asm” టెక్స్ట్ ఫైల్లో మాత్రమే ఉంటుంది. అది జ్ఞాపకశక్తికి చేరదు. అసెంబ్లర్ (ఒక ప్రోగ్రామ్) ద్వారా చేసిన అనువాదం ద్వారా ఇది తీసివేయబడుతుంది.
తదుపరి సూచన కోసం “STA $0217”, STA ఆప్కోడ్ 8D 16 (సంపూర్ణ చిరునామా) $0207 బైట్ స్థానంలో ఉంది. 'STA $0217' యొక్క '$0217' చిరునామా $0208 మరియు $0209 మెమరీ స్థానాల్లో ఉంది. “STA $0217” సూచన అక్యుమ్యులేటర్ యొక్క ఎనిమిది-బిట్ కంటెంట్ను $0217 మెమరీ స్థానానికి కాపీ చేస్తుంది.
00101010 అయిన ఆజెండ్ యొక్క అధిక బైట్ $0214 యొక్క మెమరీ లొకేషన్లో ఉంది మరియు 00101010 అయిన యాడెండ్ యొక్క అధిక బైట్ $02 బైట్ స్థానంలో ఉంది. 16 . 'LDA $0214' ఆప్కోడ్, ఇది LDA కోసం AD16 (సంపూర్ణ చిరునామా) $020A బైట్ స్థానంలో ఉంది. 'LDA $0214' యొక్క '$0214' చిరునామా $020B మరియు $020C స్థానాల్లో ఉంది. “LDA $0214” సూచన అక్యుమ్యులేటర్కు ఆజెండ్ యొక్క అధిక బైట్ను లోడ్ చేస్తుంది, అక్యుమ్యులేటర్లో ఉన్న వాటిని చెరిపివేస్తుంది.
'ADC $0216' కోసం ఆప్కోడ్ 6D 16 ADC కోసం (సంపూర్ణ చిరునామా) $020D బైట్ స్థానంలో ఉంది. 'ADC 0216' యొక్క '$0216' చిరునామా $020E మరియు $020F బైట్ స్థానాల్లో ఉంది. “ADC $0216” సూచన ఇప్పటికే అక్యుమ్యులేటర్లో ఉన్న ఆజెండ్ యొక్క అధిక బైట్కు యాడ్ఎండ్ యొక్క అధిక బైట్ను జోడిస్తుంది. ఫలితం తిరిగి అక్యుమ్యులేటర్లో ఉంచబడుతుంది. 1 క్యారీ ఉంటే, ఈ రెండవ జోడింపు కోసం, అది స్వయంచాలకంగా స్టేటస్ రిజిస్టర్లోని క్యారీ సెల్లో ఉంచబడుతుంది. ఈ సమస్యకు పదహారవ బిట్ (ఎడమ)కి మించిన క్యారీ అవసరం లేనప్పటికీ, క్యారీ ఫ్లాగ్ 1 అయ్యిందో లేదో తనిఖీ చేయడం ద్వారా 1 క్యారీ జరిగిందో లేదో తనిఖీ చేయడం మంచిది.
తదుపరి మరియు చివరి సూచన 'STA $0218' కోసం, STA యొక్క ఆప్కోడ్ 8D16 (సంపూర్ణ చిరునామా) $0210 బైట్ స్థానంలో ఉంది. 'STA $0218' యొక్క '$0218' చిరునామా $0211 మరియు $0212 మెమరీ స్థానాల్లో ఉంది. “STA $0218” సూచన అక్యుమ్యులేటర్ యొక్క ఎనిమిది-బిట్ కంటెంట్ను $0218 మెమరీ స్థానానికి కాపీ చేస్తుంది. రెండు పదహారు-బిట్ సంఖ్యల జోడింపు ఫలితం 010101010101010100, మెమొరీ లొకేషన్లో 01010100 తక్కువ బైట్ $0217 మరియు ఎక్కువ బైట్ 01010101 మెమొరీ లొకేషన్లో $0218 - తక్కువ ముగింపు.
తీసివేత
6502 µPతో, సంతకం చేసిన సంఖ్యలు రెండు పూరక సంఖ్యలు. రెండు పూరక సంఖ్య ఎనిమిది-బిట్లు, పదహారు బిట్లు లేదా ఎనిమిది బిట్లలో ఏదైనా మల్టిపుల్ కావచ్చు. రెండు పూరకాలతో, ఎడమ నుండి మొదటి బిట్ సైన్ బిట్. ధనాత్మక సంఖ్య కోసం, గుర్తును సూచించడానికి ఈ మొదటి బిట్ 0. మిగిలిన బిట్లు సాధారణ పద్ధతిలో సంఖ్యను ఏర్పరుస్తాయి. ప్రతికూల సంఖ్య యొక్క రెండు పూరకాలను పొందడానికి, సంబంధిత సానుకూల సంఖ్య కోసం అన్ని బిట్లను విలోమం చేసి, ఆపై కుడి చివర నుండి ఫలితానికి 1ని జోడించండి.
ఒక ధన సంఖ్యను మరొక ధన సంఖ్య నుండి తీసివేయడానికి, సబ్ట్రాహెండ్ రెండు పూరక ప్రతికూల సంఖ్యగా మార్చబడుతుంది. అప్పుడు, minuend మరియు కొత్త ప్రతికూల సంఖ్య సాధారణ మార్గంలో జోడించబడతాయి. కాబట్టి, ఎనిమిది-బిట్ల వ్యవకలనం అవుతుంది:
క్యారీ ఎక్కడ ఊహించబడింది 1. అక్యుమ్యులేటర్లో ఫలితం రెండు పూరకాలలో తేడా. కాబట్టి, రెండు సంఖ్యలను తీసివేయడానికి, క్యారీ ఫ్లాగ్ తప్పనిసరిగా సెట్ చేయబడాలి (1కి తయారు చేయబడింది).
రెండు పదహారు-బిట్ సంఖ్యలను తీసివేసేటప్పుడు, రెండు పదహారు-బిట్ సంఖ్యల జోడింపుతో తీసివేత రెండుసార్లు జరుగుతుంది. వ్యవకలనం అనేది 6502 µPతో కూడిక యొక్క రూపం కాబట్టి, రెండు పదహారు-బిట్ సంఖ్యలను తీసివేసేటప్పుడు, క్యారీ ఫ్లాగ్ మొదటి వ్యవకలనానికి ఒకసారి మాత్రమే సెట్ చేయబడుతుంది. రెండవ వ్యవకలనం కోసం, క్యారీ ఫ్లాగ్ యొక్క ఏదైనా సెట్టింగ్ స్వయంచాలకంగా చేయబడుతుంది.
ఎనిమిది-బిట్ సంఖ్యలు లేదా పదహారు బిట్ సంఖ్యల కోసం వ్యవకలనాన్ని ప్రోగ్రామింగ్ ప్రోగ్రామింగ్ జోడింపు మాదిరిగానే జరుగుతుంది. అయితే, క్యారీ జెండాను చాలా ప్రారంభంలో సెట్ చేయాలి. దీన్ని చేయడానికి జ్ఞాపిక:
పదహారు-బిట్ సానుకూల సంఖ్యలతో వ్యవకలనం
క్రింది సంఖ్యలతో వ్యవకలనాన్ని పరిగణించండి:
ఈ వ్యవకలనం రెండు పూరకాలను కలిగి ఉండదు. 6502 µPలోని వ్యవకలనం రెండు పూరకాలలో జరుగుతుంది కాబట్టి, బేస్ టూలో వ్యవకలనం క్రింది విధంగా జరుగుతుంది:
రెండు పూరక ఫలితం సాధారణ వ్యవకలనం నుండి పొందిన ఫలితం వలె ఉంటుంది. అయితే, కుడివైపు నుండి పదిహేడవ బిట్ స్థానానికి వెళ్లే 1 విస్మరించబడిందని గమనించండి. మైనుఎండ్ మరియు సబ్ట్రాహెండ్ ఒక్కొక్కటి రెండు ఎనిమిది బిట్లుగా విభజించబడ్డాయి. సబ్ట్రాహెండ్ దిగువ బైట్లోని 10010110 యొక్క రెండు పూరకాలు దాని అధిక బైట్ మరియు ఏదైనా క్యారీ నుండి స్వతంత్రంగా నిర్ణయించబడతాయి. సబ్ట్రాహెండ్ యొక్క అధిక బైట్ యొక్క 11101011 యొక్క రెండు పూరకాలు దాని దిగువ బైట్ మరియు ఏదైనా క్యారీ నుండి స్వతంత్రంగా నిర్ణయించబడతాయి.
minuend యొక్క 16-బిట్లు ఇప్పటికే రెండు పూరకాలలో ఉన్నాయి, ఇది ఎడమ నుండి 0తో ప్రారంభమవుతుంది. కాబట్టి, దీనికి బిట్స్లో ఎలాంటి సర్దుబాటు అవసరం లేదు. 6502 µPతో, ఎటువంటి మార్పు లేకుండా మైనుఎండ్ యొక్క దిగువ బైట్ సబ్ట్రాహెండ్ యొక్క రెండు పూరకానికి దిగువ బైట్కు జోడించబడుతుంది. మినుఎండ్ యొక్క దిగువ బైట్ రెండు పూరకంగా మార్చబడదు ఎందుకంటే మొత్తం మినియెండ్లోని పదహారు బిట్లు ఇప్పటికే రెండు పూరకాలలో ఉండాలి (ఎడమవైపు మొదటి బిట్గా 0తో). ఈ మొదటి జోడింపులో, 1=0 SEC సూచనల కారణంగా 1 తప్పనిసరి క్యారీ జోడించబడింది.
ప్రస్తుత ప్రభావవంతమైన వ్యవకలనంలో, ఎనిమిదవ బిట్ నుండి తొమ్మిదవ బిట్ (కుడి నుండి) వరకు 1 (అదనంగా) క్యారీ ఉంది. ఇది ఎఫెక్టివ్గా తీసివేత కాబట్టి, స్టేటస్ రిజిస్టర్లో క్యారీ ఫ్లాగ్లో ఉండాల్సిన బిట్ ఏదైనా పూర్తి అవుతుంది (విలోమ). కాబట్టి, C ఫ్లాగ్లో 1 క్యారీ 0 అవుతుంది. రెండవ ఆపరేషన్లో, సబ్ట్రాహెండ్ యొక్క హై టూ కాంప్లిమెంట్ బైట్కు మైన్యూఎండ్ యొక్క అధిక బైట్ జోడించబడుతుంది. స్టేటస్ రిజిస్టర్ యొక్క స్వయంచాలకంగా పూర్తి చేయబడిన క్యారీ ఫ్లాగ్ బిట్ (ఈ సందర్భంలో 0) కూడా జోడించబడుతుంది (అధిక బైట్లకు). కుడివైపు నుండి పదహారవ బిట్కి మించిన ఏదైనా 1 విస్మరించబడుతుంది.
తదుపరి విషయం ఏమిటంటే, ఆ స్కీమ్ మొత్తాన్ని ఈ క్రింది విధంగా కోడ్ చేయడం:
SEC
LDA $0213
SBC $0215
; విలోమ క్యారీ ఫ్లాగ్ విలువ అవసరం కాబట్టి క్లియరింగ్ లేదు
STA $0217
LDA $0214
SBC $0216
STA $0218
6502 అసెంబ్లీ భాషతో, మెమరీలో అనువదించబడిన ప్రోగ్రామ్ వెర్షన్లో చేర్చబడని వ్యాఖ్యను సెమికోలన్ ప్రారంభిస్తుందని గుర్తుంచుకోండి. వ్యవకలనం కోసం రెండు 16-బిట్ సంఖ్యలు సంపూర్ణ చిరునామాతో నాలుగు బైట్ల మెమరీని ఆక్రమిస్తాయి; ప్రతి సంఖ్యకు రెండు (మెమరీ అనేది బైట్ల శ్రేణి). ఈ ఇన్పుట్లు కీబోర్డ్ నుండి కాదు. సమ్మింగ్ ఫలితం రెండు బైట్లు మరియు వేరే స్థలంలో మెమరీలో కూడా ఉంచాలి. ఈ అవుట్పుట్ మానిటర్ లేదా ప్రింటర్కి వెళ్లదు; అది జ్ఞాపకానికి వెళుతుంది. ఇది మొత్తం 6 ఇస్తుంది 10 = 6 16 మెమరీ (RAM)లో ఉంచాల్సిన ఇన్పుట్లు మరియు అవుట్పుట్ కోసం బైట్లు.
ప్రోగ్రామ్ని అమలు చేయడానికి ముందు, అది మొదట మెమరీలో ఉండాలి. ప్రోగ్రామ్ కోడ్ను చూస్తే, వ్యాఖ్య లేకుండా సూచనలు 19గా ఉన్నాయని చూడవచ్చు 10 = 13 16 బైట్లు. ఈ అధ్యాయంలోని అన్ని ప్రోగ్రామ్లు $0200 మెమరీ స్థానం నుండి ప్రారంభమవుతాయి కాబట్టి, ప్రోగ్రామ్ మెమరీలోని $0200 బైట్ స్థానం నుండి $0200 + $13 – $1 = $0212 బైట్ స్థానానికి ($0200 నుండి మొదలై $0201 కాదు)కి తీసుకువెళుతుంది. ఈ పరిధి ఇన్పుట్ మరియు అవుట్పుట్ బైట్ల కోసం ప్రాంతాన్ని కలిగి ఉండదు. రెండు ఇన్పుట్ నంబర్లు 4 బైట్లను తీసుకుంటాయి మరియు ఒక అవుట్పుట్ నంబర్ 2 బైట్లను తీసుకుంటుంది. ఇన్పుట్ మరియు అవుట్పుట్ నంబర్ల కోసం 6 బైట్లను జోడించడం వలన ప్రోగ్రామ్ యొక్క పరిధి $0212 + $6 = $0218తో ముగుస్తుంది. కార్యక్రమం యొక్క మొత్తం నిడివి 19 16 = 25 10 .
మినియెండ్ యొక్క దిగువ బైట్ $0213 చిరునామాలో ఉండాలి మరియు అదే మినియెండ్ యొక్క అధిక బైట్ $0214 చిరునామాలో ఉండాలి - చిన్న ముగింపు. అదేవిధంగా, సబ్ట్రాహెండ్ యొక్క దిగువ బైట్ $0215 చిరునామాలో ఉండాలి మరియు అదే సబ్ట్రాహెండ్ యొక్క అధిక బైట్ $0216 చిరునామాలో ఉండాలి - చిన్న ముగింపు. ఫలితం యొక్క దిగువ బైట్ (తేడా) $0217 చిరునామాలో ఉండాలి మరియు అదే ఫలితం యొక్క అధిక బైట్ $0218 చిరునామాలో ఉండాలి - చిన్న ముగింపు.
ఆప్ కోడ్ 38 16 SEC కోసం (సూచించిన చిరునామా) $0200 చిరునామాలో ఉంది. ఈ అధ్యాయంలోని అన్ని ప్రోగ్రామ్లు $0200 మెమరీ లొకేషన్లో ప్రారంభమవుతాయని భావించబడుతుంది, అక్కడ ఉండే ఏదైనా ప్రోగ్రామ్ను రద్దు చేస్తుంది; పేర్కొనడం మినహా. 'LDA $0213' కోసం ఆప్కోడ్, అంటే AD 16 , LDA కోసం (సంపూర్ణ చిరునామా) $0201 బైట్ స్థానంలో ఉంది. minuend యొక్క దిగువ బైట్ 10111111 $0213 యొక్క మెమరీ బైట్ స్థానంలో ఉంది. ప్రతి ఆప్కోడ్ ఒక బైట్ను ఆక్రమించిందని గుర్తుంచుకోండి. 'LDA $0213' యొక్క '$0213' చిరునామా $0202 మరియు $0203 బైట్ స్థానాల్లో ఉంది. “LDA $0213” సూచన మైన్యూఎండ్ యొక్క దిగువ బైట్ను అక్యుమ్యులేటర్కు లోడ్ చేస్తుంది.
'SBC $0215' కోసం ఆప్కోడ్, అంటే ED 16 , SBC కోసం (సంపూర్ణ చిరునామా) $0204 బైట్ స్థానంలో ఉంది. సబ్ట్రాహెండ్ యొక్క దిగువ బైట్ 01101010 $0215 బైట్ స్థానంలో ఉంది. 'ADC $0215' యొక్క '$0215' చిరునామా $0205 మరియు $0206 బైట్ స్థానాల్లో ఉంది. 'SBC $0215' సూచన సబ్ట్రాహెండ్ యొక్క దిగువ బైట్ను ఇప్పటికే అక్యుమ్యులేటర్లో ఉన్న మినియెండ్ దిగువ బైట్ నుండి తీసివేస్తుంది. ఇది రెండు పూరక వ్యవకలనం. ఫలితం తిరిగి సంచితంలో ఉంచబడుతుంది. ఎనిమిదవ బిట్ తర్వాత ఏదైనా క్యారీ యొక్క కాంప్లిమెంట్ (విలోమం) స్టేటస్ రిజిస్టర్ యొక్క క్యారీ ఫ్లాగ్కు పంపబడుతుంది. అధిక బైట్లతో రెండవ వ్యవకలనానికి ముందు ఈ క్యారీ ఫ్లాగ్ క్లియర్ చేయకూడదు. ఈ క్యారీ స్వయంచాలకంగా అధిక బైట్ల వ్యవకలనానికి జోడించబడుతుంది.
వ్యాఖ్య తదుపరి 57ని తీసుకుంటుంది 10 = 3916 16 బైట్లు. అయితే, ఇది “.asm” టెక్స్ట్ ఫైల్లో మాత్రమే ఉంటుంది. అది జ్ఞాపకశక్తికి చేరదు. అసెంబ్లర్ (ఒక ప్రోగ్రామ్) ద్వారా చేసిన అనువాదం ద్వారా ఇది తీసివేయబడుతుంది.
తదుపరి సూచన కోసం “STA $0217”, STA యొక్క ఆప్కోడ్, అంటే 8D 16 (సంపూర్ణ చిరునామా), $0207 బైట్ స్థానంలో ఉంది. 'STA $0217' యొక్క '$0217' చిరునామా $0208 మరియు $0209 మెమరీ స్థానాల్లో ఉంది. “STA $0217” సూచన అక్యుమ్యులేటర్ యొక్క ఎనిమిది-బిట్ కంటెంట్ను $0217 మెమరీ స్థానానికి కాపీ చేస్తుంది.
00101010 అయిన మినియెండ్ యొక్క అధిక బైట్ $0214 మెమరీ లొకేషన్లో ఉంది మరియు సబ్ట్రాహెండ్ యొక్క అధిక బైట్ 00010101 బైట్ లొకేషన్ $0216లో ఉంటుంది. 'LDA $0214' కోసం ఆప్కోడ్, అంటే AD 16 LDA కోసం (సంపూర్ణ చిరునామా), $020A బైట్ స్థానంలో ఉంది. 'LDA $0214' యొక్క '$0214' చిరునామా $020B మరియు $020C స్థానాల్లో ఉంది. “LDA $0214” సూచన అక్యుమ్యులేటర్కి మైన్యూఎండ్ యొక్క అధిక బైట్ను లోడ్ చేస్తుంది, అక్యుమ్యులేటర్లో ఉన్నవాటిని చెరిపివేస్తుంది.
'SBC $0216' కోసం ఆప్కోడ్, అంటే ED 16 SBC కోసం (సంపూర్ణ చిరునామా), $020D బైట్ స్థానంలో ఉంది. 'SBC $0216' యొక్క '$0216' చిరునామా $020E మరియు $020F బైట్ స్థానాల్లో ఉంది. 'SBC $0216' సూచన సబ్ట్రాహెండ్ యొక్క అధిక బైట్ను ఇప్పటికే అక్యుమ్యులేటర్లో ఉన్న మైన్యూఎండ్ (రెండు పూరక) యొక్క అధిక బైట్ నుండి తీసివేస్తుంది. ఫలితం తిరిగి అక్యుమ్యులేటర్లో ఉంచబడుతుంది. ఈ రెండవ వ్యవకలనం కోసం 1 క్యారీ ఉంటే, దాని పూరక స్థితి రిజిస్టర్ యొక్క క్యారీ సెల్లో స్వయంచాలకంగా ఉంచబడుతుంది. ఈ సమస్య కోసం పదహారవ బిట్ (ఎడమ)కి మించిన క్యారీ అవసరం లేనప్పటికీ, క్యారీ ఫ్లాగ్ని తనిఖీ చేయడం ద్వారా కాంప్లిమెంట్ క్యారీ జరుగుతుందో లేదో తనిఖీ చేయడం మంచిది.
'STA $0218' అయిన తదుపరి మరియు చివరి సూచన కోసం, STA యొక్క ఆప్కోడ్, అంటే 8D 16 (సంపూర్ణ చిరునామా), $0210 బైట్ స్థానంలో ఉంది. 'STA $0218' యొక్క '$0218' చిరునామా $0211 మరియు $0212 మెమరీ స్థానాల్లో ఉంది. “STA $0218” సూచన అక్యుమ్యులేటర్ యొక్క ఎనిమిది-బిట్ కంటెంట్ను $0218 మెమరీ స్థానానికి కాపీ చేస్తుంది. రెండు పదహారు-బిట్ సంఖ్యలతో వ్యవకలనం ఫలితంగా 0001010101010101 తక్కువ బైట్ $0217 మరియు 00010101 యొక్క అధిక బైట్ $0218 మెమరీ స్థానంలో ఉంది - తక్కువ ముగింపు.
6502 µP సంకలనం కోసం మాత్రమే సర్క్యూట్రీని కలిగి ఉంది మరియు పరోక్షంగా రెండు పూరక వ్యవకలనం కోసం. దీనికి గుణకారం మరియు భాగహారం కోసం సర్క్యూట్ లేదు. గుణకారం మరియు భాగహారం చేయడానికి, పాక్షిక ఉత్పత్తులు మరియు పాక్షిక డివిడెండ్ల బదిలీతో సహా వివరాలతో కూడిన అసెంబ్లీ భాషా ప్రోగ్రామ్ను వ్రాయాలి.
4.4 లాజికల్ ఆపరేషన్స్
6502 µPలో, OR కోసం జ్ఞాపకశక్తి ORA మరియు ప్రత్యేకమైన OR కోసం జ్ఞాపకశక్తి EOR. తార్కిక కార్యకలాపాలు సూచించిన చిరునామాను కలిగి లేవని గమనించండి. సూచించబడిన సంబోధనకు ఎటువంటి కార్యసాధకము ఉండదు. ప్రతి లాజికల్ ఆపరేటర్లు తప్పనిసరిగా రెండు ఆపరాండ్లను తీసుకోవాలి. మొదటిది అక్యుమ్యులేటర్లో ఉంది, మరియు రెండవది మెమరీలో లేదా సూచనలో ఉంది. ఫలితం (8-బిట్లు) తిరిగి అక్యుమ్యులేటర్లోకి వస్తుంది. అక్యుమ్యులేటర్లో మొదటిది తక్షణ సూచన ద్వారా అక్కడ ఉంచబడుతుంది లేదా సంపూర్ణ చిరునామాతో మెమరీ నుండి కాపీ చేయబడుతుంది. ఈ విభాగంలో, దృష్టాంతం కోసం సున్నా-పేజీ చిరునామా మాత్రమే ఉపయోగించబడుతుంది. ఈ లాజికల్ ఆపరేటర్లు అందరూ బిట్వైజ్ ఆపరేటర్లు.
మరియు
క్రింది పట్టిక Bitwise AND బైనరీ, హెక్సాడెసిమల్ మరియు దశాంశాలలో వివరిస్తుంది:
ఈ అధ్యాయంలోని అన్ని ప్రోగ్రామ్లు $0200 మెమరీ బైట్ స్థానంలో ప్రారంభం కావాలి. అయితే, ఈ విభాగంలోని ప్రోగ్రామ్లు 00000000 అధిక బైట్ లేకుండా పేజీ సున్నా వినియోగాన్ని వివరించే లక్ష్యంతో పేజీ సున్నాలో ఉన్నాయి. 2 . మునుపటి ANDing క్రింది విధంగా కోడ్ చేయబడవచ్చు:
LDA #$9A ; మెమరీ నుండి కాదు - తక్షణ చిరునామా
మరియు #$CD ; మెమరీ నుండి కాదు - తక్షణ చిరునామా
STA $30 ; సున్నా-ఆధారిత $0030 వద్ద $88ని నిల్వ చేస్తుంది
లేదా
కింది పట్టిక Bitwise ORను బైనరీ, హెక్సాడెసిమల్ మరియు దశాంశంలో వివరిస్తుంది:
LDA #$9A ; మెమరీ నుండి కాదు - తక్షణ చిరునామా
ORA #$CD ; మెమరీ నుండి కాదు - తక్షణ చిరునామా
STA $30 ; సున్నా-ఆధారిత $0030 వద్ద $CFని నిల్వ చేస్తుంది
ఉచిత
కింది పట్టిక Bitwise XORని బైనరీ, హెక్సాడెసిమల్ మరియు డెసిమల్లో వివరిస్తుంది:
LDA #$9A ; మెమరీ నుండి కాదు - తక్షణ చిరునామా
EOR #$CD ; మెమరీ నుండి కాదు - తక్షణ చిరునామా
STA $30 ; సున్నా-ఆధారిత $0030 వద్ద $57 నిల్వ చేస్తుంది
4.5 షిఫ్ట్ మరియు రొటేట్ ఆపరేషన్స్
షిఫ్ట్ మరియు రొటేట్ ఆపరేటర్ల కోసం జ్ఞాపకాలు మరియు ఆప్కోడ్లు:
ASL: ఒక బిట్ అక్యుమ్యులేటర్ లేదా మెమరీ లొకేషన్ను ఎడమవైపుకి మార్చండి, ఖాళీ చేయబడిన కుడివైపు సెల్లో 0ని చొప్పించండి.
LSR: ఖాళీ చేయబడిన ఎడమవైపు సెల్లో 0ని చొప్పించి, అక్యుమ్యులేటర్ లేదా మెమరీ లొకేషన్లో ఒక బిట్ కుడివైపుకి మార్చండి.
ROL: అక్యుమ్యులేటర్ లేదా మెమరీ లొకేషన్కు ఎడమవైపున ఒక బిట్ తిప్పండి, ఎడమవైపు డ్రాప్ అయిన బిట్ను ఖాళీ చేయబడిన కుడివైపు సెల్లో చొప్పించండి.
ROR: అక్యుమ్యులేటర్ లేదా మెమరీ లొకేషన్కు ఒక బిట్ కుడివైపు తిప్పండి, కుడివైపున డ్రాప్ అయిన బిట్ను ఖాళీగా ఉన్న ఎడమవైపు సెల్లోకి చొప్పించండి.
అక్యుమ్యులేటర్తో షిఫ్ట్ లేదా రొటేషన్ చేయడానికి, సూచన ఇలా ఉంటుంది:
LSR A
ఇది అక్యుమ్యులేటర్ అడ్రసింగ్ మోడ్ అని పిలువబడే మరొక చిరునామా విధానాన్ని ఉపయోగిస్తుంది.
బైట్ మెమరీ స్థానంతో షిఫ్ట్ లేదా రొటేషన్ చేయడానికి, సూచన ఇలా ఉంటుంది:
ROR $2BCD
ఇక్కడ 2BCD అనేది మెమరీ స్థానం.
మార్చడం లేదా తిప్పడం కోసం తక్షణ లేదా సూచించిన చిరునామా మోడ్ లేదని గమనించండి. ఇన్స్ట్రక్షన్లో మాత్రమే మిగిలి ఉన్న సంఖ్యను మార్చడం లేదా తిప్పడం వల్ల ఎటువంటి ప్రయోజనం ఉండదు కాబట్టి తక్షణ చిరునామా మోడ్ లేదు. 6502 µP రూపకర్తలు అక్యుమ్యులేటర్ (A రిజిస్టర్) లేదా మెమరీ బైట్ లొకేషన్లోని కంటెంట్ను మాత్రమే మార్చాలని లేదా తిప్పాలని కోరుకుంటున్నందున సూచించబడిన అడ్రసింగ్ మోడ్ లేదు.
4.6 రిలేటివ్ అడ్రస్సింగ్ మోడ్
మైక్రోప్రాసెసర్ ఎల్లప్పుడూ (1, 2, లేదా 3 యూనిట్ల ద్వారా) ప్రోగ్రామ్ కౌంటర్ (PC)ని అమలు చేయాల్సిన తదుపరి సూచనను సూచించడానికి పెంచుతుంది. 6502 µP ఒక సూచనను కలిగి ఉంది, దీని జ్ఞాపకార్థం BVS అంటే ఓవర్ఫ్లో సెట్లో బ్రాంచ్ అని అర్థం. PC రెండు బైట్లను కలిగి ఉంటుంది. ఈ సూచన PCకి వేరే మెమరీ చిరునామాను కలిగి ఉంటుంది, తదుపరి సూచనను సాధారణ ఇంక్రిమెంట్ నుండి అమలు చేయకూడదు. ఇది PC యొక్క కంటెంట్కి ఆఫ్సెట్ అని పిలువబడే విలువను జోడించడం లేదా తీసివేయడం ద్వారా అలా చేస్తుంది. కాబట్టి, కంప్యూటర్ అక్కడ నుండి ఎగ్జిక్యూట్ చేయడం కోసం PC వేరే (బ్రాంచ్డ్) మెమరీ స్థానాన్ని సూచిస్తుంది. ఆఫ్సెట్ -128 నుండి పూర్ణాంకం 10 +127కి 10 (రెండు పూరక). కాబట్టి, ఆఫ్సెట్ మెమరీలో ముందుకు వెళ్లేలా చేస్తుంది. ఇది సానుకూలంగా ఉంటే లేదా మెమరీలో వెనుకబడి ఉంటే లేదా ప్రతికూలంగా ఉంటే.
BVS సూచన ఆఫ్సెట్ అయిన ఒక ఆపరాండ్ను మాత్రమే తీసుకుంటుంది. BVS సంబంధిత చిరునామాను ఉపయోగిస్తుంది. కింది సూచనలను పరిగణించండి:
BVS $7F
బేస్ టూలో, 7F హెచ్ 01111111 2 = 127 10 . తదుపరి సూచనల కోసం PCలోని కంటెంట్ $0300 అని భావించండి. BVS సూచనల కారణంగా $7F (ఇప్పటికే రెండు పూరకాలలో ఉన్న సానుకూల సంఖ్య) $037Fని అందించడానికి $0300కి జోడించబడుతుంది. కాబట్టి, $0300 మెమరీ లొకేషన్లో అమలు చేయాల్సిన తదుపరి సూచనకు బదులుగా, ఇది $037F (సుమారు సగం పేజీ తేడా) మెమరీ లొకేషన్లో ఉంటుంది.
ఇతర శాఖ సూచనలు ఉన్నాయి, కానీ సంబంధిత చిరునామాను వివరించడానికి BVS చాలా మంచిది. బ్రాంచ్ సూచనలతో సంబంధిత చిరునామా వ్యవహరిస్తుంది.
4.7 ఇండెక్స్డ్ అడ్రసింగ్ మరియు పరోక్ష చిరునామా విడిగా
ఈ అడ్రసింగ్ మోడ్లు 6502 µPని తగ్గించిన సూచనలతో తక్కువ వ్యవధిలో అపారమైన డేటాను నిర్వహించడానికి వీలు కల్పిస్తాయి. మొత్తం Comodore-64 మెమరీకి 64KB స్థానాలు ఉన్నాయి. కాబట్టి, ఏదైనా బైట్ స్థానాన్ని యాక్సెస్ చేయడానికి, 16 బిట్లు, రెండు బైట్లను తయారు చేయడం అవసరం. రెండు బైట్ల అవసరానికి మినహాయింపు ఒక్కటే పేజీ సున్నాకి మాత్రమే ఉంది, ఇక్కడ మెమరీలో సూచనల ద్వారా తీసుకోబడిన స్థలాన్ని పొదుపు చేయడానికి $00 అధిక బైట్ తొలగించబడుతుంది. నాన్-పేజ్-జీరో అడ్రసింగ్ మోడ్తో, 16-బిట్ మెమరీ చిరునామా యొక్క అధిక మరియు దిగువ బైట్లు రెండూ ఎక్కువగా సూచించబడతాయి.
ప్రాథమిక సూచిక చిరునామా
సంపూర్ణ సూచిక చిరునామా
X లేదా Y రిజిస్టర్ను ఇండెక్స్ రిజిస్టర్ అని గుర్తుంచుకోండి. కింది సూచనలను పరిగణించండి:
LDA $C453,X
6 విలువ అని ఊహిద్దాం హెచ్ X రిజిస్టర్లో ఉంది. సూచనలో ఎక్కడా 6 టైప్ చేయలేదని గమనించండి. ఈ సూచన C453కి 6H విలువను జోడిస్తుంది హెచ్ టెక్స్ట్ ఫైల్లో టైప్ చేసిన ఇన్స్ట్రక్షన్లో భాగం ఇంకా అసెంబుల్ చేయవలసి ఉంది - C453 హెచ్ + 6 హెచ్ = C459 హెచ్ . LDA అంటే అక్యుమ్యులేటర్కి బైట్ను లోడ్ చేయండి. అక్యుమ్యులేటర్లోకి లోడ్ చేయాల్సిన బైట్ $C459 చిరునామా నుండి వస్తుంది. $C459 అనేది సూచన మరియు 6తో టైప్ చేయబడిన $C453 మొత్తం హెచ్ X రిజిస్టర్లో కనుగొనబడినది అక్యుమ్యులేటర్లోకి లోడ్ చేయవలసిన బైట్ నుండి వచ్చే ప్రభావవంతమైన చిరునామా అవుతుంది. ఒకవేళ 6 హెచ్ Y రిజిస్టర్లో ఉంది, సూచనలో X స్థానంలో Y అని టైప్ చేయబడింది.
టైప్ చేసిన ఇన్స్ట్రక్షన్ స్టేట్మెంట్లో, $C453ని బేస్ అడ్రస్ మరియు 6 అని పిలుస్తారు హెచ్ X లేదా Y రిజిస్టర్లో సమర్థవంతమైన చిరునామా కోసం లెక్కింపు లేదా సూచిక భాగం అంటారు. ఆధార చిరునామా మెమరీలోని ఏదైనా బైట్ చిరునామాను మరియు తదుపరి 256ని సూచించగలదు 10 X లేదా Y రిజిస్టర్లో ప్రారంభ సూచిక (లేదా గణన) 0 అని భావించి చిరునామాలను యాక్సెస్ చేయవచ్చు. ఒక బైట్ 256 వరకు నిరంతర పరిధిని ఇవ్వగలదని గుర్తుంచుకోండి 10 సంఖ్యలు (అనగా 00000000 2 11111111కి 2 )
కాబట్టి, ప్రభావవంతమైన చిరునామాను పొందేందుకు సూచనలతో టైప్ చేసిన 16 చిరునామాలకు X లేదా Y రిజిస్టర్లో ఇప్పటికే ఉంచిన (మరొక సూచన ద్వారా ఉంచబడినది) సంపూర్ణ చిరునామా జోడిస్తుంది. టైప్ చేసిన సూచనలో, రెండు సూచిక రిజిస్టర్లు కామా తర్వాత టైప్ చేయబడిన X లేదా Y ద్వారా వేరు చేయబడతాయి. X లేదా Y టైప్ చేయబడింది; రెండూ కాదు.
అన్ని ప్రోగ్రామ్లను టెక్స్ట్ ఎడిటర్లో టైప్ చేసి, “.asm” పొడిగింపు ఫైల్నేమ్తో సేవ్ చేసిన తర్వాత, అసెంబ్లర్, మరొక ప్రోగ్రామ్, టైప్ చేసిన ప్రోగ్రామ్ను మెమరీలో (లోడ్ చేయబడిన) దానికి అనువదించాలి. మునుపటి సూచన, ఇది “LDA $C453,X”, మెమరీలో మూడు బైట్ స్థానాలను ఆక్రమించింది మరియు ఐదు కాదు.
LDA వంటి జ్ఞాపిక ఒకటి కంటే ఎక్కువ ఆప్కోడ్లను కలిగి ఉంటుందని గుర్తుంచుకోండి (వివిధ బైట్లు). X రిజిస్టర్ని ఉపయోగించే సూచనల కోసం ఆప్కోడ్ Y రిజిస్టర్ని ఉపయోగించే ఆప్కోడ్కు భిన్నంగా ఉంటుంది. టైప్ చేసిన సూచనల ఆధారంగా ఏ ఆప్కోడ్ ఉపయోగించాలో అసెంబ్లర్కు తెలుసు. 'LDA $C453,X' కోసం ఒక బైట్ ఆప్కోడ్, 'LDA $C453,Y' కోసం ఒక బైట్ ఆప్కోడ్ నుండి భిన్నంగా ఉంటుంది. వాస్తవానికి, “LDA $C453,X”లో LDAకి ఆప్కోడ్ BD, మరియు “LDA $C453,9”లో LDAకి ఆప్కోడ్ BD.
LDA కోసం ఆప్కోడ్ $0200 బైట్ లొకేషన్లో ఉంటే. అప్పుడు, $C453 యొక్క 16-బిట్ చిరునామా మెమరీలో $0201 మరియు $0202 ఉన్న బైట్ స్థానాలకు ప్రక్కన పడుతుంది. నిర్దిష్ట ఆప్కోడ్ బైట్ అది X రిజిస్టర్నా లేదా Y రిజిస్టర్లో చేరి ఉందా అని సూచిస్తుంది. కాబట్టి, 'LDA $C453,X' లేదా 'LDA $C453,Y' అసెంబుల్ చేయబడిన భాషా సూచన మెమరీలో వరుసగా మూడు బైట్లను ఆక్రమిస్తుంది మరియు నాలుగు లేదా ఐదు కాదు.
జీరో-పేజ్ ఇండెక్స్డ్ అడ్రెస్సింగ్
సున్నా-పేజీ ఇండెక్స్ అడ్రసింగ్ అనేది మునుపు వివరించిన సంపూర్ణ ఇండెక్స్ అడ్రసింగ్ లాగా ఉంటుంది, అయితే టార్గెట్ బైట్ తప్పనిసరిగా పేజీ సున్నాలో మాత్రమే ఉండాలి ($0000 నుండి $00FF వరకు). ఇప్పుడు, సున్నా పేజీతో వ్యవహరించేటప్పుడు, అధిక బైట్ ఎల్లప్పుడూ 00 హెచ్ మెమరీ స్థానాలు సాధారణంగా నివారించబడతాయి. కాబట్టి, పేజీ సున్నా $00 నుండి FF వరకు ప్రారంభమవుతుంది అని సాధారణంగా పేర్కొనబడింది. కాబట్టి, 'LDA $C453,X' యొక్క మునుపటి సూచన:
LDA $53.X
$C4, పేజీ సున్నాకి ఎగువన ఉన్న పేజీని సూచించే అధిక బైట్, ఈ సూచనలో ఉపయోగించబడదు, ఎందుకంటే ఇది ఆశించిన లక్ష్య బైట్ను పేజీ సున్నాకి వెలుపల మరియు పైన సేకరించబడిన బైట్లో లోడ్ చేస్తుంది.
సూచనలో టైప్ చేసిన విలువను ఇండెక్స్ రిజిస్టర్లోని విలువకు జోడించినప్పుడు, మొత్తం పేజీ సున్నా (FF) కంటే ఎక్కువ ఫలితాన్ని ఇవ్వకూడదు. హెచ్ ) కాబట్టి, 'LDA $FF, X' వంటి సూచన మరియు FF వంటి విలువను కలిగి ఉండటం ప్రశ్నే కాదు హెచ్ ఇండెక్స్ రిజిస్టర్లో ఎందుకంటే FF హెచ్ + FF హెచ్ = 200 హెచ్ ఇది మెమరీలో పేజీ 2 (మూడవ పేజీ) యొక్క మొదటి బైట్ ($0200) స్థానం, ఇది పేజీ 0 నుండి చాలా దూరంలో ఉంది. కాబట్టి, సున్నా-పేజీ సూచిక చేయబడిన చిరునామాతో, ప్రభావవంతమైన చిరునామా తప్పనిసరిగా పేజీ సున్నాలో ఉండాలి.
పరోక్ష ప్రసంగం
జంప్ సంపూర్ణ చిరునామా
సంపూర్ణ పరోక్ష చిరునామా గురించి చర్చించే ముందు, మొదట JMP సంపూర్ణ చిరునామాను పరిశీలించడం మంచిది. ఆసక్తి విలువ (టార్గెట్ బైట్) ఉన్న చిరునామా $8765 అని భావించండి. ఇది రెండు బైట్లను కలిగి ఉన్న 16-బిట్లు: అధిక బైట్ 87 హెచ్ మరియు దిగువ బైట్ 65 హెచ్ . కాబట్టి, $8765 కోసం రెండు బైట్లు తదుపరి సూచనల కోసం PC (ప్రోగ్రామ్ కౌంటర్)లో ఉంచబడ్డాయి. అసెంబ్లీ భాషా ప్రోగ్రామ్ (ఫైల్)లో టైప్ చేయబడినవి:
JMP $8765
మెమరీలో ఎగ్జిక్యూటింగ్ ప్రోగ్రామ్ యాక్సెస్ చేసిన చిరునామా నుండి $8765కి జంప్ అవుతుంది. JMP మెమోనిక్లో 4C, 6C మరియు 7C అనే మూడు ఆప్కోడ్లు ఉన్నాయి. ఈ సంపూర్ణ చిరునామా కోసం ఆప్కోడ్ 4C. JMP సంపూర్ణ పరోక్ష చిరునామా కోసం ఆప్కోడ్ 6C (క్రింది దృష్టాంతాలను చూడండి).
సంపూర్ణ పరోక్ష చిరునామా
ఇది జంప్ (JMP) సూచనతో మాత్రమే ఉపయోగించబడుతుంది. ఆసక్తి గల బైట్ (టార్గెట్ బైట్) ఉన్న చిరునామా $8765 అని భావించండి. ఇది రెండు బైట్లను కలిగి ఉన్న 16-బిట్లు: అధిక బైట్ 87 హెచ్ మరియు దిగువ బైట్ 65 హెచ్ . సంపూర్ణ పరోక్ష చిరునామాతో, ఈ రెండు బైట్లు వాస్తవానికి మెమరీలో మరెక్కడా వరుసగా రెండు బైట్ స్థానాల్లో ఉన్నాయి.
అవి $0210 మరియు $0211 మెమరీ స్థానాల్లో ఉన్నాయని ఊహించండి. అప్పుడు, ఆసక్తి చిరునామా యొక్క దిగువ బైట్ 65 హెచ్ $0210 చిరునామాలో ఉంది మరియు అధిక బైట్ 87 హెచ్ $0211 చిరునామాలో ఉంది. అంటే ఆసక్తి యొక్క తక్కువ మెమరీ బైట్ తక్కువ వరుస చిరునామాకు వెళుతుంది మరియు ఆసక్తి యొక్క అధిక మెమరీ బైట్ అధిక వరుస చిరునామాకు వెళుతుంది - చిన్న అంతిమత్వం.
16-బిట్ చిరునామా మెమరీలో రెండు వరుస చిరునామాలను సూచిస్తుంది. ఆ వెలుగులో, $0210 చిరునామా $0210 మరియు $0211 చిరునామాలను సూచిస్తుంది. $0210 మరియు $0211 చిరునామా జత లక్ష్య బైట్ యొక్క అంతిమ చిరునామాను (రెండు బైట్ల 16-బిట్లు) కలిగి ఉంది, తక్కువ బైట్ 65తో ఉంటుంది హెచ్ $0210 మరియు అధిక బైట్ 87 హెచ్ $0211లో. కాబట్టి, టైప్ చేయబడిన జంప్ సూచన:
JMP ($0210)
JMP మెమోనిక్లో 4C, 6C మరియు 7C అనే మూడు ఆప్కోడ్లు ఉన్నాయి. సంపూర్ణ పరోక్ష చిరునామా కోసం ఆప్కోడ్ 6C. టెక్స్ట్ ఫైల్లో టైప్ చేయబడినది “JMP ($0210)”. కుండలీకరణాల కారణంగా, అసెంబ్లర్ (అనువాదకుడు) JMP కోసం ఆప్కోడ్ 6Cని ఉపయోగిస్తుంది మరియు 4C లేదా 7C కాదు.
సంపూర్ణ పరోక్ష చిరునామాతో, వాస్తవానికి మూడు మెమరీ ప్రాంతాలు ఉన్నాయి. మొదటి ప్రాంతం $0200, $0201 మరియు $0202 బైట్ స్థానాలను కలిగి ఉండవచ్చు. ఇది 'JMP ($0210)' సూచన కోసం మూడు బైట్లను కలిగి ఉంది. రెండవ ప్రాంతం, మొదటి దానికి పక్కన అవసరం లేదు, $0210 మరియు $0211 యొక్క రెండు వరుస బైట్ స్థానాలను కలిగి ఉంటుంది. అసెంబ్లీ భాషా ప్రోగ్రామ్ సూచనలో టైప్ చేయబడిన దిగువ బైట్ ($0210). ఆసక్తి చిరునామా $8765 అయితే, తక్కువ బైట్ 65 హెచ్ $0210 బైట్ లొకేషన్లో ఉంది మరియు అత్యధిక బైట్ 87 హెచ్ $0211 బైట్ స్థానంలో ఉంది. మూడవ ప్రాంతం కేవలం ఒక బైట్ స్థానాన్ని కలిగి ఉంటుంది. ఇది లక్షిత బైట్ (ఆసక్తి యొక్క అంతిమ బైట్) కోసం $8765 చిరునామాకు చెందినది. $0210 మరియు $0211 వరుస చిరునామాల జత, ఆసక్తి చిరునామా అయిన $8765 పాయింటర్ను కలిగి ఉంది. కంప్యూటింగ్ ఇంటర్ప్రెటేషన్ తర్వాత, టార్గెట్ బైట్ని యాక్సెస్ చేయడానికి PC (ప్రోగ్రామ్ కౌంటర్)లోకి $8765 అవుతుంది.
సున్నా పేజీ పరోక్ష చిరునామా
ఈ చిరునామా సంపూర్ణ పరోక్ష చిరునామా వలె ఉంటుంది, కానీ పాయింటర్ తప్పనిసరిగా పేజీ సున్నాలో ఉండాలి. పాయింటర్ ప్రాంతం యొక్క దిగువ బైట్ చిరునామా ఈ క్రింది విధంగా టైప్ చేసిన సూచనలో ఉంది:
JMP ($50)
పాయింటర్ యొక్క అధిక బైట్ $51 బైట్ స్థానంలో ఉంది. ప్రభావవంతమైన చిరునామా (పాయింటెడ్) పేజీ సున్నాలో ఉండవలసిన అవసరం లేదు.
కాబట్టి, ఇండెక్స్ అడ్రసింగ్తో, ఇండెక్స్ రిజిస్టర్లోని విలువ ప్రభావవంతమైన చిరునామాను కలిగి ఉండటానికి సూచనలో ఇవ్వబడిన మూల చిరునామాకు జోడించబడుతుంది. పరోక్ష చిరునామా పాయింటర్ను ఉపయోగిస్తుంది.
4.8 ఇండెక్స్డ్ పరోక్ష చిరునామా
సంపూర్ణ ఇండెక్స్డ్ పరోక్ష చిరునామా
ఈ అడ్రసింగ్ మోడ్ JMP సూచనతో మాత్రమే ఉపయోగించబడుతుంది.
సంపూర్ణ పరోక్ష చిరునామాతో, దాని స్వంత రెండు వరుస బైట్ చిరునామాలతో పాయింటెడ్ విలువ (బైట్) ఉంటుంది. ఈ రెండు వరుస చిరునామాలు మెమరీలో రెండు వరుస బైట్ల పాయింటర్ ప్రాంతంలో ఉండేలా పాయింటర్ను ఏర్పరుస్తాయి. పాయింటర్ ప్రాంతం యొక్క దిగువ బైట్ అనేది కుండలీకరణాల్లోని సూచనలో టైప్ చేయబడినది. పాయింటర్ అనేది పాయింటెడ్ విలువ యొక్క చిరునామా. మునుపటి పరిస్థితిలో, $8765 అనేది పాయింటెడ్ విలువ యొక్క చిరునామా. $0210 (తర్వాత $0211) అనేది పాయింటర్ అయిన $8765 కంటెంట్ ఉన్న చిరునామా. సంపూర్ణ పరోక్ష చిరునామా విధానంతో, అది ($0210) ప్రోగ్రామ్లో (టెక్స్ట్ ఫైల్) కుండలీకరణాలతో సహా టైప్ చేయబడుతుంది.
మరోవైపు, సంపూర్ణ ఇండెక్స్డ్ పరోక్ష చిరునామా మోడ్తో, టైప్ చేసిన చిరునామాకు X రిజిస్టర్లోని విలువను జోడించడం ద్వారా పాయింటర్ ప్రాంతానికి దిగువ చిరునామా బైట్ ఏర్పడుతుంది. ఉదాహరణకు, పాయింటర్ $0210 చిరునామా స్థానంలో ఉంటే, టైప్ చేసిన సూచన ఇలా ఉండవచ్చు:
JMP ($020A,X)
X రిజిస్టర్కి 6 విలువ ఉంటుంది హెచ్ . 020A హెచ్ + 6 హెచ్ = 0210 హెచ్ . ఈ అడ్రసింగ్ మోడ్తో Y రిజిస్టర్ ఉపయోగించబడదు.
జీరో పేజ్ ఇండెక్స్డ్ పరోక్ష చిరునామా
ఈ అడ్రసింగ్ మోడ్ X రిజిస్టర్ని ఉపయోగిస్తుంది మరియు Y రిజిస్టర్ని కాదు. ఈ అడ్రసింగ్ మోడ్తో, దాని రెండు-బైట్ అడ్రస్ పాయింటర్ ప్రాంతంలో ఇప్పటికీ పాయింటెడ్ విలువ మరియు పాయింటర్ ఉన్నాయి. పాయింటర్ కోసం పేజీ సున్నాలో వరుసగా రెండు బైట్లు ఉండాలి. సూచనలో టైప్ చేయబడిన చిరునామా ఒక బైట్ చిరునామా. ఈ విలువ X రిజిస్టర్లోని విలువకు జోడించబడుతుంది మరియు ఏదైనా క్యారీ విస్మరించబడుతుంది. ఫలితం పేజీ 0లోని పాయింటర్ ప్రాంతాన్ని సూచిస్తుంది. ఉదాహరణకు, ఆసక్తి ఉన్న చిరునామా (పాయింటెడ్) $8765 మరియు అది పేజీ 0లోని $50 మరియు $51 బైట్ స్థానాల్లో ఉంటే మరియు X రిజిస్టర్లో విలువ $30 అయితే, ది టైప్ చేసిన సూచన ఇలా ఉంటుంది:
LDA ($20.X)
ఎందుకంటే $20 + $30 = $50.
పరోక్ష సూచిక చిరునామా
ఈ అడ్రసింగ్ మోడ్ Y రిజిస్టర్ని ఉపయోగిస్తుంది మరియు X రిజిస్టర్ని కాదు. ఈ అడ్రసింగ్ మోడ్తో, పాయింటెడ్ వాల్యూ మరియు పాయింటర్ రీజియన్ ఇప్పటికీ ఉంది, అయితే పాయింటర్ రీజియన్ కంటెంట్ భిన్నంగా పనిచేస్తుంది. పాయింటర్ ప్రాంతం కోసం పేజీ సున్నాలో వరుసగా రెండు బైట్లు ఉండాలి. పాయింటర్ ప్రాంతం యొక్క దిగువ చిరునామా సూచనలో టైప్ చేయబడింది. పాయింటర్ ప్రాంతంలో ఉన్న ఈ సంఖ్య (జత బైట్లు) నిజమైన పాయింటర్ని కలిగి ఉండటానికి Y రిజిస్టర్లోని విలువకు జోడించబడుతుంది. ఉదాహరణకు, ఆసక్తి చిరునామా (పాయింటెడ్) $8765, 6H విలువ Y రిజిస్టర్లో ఉండాలి మరియు సంఖ్య (రెండు బైట్లు) 50 చిరునామాలో ఉండాలి. హెచ్ మరియు 51 హెచ్ . $875F + $6 = $8765 నుండి రెండు బైట్లు కలిపి $875F. టైప్ చేసిన సూచన ఇలా ఉంటుంది:
LDA ($50), Y
4.9 ఇంక్రిమెంట్, డిక్రిమెంట్ మరియు టెస్ట్-బిఐటీల సూచనలు
కింది పట్టిక ఇంక్రిమెంట్ మరియు డిక్రీమెంట్ సూచనల కార్యకలాపాలను చూపుతుంది:
INA మరియు DEA వరుసగా అక్యుమ్యులేటర్ను పెంచుతాయి మరియు తగ్గిస్తాయి. దాన్నే అక్యుమ్యులేటర్ అడ్రసింగ్ అంటారు. INX, DEX, INY మరియు DEY వరుసగా X మరియు Y రిజిస్టర్లకు సంబంధించినవి. వారు ఏ ఒపెరాండ్ తీసుకోరు. కాబట్టి, వారు సూచించిన చిరునామా మోడ్ను ఉపయోగిస్తారు. ఇంక్రిమెంట్ అంటే రిజిస్టర్ లేదా మెమరీ బైట్కి 1 జోడించడం. తగ్గింపు అంటే రిజిస్టర్ లేదా మెమరీ బైట్ నుండి 1ని తీసివేయడం.
INC మరియు DEC వరుసగా మెమరీ బైట్ను పెంచుతాయి మరియు తగ్గిస్తాయి (మరియు రిజిస్టర్ కాదు). సంపూర్ణ చిరునామాకు బదులుగా సున్నా పేజీ చిరునామాను ఉపయోగించడం అనేది సూచనల కోసం మెమరీని పొదుపు చేయడం. సున్నా పేజీ చిరునామా మెమరీలోని సూచనల కోసం సంపూర్ణ చిరునామా కంటే ఒక బైట్ తక్కువ. అయితే, సున్నా పేజీ చిరునామా మోడ్ పేజీ సున్నాని మాత్రమే ప్రభావితం చేస్తుంది.
BIT సూచన అక్యుమ్యులేటర్లోని 8 బిట్లతో మెమరీలోని బైట్ యొక్క బిట్లను పరీక్షిస్తుంది, కానీ ఏదీ మారదు. ప్రాసెసర్ స్థితి రిజిస్టర్ 'P' యొక్క కొన్ని ఫ్లాగ్లు మాత్రమే సెట్ చేయబడ్డాయి. పేర్కొన్న మెమరీ స్థానం యొక్క బిట్లు అక్యుమ్యులేటర్తో లాజికల్గా మరియు జోడించబడతాయి. అప్పుడు, కింది స్థితి బిట్లు సెట్ చేయబడతాయి:
- స్థితి రిజిస్టర్లో బిట్ 7 మరియు చివరి బిట్ (ఎడమ) అయిన N, ANDingకి ముందు మెమరీ స్థానం యొక్క బిట్ 7ని అందుకుంటుంది.
- స్టేటస్ రిజిస్టర్లో బిట్ 6 అయిన V, ANDingకి ముందు మెమరీ లొకేషన్లో బిట్ 6ని అందుకుంటుంది.
- AND యొక్క ఫలితం సున్నా అయితే (00000000) స్టేటస్ రిజిస్టర్ యొక్క Z ఫ్లాగ్ సెట్ చేయబడుతుంది (1 తయారు చేయబడింది) 2 ) లేకపోతే, అది క్లియర్ చేయబడింది (0 చేసినది).
4.10 సూచనలను సరిపోల్చండి
6502 µP కోసం కంపేర్ ఇన్స్ట్రక్షన్ మెమోనిక్స్ CMP, CPX మరియు CPY. ప్రతి పోలిక తర్వాత, ప్రాసెసర్ స్థితి రిజిస్టర్ 'P' యొక్క N, Z మరియు C ఫ్లాగ్లు ప్రభావితమవుతాయి. ఫలితం ప్రతికూల సంఖ్య అయినప్పుడు N ఫ్లాగ్ సెట్ చేయబడుతుంది (1 తయారు చేయబడింది). ఫలితం సున్నా (000000002) అయినప్పుడు Z ఫ్లాగ్ సెట్ చేయబడుతుంది (1 తయారు చేయబడింది). ఎనిమిది నుండి తొమ్మిదవ బిట్ వరకు క్యారీ ఉన్నప్పుడు C ఫ్లాగ్ సెట్ చేయబడింది (1 తయారు చేయబడింది). కింది పట్టిక వివరణాత్మక దృష్టాంతాన్ని ఇస్తుంది
'దానికంటే గొప్పది' అని అర్థం. దానితో, పోలిక పట్టిక స్వీయ వివరణాత్మకంగా ఉండాలి.
4.11 జంప్ మరియు బ్రాంచ్ సూచనలు
కింది పట్టిక జంప్ మరియు శాఖ సూచనలను సంగ్రహిస్తుంది:
JMP సూచన సంపూర్ణ మరియు పరోక్ష చిరునామాను ఉపయోగిస్తుంది. పట్టికలోని మిగిలిన సూచనలు శాఖ సూచనలు. వారు 6502 µPతో సంబంధిత చిరునామాను మాత్రమే ఉపయోగిస్తారు. దానితో, పట్టిక ఎడమ నుండి కుడికి మరియు పై నుండి క్రిందికి చదివితే స్వీయ వివరణాత్మకంగా మారుతుంది.
ఇచ్చిన చిరునామా నుండి -128 నుండి +127 బైట్లలోపు చిరునామాలకు మాత్రమే శాఖలు వర్తింపజేయగలవని గమనించండి. ఇది సాపేక్ష చిరునామా. JMP మరియు శాఖ సూచనల కోసం, ప్రోగ్రామ్ కౌంటర్ (PC) నేరుగా ప్రభావితమవుతుంది. 6502 µP బ్రాంచ్లను సంపూర్ణ చిరునామాకు అనుమతించదు, అయితే జంప్ సంపూర్ణ చిరునామాను చేయగలదు. JMP సూచన శాఖ సూచన కాదు.
గమనిక: సంబంధిత చిరునామా బ్రాంచ్ సూచనలతో మాత్రమే ఉపయోగించబడుతుంది.
4.12 స్టాక్ ఏరియా
సబ్ట్రౌటిన్ అనేది రెండు సంఖ్యలను జోడించడానికి లేదా రెండు సంఖ్యలను తీసివేయడానికి మునుపటి చిన్న ప్రోగ్రామ్లలో ఒకటి. మెమరీలోని స్టాక్ ఏరియా $0100 నుండి $01FF వరకు మొదలవుతుంది. ఈ ప్రాంతాన్ని కేవలం స్టాక్ అని పిలుస్తారు. మైక్రోప్రాసెసర్ సబ్రూటీన్ సూచనలకు జంప్ చేసినప్పుడు (JSR - క్రింది చర్చను చూడండి), పూర్తయిన తర్వాత ఎక్కడికి తిరిగి రావాలో అది తెలుసుకోవాలి. 6502 µP ఈ సమాచారాన్ని (రిటర్న్ అడ్రస్) $0100 నుండి $01FF (స్టాక్ ప్రాంతం) వరకు తక్కువ మెమరీలో ఉంచుతుంది మరియు మైక్రోప్రాసెసర్లో “S” ఉన్న స్టాక్ పాయింటర్ రిజిస్టర్ కంటెంట్ను చివరిగా తిరిగి వచ్చిన చిరునామాకు పాయింటర్గా (9 బిట్లు) ఉపయోగిస్తుంది. అది మెమరీ యొక్క పేజీ 1 ($0100 నుండి $01FF)లో నిల్వ చేయబడుతుంది. స్టాక్ $01FF నుండి తగ్గుతుంది మరియు సబ్ట్రౌటిన్లను 128 స్థాయిల వరకు లోతుగా ఉంచడం సాధ్యం చేస్తుంది.
స్టాక్ పాయింటర్ యొక్క మరొక ఉపయోగం అంతరాయాలను నిర్వహించడం. 6502 µP IRQ మరియు NMI అని లేబుల్ చేయబడిన పిన్లను కలిగి ఉంది. ఈ పిన్లకు కొన్ని చిన్న ఎలక్ట్రికల్ సిగ్నల్లు వర్తింపజేయడం సాధ్యమవుతుంది మరియు 6502 µP ఒక ప్రోగ్రామ్ను అమలు చేయడం మానేసి మరొక ప్రోగ్రామ్ను అమలు చేయడం ప్రారంభించేలా చేస్తుంది. ఈ సందర్భంలో, మొదటి ప్రోగ్రామ్ అంతరాయం కలిగిస్తుంది. సబ్రూటీన్ల వలె, అంతరాయ కోడ్ విభాగాలు గూడులో ఉంటాయి. అంతరాయ ప్రాసెసింగ్ తదుపరి అధ్యాయంలో చర్చించబడింది.
గమనిక : స్టాక్ పాయింటర్ $0100 నుండి $01FF వరకు ఉన్న స్థానాలను అడ్రస్ చేయడంలో తక్కువ బైట్ చిరునామా కోసం 8 బిట్లను కలిగి ఉంది. 00000001 అధిక బైట్ 2 భావించబడుతుంది.
కింది పట్టిక స్టాక్ పాయింటర్ “S”కి A, X, Y మరియు P రిజిస్టర్లతో మెమరీలోని స్టాక్ ప్రాంతానికి సంబంధించిన సూచనలను అందిస్తుంది:
4.13 సబ్రూటీన్ కాల్ మరియు రిటర్న్
సబ్ట్రౌటిన్ అనేది నిర్దిష్ట లక్ష్యాన్ని సాధించే సూచనల సమితి. మునుపటి కూడిక లేదా తీసివేత ప్రోగ్రామ్ చాలా చిన్న సబ్ట్రౌటిన్. సబ్రూటీన్లను కొన్నిసార్లు రొటీన్లు అంటారు. సబ్ట్రౌటిన్ని కాల్ చేయడానికి సూచన:
JSR: సబ్రూటీన్కి వెళ్లండి
సబ్రూటీన్ నుండి తిరిగి రావడానికి సూచన:
RTS: సబ్రూటీన్ నుండి తిరిగి వెళ్ళు
మైక్రోప్రాసెసర్ మెమొరీలోని సూచనలను ఒకదాని తర్వాత ఒకటిగా నిరంతరం అమలు చేసే ధోరణిని కలిగి ఉంటుంది. మైక్రోప్రాసెసర్ ప్రస్తుతం కోడ్ సెగ్మెంట్ను ఎగ్జిక్యూట్ చేస్తోందని ఊహించండి మరియు అది ఇప్పటికే ఎగ్జిక్యూట్ చేయబడిన దాని వెనుక కోడ్ చేయబడిన కోడ్ సెగ్మెంట్కు వెళ్లి అమలు చేయడానికి జంప్ (JMP) సూచనను ఎదుర్కొంటుంది. ఇది ఆ కోడ్ సెగ్మెంట్ను వెనుక అమలు చేస్తుంది మరియు ప్రస్తుత కోడ్ సెగ్మెంట్ను మళ్లీ అమలు చేసి, దిగువ కొనసాగించే వరకు వెనుక ఉన్న కోడ్ సెగ్మెంట్ను అనుసరించి అన్ని కోడ్ విభాగాలను (సూచనలు) అమలు చేయడం కొనసాగిస్తుంది. JMP తదుపరి సూచనను స్టాక్కు నెట్టదు.
JMP వలె కాకుండా, JSR తదుపరి సూచనల చిరునామాను PC (ప్రోగ్రామ్ కౌంటర్) నుండి స్టాక్పైకి నెట్టివేస్తుంది. ఈ చిరునామా యొక్క స్టాక్ స్థానం స్టాక్ పాయింటర్ “S”లో ఉంచబడింది. సబ్ట్రౌటిన్లో RTS సూచన ఎదురైనప్పుడు (అమలు చేయబడినప్పుడు), స్టాక్పై నెట్టబడిన చిరునామా స్టాక్ను తీసివేస్తుంది మరియు సబ్రౌటిన్ కాల్కు ముందు తదుపరి సూచన చిరునామా అయిన ఆ పుల్-ఆఫ్ చిరునామా వద్ద ప్రోగ్రామ్ మళ్లీ ప్రారంభమవుతుంది. స్టాక్ నుండి తీసివేయబడిన చివరి చిరునామా ప్రోగ్రామ్ కౌంటర్కు పంపబడుతుంది. కింది పట్టిక JSR మరియు RTS సూచనల యొక్క సాంకేతిక వివరాలను అందిస్తుంది:
JSR మరియు RTS ఉపయోగాల కోసం క్రింది దృష్టాంతాన్ని చూడండి:
4.14 కౌంట్ డౌన్ లూప్ ఉదాహరణ
కింది సబ్ట్రౌటిన్ $FF నుండి $00కి (మొత్తం 256 10 గణనలు):
ప్రారంభించండి LDX #$FF ; $FF = 255తో Xని లోడ్ చేయండి
లూప్ DEX ; X = X – 1
BNE లూప్; X సున్నా కాకపోతే గోటో లూప్
RTS ; తిరిగి
ప్రతి పంక్తికి ఒక వ్యాఖ్య ఉంటుంది. అమలు కోసం వ్యాఖ్యలు ఎప్పుడూ మెమరీలోకి వెళ్లవు. ఎగ్జిక్యూషన్ (రన్నింగ్) కోసం ప్రోగ్రామ్ను మెమరీలో ఉన్న దానికి మార్చే అసెంబ్లర్ (అనువాదకుడు) ఎల్లప్పుడూ వ్యాఖ్యలను తీసివేయండి. వ్యాఖ్య “;”తో ప్రారంభమవుతుంది . ఈ ప్రోగ్రామ్లోని “ప్రారంభం” మరియు “లూప్” లేబుల్లు అంటారు. సూచనల చిరునామా కోసం లేబుల్ (పేరు) గుర్తిస్తుంది. సూచన ఒకే బైట్ సూచన అయితే (సూచించిన చిరునామా), లేబుల్ ఆ సూచన యొక్క చిరునామా. సూచన మల్టీబైట్ సూచన అయితే, లేబుల్ మల్టీబైట్ సూచనల కోసం మొదటి బైట్ను గుర్తిస్తుంది. ఈ ప్రోగ్రామ్ కోసం మొదటి సూచన రెండు బైట్లను కలిగి ఉంటుంది. ఇది $0300 చిరునామాతో మొదలవుతుందని ఊహిస్తే, $0300 చిరునామాను ప్రోగ్రామ్లో 'స్టార్ట్ డౌన్'తో భర్తీ చేయవచ్చు. రెండవ సూచన (DEX) అనేది ఒకే బైట్ సూచన, మరియు అది $0302 చిరునామాలో ఉండాలి. దీనర్థం $0302 చిరునామాను ప్రోగ్రామ్లో డౌన్ “లూప్”తో భర్తీ చేయవచ్చు, ఇది వాస్తవానికి “BNE లూప్”లో ఉంటుంది.
“BNE లూప్” అంటే స్టేటస్ రిజిస్టర్ యొక్క Z ఫ్లాగ్ 0 అయినప్పుడు ఇచ్చిన చిరునామాకు బ్రాంచ్ అని అర్థం. A లేదా X లేదా Y రిజిస్టర్లో విలువ 00000000 అయినప్పుడు 2 , చివరి ఆపరేషన్ కారణంగా, Z ఫ్లాగ్ 1 (సెట్). కాబట్టి, ఇది 0 (1 కాదు) అయితే, ప్రోగ్రామ్లోని రెండవ మరియు మూడవ సూచనలు ఆ క్రమంలో పునరావృతమవుతాయి. ప్రతి పునరావృత శ్రేణిలో, X రిజిస్టర్లోని విలువ (పూర్తి సంఖ్య) 1 తగ్గింది. DEX అంటే X = X – 1. X రిజిస్టర్లో విలువ $00 = 00000000 అయినప్పుడు 2 , Z 1 అవుతుంది. ఆ సమయంలో, రెండు సూచనల పునరావృతం ఉండదు. ప్రోగ్రామ్లోని చివరి RTS సూచన, ఇది ఒకే బైట్ సూచన (ఇంప్లైడ్ అడ్రసింగ్), సబ్ట్రౌటిన్ నుండి తిరిగి వస్తుంది. సబ్ట్రౌటిన్ కాల్కు ముందు అమలు చేయాల్సిన కోడ్ కోసం ప్రోగ్రామ్ కౌంటర్ చిరునామాను స్టాక్లో రూపొందించడం మరియు ప్రోగ్రామ్ కౌంటర్ (PC)కి తిరిగి వెళ్లడం ఈ సూచనల ప్రభావం. ఈ చిరునామా సబ్ట్రౌటిన్ని పిలవడానికి ముందు అమలు చేయాల్సిన సూచనల చిరునామా.
గమనిక: 6502 µP కోసం అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్ను వ్రాస్తున్నప్పుడు, ఒక లేబుల్ మాత్రమే లైన్ ప్రారంభంలో ప్రారంభం కావాలి; ఏదైనా ఇతర లైన్ కోడ్ తప్పనిసరిగా కనీసం ఒక ఖాళీని కుడివైపుకి మార్చాలి.
సబ్రూటీన్కి కాల్ చేస్తోంది
మునుపటి లేబుల్ల ద్వారా తీసుకోబడిన మెమరీ స్థలాన్ని విస్మరిస్తూ, ప్రోగ్రామ్ మెమరీ (RAM)లో $0300 నుండి $0305 వరకు వరుసగా 6 బైట్ల స్థానాలను తీసుకుంటుంది. ఈ సందర్భంలో, ప్రోగ్రామ్:
LDX #$FF ; $FF = 255తో Xని లోడ్ చేయండి
DEX ; X = X – 1
BNE $0302 ; X సున్నా కాకపోతే గోటో లూప్
RTS ; తిరిగి
మెమరీలో $0200 చిరునామా నుండి ప్రారంభించి సబ్ట్రౌటిన్కు కాల్ కావచ్చు. కాల్ సూచన:
JSR ప్రారంభం; ప్రారంభం చిరునామా $0300, అంటే, JSR $0300
టెక్స్ట్ ఎడిటర్ ఫైల్లో సరిగ్గా వ్రాయబడిన సబ్ట్రౌటిన్ మరియు దాని కాల్:
LDX #$FF ప్రారంభించండి; $FF = 255తో Xని లోడ్ చేయండి
లూప్ DEX ; X = X – 1
BNE లూప్; X సున్నా కాకపోతే గోటో లూప్
RTS ; తిరిగి
JSR ప్రారంభం: $0300 నుండి రొటీన్కి వెళ్లండి
ఇప్పుడు, ఒక పొడవైన ప్రోగ్రామ్లో చాలా సబ్ట్రౌటిన్లు ఉండవచ్చు. వారందరికీ 'ప్రారంభం' అనే పేరు ఉండకూడదు. వాటికి వేర్వేరు పేర్లు ఉండాలి. వాస్తవానికి, వాటిలో దేనికీ 'ప్రారంభం' అనే పేరు ఉండకపోవచ్చు. బోధన కారణాల కోసం ఇక్కడ 'ప్రారంభం' ఉపయోగించబడింది.
4.15 ప్రోగ్రామ్ను అనువదించడం
ప్రోగ్రామ్ను అనువదించడం లేదా సమీకరించడం అంటే అదే విషయం. కింది ప్రోగ్రామ్ను పరిగణించండి:
LDX #$FF ప్రారంభించండి : $FF = 255తో Xని లోడ్ చేయండి
లూప్ DEX: X = X – 1
BNE లూప్: X సున్నా కాకపోతే గోటో లూప్
RTS: తిరిగి
JSR ప్రారంభం: $0300 నుండి రొటీన్కి వెళ్లండి
ఇది గతంలో వ్రాసిన ప్రోగ్రామ్. ఇది సబ్ట్రౌటిన్, ప్రారంభం మరియు సబ్రౌటిన్కు కాల్ను కలిగి ఉంటుంది. ప్రోగ్రామ్ 255 నుండి కౌంట్ డౌన్ 10 0 వరకు 10 . ప్రోగ్రామ్ వినియోగదారు ప్రారంభ చిరునామా $0200 (RAM) వద్ద ప్రారంభమవుతుంది. ప్రోగ్రామ్ టెక్స్ట్ ఎడిటర్లో టైప్ చేయబడింది మరియు డిస్క్లో సేవ్ చేయబడుతుంది. దీనికి “sample.asm” వంటి పేరు ఉంది, ఇక్కడ “నమూనా” అనేది ప్రోగ్రామర్ ఎంపిక పేరు, అయితే అసెంబ్లీ భాష కోసం “.asm” పొడిగింపు తప్పనిసరిగా ఫైల్ పేరుతో అనుబంధించబడి ఉండాలి.
అసెంబ్లర్ అని పిలువబడే మరొక ప్రోగ్రామ్ ద్వారా సమీకరించబడిన ప్రోగ్రామ్ ఉత్పత్తి చేయబడుతుంది. అసెంబ్లర్ 6502 µP తయారీదారు లేదా మూడవ పక్షం ద్వారా సరఫరా చేయబడుతుంది. అసెంబ్లర్ ప్రోగ్రామ్ను ఎగ్జిక్యూట్ చేస్తున్నప్పుడు (రన్) మెమరీ (RAM)లో ఉండే విధంగా పునరుత్పత్తి చేస్తుంది.
JSR సూచన $0200 చిరునామాతో ప్రారంభమవుతుందని మరియు సబ్ట్రౌటిన్ $0300 చిరునామాతో ప్రారంభమవుతుందని భావించండి. అసెంబ్లర్ అన్ని వ్యాఖ్యలు మరియు తెల్లని ఖాళీలను తీసివేస్తుంది. వ్యాఖ్యలు మరియు ఖాళీలు ఎల్లప్పుడూ కొరతగా ఉండే జ్ఞాపకశక్తిని వృధా చేస్తాయి. మునుపటి సబ్రౌటీన్ కోడ్ సెగ్మెంట్ మరియు సబ్రూటీన్ కాల్ మధ్య ఖాళీ లైన్ వైట్స్పేస్కు ఉదాహరణ. అసెంబుల్ చేసిన ఫైల్ ఇప్పటికీ డిస్క్లో సేవ్ చేయబడింది మరియు దానికి “sample.exe” అని పేరు పెట్టారు. 'నమూనా' అనేది ప్రోగ్రామర్ యొక్క ఎంపిక పేరు, కానీ అది ఎక్జిక్యూటబుల్ ఫైల్ అని సూచించడానికి '.exe' పొడిగింపు ఉండాలి.
సమీకరించబడిన ప్రోగ్రామ్ను ఈ క్రింది విధంగా డాక్యుమెంట్ చేయవచ్చు:
ఇలాంటి పత్రాన్ని తయారు చేయడం చేతితో అసెంబ్లింగ్ చేయడమేనని అన్నారు. ఈ పత్రంలోని వ్యాఖ్యలు మెమరీలో కనిపించవని గమనించండి (ఎగ్జిక్యూషన్ కోసం). పట్టికలోని చిరునామా కాలమ్ మెమరీలోని సూచనల ప్రారంభ చిరునామాలను సూచిస్తుంది. “JSR ప్రారంభం” అంటే “JSR $0300”, ఇది “20 03 00”గా కోడ్ చేయబడుతుందని అంచనా వేయబడింది, వాస్తవానికి “20 00 03”గా కోడ్ చేయబడిందని గుర్తుంచుకోండి, తక్కువ మెమరీ బైట్ చిరునామాతో మెమరీలో తక్కువ బైట్ను తీసుకుంటుంది మరియు అధిక మెమరీ బైట్ చిరునామా మెమరీలో ఎక్కువ బైట్ని తీసుకుంటుంది - తక్కువ ముగింపు. JSR కోసం ఆప్కోడ్ 20 16 .
BNE వంటి బ్రాంచ్ ఇన్స్ట్రక్షన్కి ఆఫ్సెట్ 128 పరిధిలో రెండు పూరక సంఖ్య అని గమనించండి 10 నుండి + 127 10 . కాబట్టి, “BNE లూప్” అంటే “BNE-1 10 ” అంటే నిజానికి FF కోడ్ రూపంలో “D0 FF” 16 రెండు పూరకాలలో -1 అనేది బేస్ టూలో = 11111111 అని వ్రాయబడింది. అసెంబ్లర్ ప్రోగ్రామ్ లేబుల్లు మరియు ఫీల్డ్లను వాస్తవ హెక్సాడెసిమల్ సంఖ్యలకు భర్తీ చేస్తుంది (హెక్సాడెసిమల్ సంఖ్యలు నాలుగు బిట్లలో సమూహం చేయబడిన బైనరీ సంఖ్యలు). ప్రతి సూచన ప్రారంభమయ్యే వాస్తవ చిరునామాలు నిజానికి చేర్చబడ్డాయి.
గమనిక: “JSR ప్రారంభం” సూచనను చిన్న సూచనలతో భర్తీ చేయడం ద్వారా ప్రోగ్రామ్ కౌంటర్లోని ప్రస్తుత కంటెంట్ను (అధిక మరియు తక్కువ బైట్లు) స్టాక్ పాయింటర్తో స్టాక్కు పంపుతుంది, అది రెండు సార్లు తగ్గించబడుతుంది (అధిక బైట్కు ఒకసారి మరియు తక్కువ బైట్కు ఒకసారి) మరియు ఆపై $0300 చిరునామాతో PCని మళ్లీ లోడ్ చేస్తుంది. స్టాక్ పాయింటర్ ఇప్పుడు $00FDని సూచిస్తుంది, ఇది $01FFకి ప్రారంభించబడిందని ఊహిస్తుంది.
అలాగే, RTS సూచన అనేక చిన్న సూచనల ద్వారా భర్తీ చేయబడుతుంది, ఇది స్టాక్ పాయింటర్ “S”ని రెండుసార్లు (తక్కువ బైట్కి ఒకసారి మరియు అధిక బైట్కి ఒకసారి) పెంచుతుంది మరియు సంబంధిత రెండు బైట్ల చిరునామాలను స్టాక్ పాయింటర్ నుండి PCకి లాగుతుంది. తదుపరి సూచన.
గమనిక: లేబుల్ టెక్స్ట్లో 8 కంటే ఎక్కువ అక్షరాలు ఉండకూడదు.
“BNE లూప్” సంబంధిత చిరునామాను ఉపయోగిస్తుంది. దీని అర్థం -3ని జోడించడం 10 తదుపరి ప్రోగ్రామ్ కౌంటర్ కంటెంట్ $0305కి. “BNE లూప్” కోసం బైట్లు “D0 FD”, ఇక్కడ FD అనేది -3కి రెండు పూరకంగా ఉంటుంది. 10 .
గమనిక: ఈ అధ్యాయం 6502 µP కోసం అన్ని సూచనలను అందించదు. అన్ని సూచనలు మరియు వాటి వివరాలను “SY6500 8-బిట్ మైక్రోప్రాసెసర్ ఫ్యామిలీ” అనే పత్రంలో చూడవచ్చు. ఈ పత్రం కోసం “6502.pdf” పేరుతో PDF ఫైల్ ఉంది, ఇది ఇంటర్నెట్లో ఉచితంగా లభిస్తుంది. ఈ పత్రంలో వివరించబడిన 6502 µP 65C02.
4.16 అంతరాయాలు
కమోడోర్ 64 యొక్క బాహ్య (నిలువు ఉపరితలం) పోర్ట్లకు అనుసంధానించబడిన ఏదైనా పరికరం యొక్క సంకేతాలు 6502 మైక్రోప్రాసెసర్ను చేరుకోవడానికి ముందు CIA 1 లేదా CIA 2 సర్క్యూట్ల (ICలు) గుండా వెళ్లాలి. 6502 µP యొక్క డేటా-బస్ నుండి సిగ్నల్లు ఏదైనా బాహ్య పరికరాన్ని చేరుకోవడానికి ముందు CIA 1 లేదా CIA 2 చిప్ ద్వారా పంపాలి. CIA అంటే కాంప్లెక్స్ ఇంటర్ఫేస్ అడాప్టర్. Figure 4.1 “Block Diagram of the Commodore_64 Motherboard”లో, బ్లాక్ ఇన్పుట్/అవుట్పుట్ పరికరాలు CIA 1 మరియు CIA 2ని సూచిస్తాయి. ప్రోగ్రామ్ రన్ అవుతున్నప్పుడు, కొనసాగించడానికి ముందు కొన్ని ఇతర కోడ్లను అమలు చేయడానికి అంతరాయం ఏర్పడుతుంది. హార్డ్వేర్ అంతరాయం మరియు సాఫ్ట్వేర్ అంతరాయాలు ఉన్నాయి. హార్డ్వేర్ అంతరాయానికి, 6502 µPకి రెండు ఇన్పుట్ సిగ్నల్ పిన్లు ఉన్నాయి. ఈ పిన్నుల పేర్లు IRQ మరియు NMI . ఇవి µP డేటా లైన్లు కావు. µP కోసం డేటా లైన్లు D7, D6, D5, D4, D3, D2, D1 మరియు D0; తక్కువ ముఖ్యమైన బిట్ కోసం D0 మరియు అత్యంత ముఖ్యమైన బిట్ కోసం D7 తో.
IRQ అంతరాయ అభ్యర్థన 'యాక్టివ్' తక్కువ. µPకి ఈ ఇన్పుట్ లైన్ సాధారణంగా ఎక్కువగా ఉంటుంది, దాదాపు 5 వోల్ట్ల వద్ద ఉంటుంది. ఇది సుమారుగా 0 వోల్ట్కి తగ్గినప్పుడు, అది µPని సూచించే అంతరాయ అభ్యర్థన. అభ్యర్థన మంజూరు చేయబడిన వెంటనే, లైన్ పైకి తిరిగి వెళుతుంది. అంతరాయ అభ్యర్థనను మంజూరు చేయడం అంటే µP అంతరాయాన్ని నిర్వహించే కోడ్కు (సబ్రౌటిన్) శాఖలను అందిస్తుంది.
NMI నాన్-మాస్కేబుల్ అంతరాయాన్ని 'యాక్టివ్' తక్కువ సూచిస్తుంది. కోసం కోడ్ ఉండగా IRQ అమలు చేస్తున్నారు NMI తక్కువ వెళ్ళవచ్చు. ఈ విషయంలో, NMI నిర్వహించబడుతుంది (దాని స్వంత కోడ్ అమలు చేయబడుతుంది). ఆ తరువాత, కోసం కోడ్ IRQ కొనసాగుతుంది. కోసం కోడ్ తర్వాత IRQ ముగుస్తుంది, ప్రధాన ప్రోగ్రామ్ కోడ్ కొనసాగుతుంది. అంటే, NMI అంతరాయం కలిగిస్తుంది IRQ హ్యాండ్లర్. కోసం సిగ్నల్ NMI µP నిష్క్రియంగా ఉన్నప్పుడు మరియు దేనినీ నిర్వహించనప్పటికీ లేదా ప్రధాన ప్రోగ్రామ్ను అమలు చేయనప్పటికీ µPకి ఇవ్వబడుతుంది.
గమనిక: ఇది నిజానికి అధిక నుండి తక్కువకు, యొక్క పరివర్తన NMI , అది NMI సిగ్నల్ - దాని గురించి మరింత తరువాత. IRQ సాధారణంగా CIA 1 నుండి వస్తుంది మరియు NMI సాధారణంగా CIA 2 నుండి వస్తుంది. NMI , ఇది నాన్-మాస్కేబుల్ అంతరాయాన్ని సూచిస్తుంది, ఇది నాన్-స్టాపబుల్ అంతరాయంగా పరిగణించబడుతుంది.
అంతరాయాలను నిర్వహించడం
అభ్యర్థన నుండి వచ్చినా IRQ లేదా NMI , ప్రస్తుత సూచన తప్పనిసరిగా పూర్తి చేయాలి. 6502లో A, X మరియు Y రిజిస్టర్లు మాత్రమే ఉన్నాయి. సబ్రౌటిన్ పనిచేస్తున్నప్పుడు, అది ఈ మూడు రిజిస్టర్లను కలిపి ఉపయోగిస్తూ ఉండవచ్చు. అంతరాయ హ్యాండ్లర్ ఇప్పటికీ సబ్రౌటీన్గా ఉంది, అయితే అలా చూడలేదు. ప్రస్తుత సూచన పూర్తయిన తర్వాత, 65C02 µP కోసం A, X మరియు Y రిజిస్టర్ల కంటెంట్లు స్టాక్లో సేవ్ చేయబడతాయి. ప్రోగ్రామ్ కౌంటర్ యొక్క తదుపరి సూచనల చిరునామా కూడా స్టాక్కు పంపబడుతుంది. µP అప్పుడు అంతరాయానికి సంబంధించిన కోడ్కి శాఖలుగా మారుతుంది. ఆ తర్వాత, A, X మరియు Y రిజిస్టర్ల కంటెంట్లు స్టాక్ నుండి రివర్స్ ఆర్డర్లో వాటిని పంపే క్రమంలో పునరుద్ధరించబడతాయి.
అంతరాయానికి ఉదాహరణ కోడింగ్
సరళత కోసం, µP కోసం రొటీన్ అని భావించండి IRQ అంతరాయం అంటే $01 మరియు $02 సంఖ్యలను జోడించడం మరియు $03 ఫలితాన్ని $0400 మెమరీ చిరునామాలో సేవ్ చేయడం. కోడ్:
ISR PHA
PHX
PHY
;
LDA #$01
ADC #$02
వాటి ధర $0400
;
PLY
PLX
PLA
RTI
ISR అనేది లేబుల్ మరియు PHA సూచన ఉన్న మెమరీ చిరునామాను గుర్తిస్తుంది. ISR అంటే ఇంటర్ప్ట్ సర్వీస్ రొటీన్. PHA, PHX మరియు PHY A, X, మరియు Y రిజిస్టర్ల యొక్క కంటెంట్లను అంతరాయానికి ముందు అమలు చేస్తున్న ఏదైనా కోడ్ (ప్రోగ్రామ్) ద్వారా అవసరమవుతుందనే ఆశతో వాటిని స్టాక్కు పంపుతాయి. తదుపరి మూడు సూచనలు అంతరాయ హ్యాండ్లర్ యొక్క ప్రధాన భాగాన్ని ఏర్పరుస్తాయి. PLY, PLX మరియు PLA సూచనలు ఆ క్రమంలో ఉండాలి మరియు అవి Y, X మరియు A రిజిస్టర్ల కంటెంట్లను తిరిగి తీసుకువస్తాయి. చివరి సూచన, ఇది RTI, (ఓపెరాండ్ లేకుండా) అంతరాయానికి ముందు అమలు చేస్తున్న కోడ్ (ప్రోగ్రామ్)కి అమలు యొక్క కొనసాగింపును అందిస్తుంది. RTI స్టాక్ నుండి అమలు చేస్తున్న కోడ్ యొక్క తదుపరి సూచనల చిరునామాను తిరిగి ప్రోగ్రామ్ కౌంటర్కు లాగుతుంది. RTI అంటే అంతరాయం నుండి రిటర్న్. దానితో, అంతరాయ నిర్వహణ (సబ్రౌటిన్) ముగిసింది.
సాఫ్ట్వేర్ అంతరాయం
6502 µP కోసం సాఫ్ట్వేర్ అంతరాయాన్ని కలిగి ఉండటానికి ప్రధాన మార్గం BRK సూచించిన చిరునామా సూచనను ఉపయోగించడం. ప్రధాన ప్రోగ్రామ్ నడుస్తోందని మరియు అది BRK సూచనను ఎదుర్కొంటుందని ఊహించండి. ఆ పాయింట్ నుండి, PCలోని తదుపరి సూచనల చిరునామా ప్రస్తుత సూచన పూర్తయినందున స్టాక్కు పంపబడాలి. సాఫ్ట్వేర్ సూచనలను నిర్వహించడానికి సబ్ట్రౌటిన్ను 'తదుపరి' అని పిలవాలి. ఈ అంతరాయ సబ్ట్రౌటిన్ A, X మరియు Y రిజిస్టర్ కంటెంట్లను స్టాక్కు నెట్టాలి. సబ్ట్రౌటిన్ యొక్క కోర్ అమలు చేయబడిన తర్వాత, A, X మరియు Y రిజిస్టర్ల కంటెంట్లు సబ్ట్రౌటిన్ను పూర్తి చేయడం ద్వారా స్టాక్ నుండి వాటి రిజిస్టర్లకు వెనక్కి లాగబడాలి. రొటీన్లో చివరి ప్రకటన RTI. RTI కారణంగా PC కంటెంట్ ఆటోమేటిక్గా స్టాక్ నుండి PCకి వెనక్కి తీసుకోబడుతుంది.
సబ్రూటీన్ మరియు ఇంటర్రప్ట్ సర్వీస్ రొటీన్ను పోల్చడం మరియు విరుద్ధంగా చేయడం
కింది పట్టిక సబ్రూటీన్ మరియు ఇంటర్రప్ట్ సర్వీస్ రొటీన్ని పోల్చి చూస్తుంది:
4.17 6502 ప్రధాన చిరునామా మోడ్ల సారాంశం
6502 కోసం ప్రతి సూచన ఒక బైట్, దాని తర్వాత సున్నా లేదా అంతకంటే ఎక్కువ ఆపరాండ్లు ఉంటాయి.
తక్షణ చిరునామా మోడ్
తక్షణ చిరునామా మోడ్తో, ఒపెరాండ్ తర్వాత, విలువ మెమొరీ చిరునామా కాదు. విలువకు ముందు # ఉండాలి. విలువ హెక్సాడెసిమల్లో ఉంటే “#” తర్వాత “$” ఉండాలి. 65C02 కోసం తక్షణ చిరునామా సూచనలు: ADC, AND, BIT, CMP, CPX, CPY, EOR, LDA, LDX, LDY, ORA, SBC. ఈ అధ్యాయంలో వివరించబడని ఇక్కడ జాబితా చేయబడిన సూచనలను ఎలా ఉపయోగించాలో తెలుసుకోవడానికి రీడర్ 65C02 µP కోసం డాక్యుమెంటేషన్ను సంప్రదించాలి. ఒక ఉదాహరణ సూచన:
LDA #$77
సంపూర్ణ చిరునామా మోడ్
సంపూర్ణ చిరునామా విధానంలో, ఒక ఆపరాండ్ ఉంది. ఈ ఒపెరాండ్ మెమరీలోని విలువ యొక్క చిరునామా (సాధారణంగా హెక్సాడెసిమల్ లేదా లేబుల్లో). 64వేలు ఉన్నాయి 10 = 65,536 10 6502 µP కోసం మెమరీ చిరునామాలు. సాధారణంగా, ఒక-బైట్ విలువ ఈ చిరునామాలలో ఒకదానిలో ఉంటుంది. 65C02 యొక్క సంపూర్ణ చిరునామా సూచనలు: ADC, మరియు, ASL, BIT, CMP, CPX, CPY, DEC, EOR, INC, JMP, JSR, LDA, LDX, LDY, LSR, ORA, ROL, ROR, SBC, STA , STX, STY, STZ, TRB, TSB. ఇక్కడ జాబితా చేయబడిన సూచనలను అలాగే ఈ అధ్యాయంలో వివరించబడని మిగిలిన అడ్రసింగ్ మోడ్లను ఎలా ఉపయోగించాలో తెలుసుకోవడానికి రీడర్ 65C02 µP కోసం డాక్యుమెంటేషన్ను సంప్రదించాలి. ఒక ఉదాహరణ సూచన:
అవి $1234
ఇంప్లైడ్ అడ్రస్సింగ్ మోడ్
సూచించిన చిరునామా విధానంలో, ఒపెరాండ్ లేదు. ప్రమేయం ఉన్న ఏదైనా µP రిజిస్టర్ సూచన ద్వారా సూచించబడుతుంది. 65C02 కోసం సూచించబడిన చిరునామా సూచనలు: BRK, CLC, CLD, CLI, CLV, DEX, DEY, INX, INY, NOP, PHA, PHP, PHX, PHY, PLA, PLP, PLX, PLY, RTI, RTS, SEC , SED, SEI, పన్ను, TAY, TSX, TXA, TXS, TYA. ఒక ఉదాహరణ సూచన:
DEX : X రిజిస్టర్ను ఒక యూనిట్తో తగ్గించండి.
సంబంధిత చిరునామా మోడ్
సంబంధిత అడ్రసింగ్ మోడ్ బ్రాంచ్ సూచనలతో మాత్రమే వ్యవహరిస్తుంది. రిలేటివ్ అడ్రసింగ్ మోడ్లో, ఒక ఆపరాండ్ మాత్రమే ఉంది. ఇది -128 నుండి విలువ 10 +127కి 10 . ఈ విలువను ఆఫ్సెట్ అంటారు. సంకేతం ఆధారంగా, ఈ విలువ ప్రోగ్రామ్ కౌంటర్ యొక్క తదుపరి సూచన నుండి జోడించబడుతుంది లేదా తీసివేయబడుతుంది, దీని ఫలితంగా ఉద్దేశించిన తదుపరి సూచన యొక్క చిరునామా వస్తుంది. సంబంధిత చిరునామా మోడ్ సూచనలు: BCC, BCS, BEQ, BMI, BNE, BPL, BRA, BVC, BVS. సూచనల ఉదాహరణలు:
BNE $7F : (స్టేటస్ రిజిస్టర్లో Z = 0 అయితే శాఖ, P)
ఇది ప్రస్తుత ప్రోగ్రామ్ కౌంటర్కి 127ను జోడిస్తుంది (అమలు చేయాల్సిన చిరునామా) మరియు ఆ చిరునామాలో సూచనలను అమలు చేయడం ప్రారంభిస్తుంది. అదేవిధంగా:
BEQ $F9 : (బ్రాంచ్ అయితే Z = : స్టేటస్ రిజిస్టర్లో, P)
ఇది ప్రస్తుత ప్రోగ్రామ్ కౌంటర్కు -7ని జోడిస్తుంది మరియు కొత్త ప్రోగ్రామ్ కౌంటర్ చిరునామాలో అమలును ప్రారంభిస్తుంది. ఒపెరాండ్ అనేది రెండు పూరక సంఖ్య.
సంపూర్ణ ఇండెక్స్డ్ అడ్రసింగ్
సంపూర్ణ సూచిక చిరునామాలో, X లేదా Y రిజిస్టర్లోని కంటెంట్ ఇచ్చిన సంపూర్ణ చిరునామాకు జోడించబడుతుంది ($0000 నుండి $FFFF వరకు, అంటే 0 నుండి ఎక్కడైనా 10 65536 వరకు 10 ) నిజమైన చిరునామాను కలిగి ఉండాలి. ఈ ఇచ్చిన సంపూర్ణ చిరునామాను ఆధార చిరునామా అంటారు. X రిజిస్టర్ ఉపయోగించినట్లయితే, అసెంబ్లీ సూచన ఇలా ఉంటుంది:
LDA $C453,X
Y రిజిస్టర్ ఉపయోగించబడితే, అది ఇలా ఉంటుంది:
LDA $C453,Y
X లేదా Y రిజిస్టర్ యొక్క విలువను కౌంట్ లేదా ఇండెక్స్ విలువ అని పిలుస్తారు మరియు ఇది $00 (0) నుండి ఎక్కడైనా ఉండవచ్చు 10 ) నుండి $FF (250 10 ) దీనిని ఆఫ్సెట్ అని పిలవరు.
సంపూర్ణ సూచిక చిరునామా సూచనలు: ADC, AND, ASL (X మాత్రమే), BIT (అక్యుమ్యులేటర్ మరియు మెమరీతో, X మాత్రమే), CMP, DEC (మెమరీ మరియు X మాత్రమే), EOR, INC (మెమరీ మరియు X మాత్రమే), LDA , LDX, LDY, LSR (X మాత్రమే), ORA, ROL (X మాత్రమే), ROR (X మాత్రమే), SBC, STA, STZ (X మాత్రమే).
సంపూర్ణ పరోక్ష చిరునామా
ఇది జంప్ సూచనలతో మాత్రమే ఉపయోగించబడుతుంది. దీనితో, ఇచ్చిన సంపూర్ణ చిరునామాకు పాయింటర్ చిరునామా ఉంటుంది. పాయింటర్ చిరునామా రెండు బైట్లను కలిగి ఉంటుంది. రెండు-బైట్ల పాయింటర్ మెమరీలోని గమ్యం బైట్ విలువను (అడ్రస్) సూచిస్తుంది. కాబట్టి, అసెంబ్లీ భాషా సూచన:
JMP ($3456)
కుండలీకరణాలతో, మరియు $13 అడ్రస్ లొకేషన్ $3456లో ఉంటే $EB $3457 (= $3456 + 1) చిరునామా స్థానంలో ఉంది. అప్పుడు, గమ్యం చిరునామా $13EB మరియు $13EB పాయింటర్. 34 తక్కువ బైట్ మరియు 56 అధిక బైట్ అయిన సూచనలో సంపూర్ణ $3456 కుండలీకరణాల్లో ఉంది.
4.18 6502 µP అసెంబ్లీ లాంగ్వేజ్తో స్ట్రింగ్ను సృష్టించడం
తదుపరి అధ్యాయంలో ప్రదర్శించినట్లుగా, మెమరీలో ఫైల్ను సృష్టించిన తర్వాత, ఫైల్ డిస్క్లో సేవ్ చేయబడుతుంది. ఫైల్కు పేరు పెట్టాలి. పేరు ఒక స్ట్రింగ్ యొక్క ఉదాహరణ. ప్రోగ్రామింగ్లో స్ట్రింగ్లకు అనేక ఇతర ఉదాహరణలు ఉన్నాయి.
ASCII కోడ్ల స్ట్రింగ్ను రూపొందించడానికి రెండు ప్రధాన మార్గాలు ఉన్నాయి. రెండు విధాలుగా, అన్ని ASCII కోడ్లు (అక్షరాలు) మెమరీలో వరుస బైట్ స్థానాలను తీసుకుంటాయి. ఒక మార్గంలో, ఈ బైట్ల క్రమానికి ముందు పూర్ణాంకం బైట్ ఉంటుంది, ఇది సీక్వెన్స్ (స్ట్రింగ్)లో పొడవు (అక్షరాల సంఖ్య). మరొక విధంగా, 00 అయిన నల్ బైట్ ద్వారా అక్షరాల క్రమం విజయవంతం అవుతుంది (వెంటనే అనుసరించబడుతుంది). 16 , అంటే $00. స్ట్రింగ్ యొక్క పొడవు (అక్షరాల సంఖ్య) ఈ ఇతర మార్గంలో సూచించబడలేదు. శూన్య అక్షరం మొదటి మార్గంలో ఉపయోగించబడలేదు.
ఉదాహరణకు, 'నేను నిన్ను ప్రేమిస్తున్నాను!' కోట్లు లేని స్ట్రింగ్. ఇక్కడ పొడవు 11; ఖాళీ ఒక ASCII బైట్ (అక్షరం)గా లెక్కించబడుతుంది. స్ట్రింగ్ మొదటి అక్షరం చిరునామా $0300తో మెమరీలో ఉంచబడాలని భావించండి.
మొదటి బైట్ 11 అయినప్పుడు క్రింది పట్టిక స్ట్రింగ్ మెమరీ సెట్టింగ్ను చూపుతుంది 10 = 0B 16 :
మొదటి బైట్ “I” మరియు చివరి బైట్ నల్ ($00) అయినప్పుడు క్రింది పట్టిక స్ట్రింగ్ మెమరీ సెట్టింగ్ను చూపుతుంది:
స్ట్రింగ్ను సృష్టించడం ప్రారంభించడానికి క్రింది సూచనలను ఉపయోగించవచ్చు:
వాటి ధర $0300
మొదటి బైట్ అక్యుమ్యులేటర్లో ఉందని భావించండి, అది $0300 చిరునామా స్థానానికి పంపబడుతుంది. ఈ సూచన రెండు సందర్భాలలో (రెండు రకాల స్ట్రింగ్లకు) వర్తిస్తుంది.
మెమరీ సెల్లలో అన్ని అక్షరాలను అమర్చిన తర్వాత, ఒక్కొక్కటిగా, స్ట్రింగ్ను లూప్ ఉపయోగించి చదవవచ్చు. మొదటి సందర్భంలో, పొడవు తర్వాత అక్షరాల సంఖ్య చదవబడుతుంది. రెండవ సందర్భంలో, అక్షరాలు 'I' నుండి 'Null' అయిన శూన్య అక్షరం కలిసే వరకు చదవబడతాయి.
4.19 6502 µP అసెంబ్లీ లాంగ్వేజ్తో శ్రేణిని సృష్టించడం
సింగిల్ బైట్ పూర్ణాంకాల శ్రేణి పూర్ణాంకాలతో వరుస మెమరీ బైట్ స్థానాలను కలిగి ఉంటుంది. అప్పుడు, మొదటి పూర్ణాంకం యొక్క స్థానాన్ని సూచించే పాయింటర్ ఉంది. కాబట్టి, పూర్ణాంకాల శ్రేణి రెండు భాగాలను కలిగి ఉంటుంది: పాయింటర్ మరియు స్థానాల శ్రేణి.
స్ట్రింగ్ల శ్రేణి కోసం, ప్రతి స్ట్రింగ్ మెమరీలో వేరే ప్రదేశంలో ఉంటుంది. ఆపై, పాయింటర్లతో వరుస మెమరీ స్థానాలు ఉన్నాయి, ఇక్కడ ప్రతి పాయింటర్ ప్రతి స్ట్రింగ్ యొక్క మొదటి స్థానాన్ని సూచిస్తుంది. ఈ సందర్భంలో ఒక పాయింటర్ రెండు బైట్లను కలిగి ఉంటుంది. స్ట్రింగ్ దాని పొడవుతో ప్రారంభమైతే, సంబంధిత పాయింటర్ ఆ పొడవు యొక్క స్థానాన్ని సూచిస్తుంది. స్ట్రింగ్ దాని పొడవుతో ప్రారంభం కాకుండా శూన్య అక్షరంతో ముగిస్తే, సంబంధిత పాయింటర్ స్ట్రింగ్ యొక్క మొదటి అక్షరం యొక్క స్థానాన్ని సూచిస్తుంది. మరియు వరుస పాయింటర్ల మొదటి పాయింటర్ యొక్క దిగువ బైట్ చిరునామాను సూచించే పాయింటర్ ఉంది. కాబట్టి, స్ట్రింగ్ల శ్రేణి మూడు భాగాలను కలిగి ఉంటుంది: మెమరీలోని వివిధ ప్రదేశాలలో ఉన్న స్ట్రింగ్లు, సంబంధిత వరుస పాయింటర్లు మరియు వరుస పాయింటర్ల మొదటి పాయింటర్కు పాయింటర్.
4.20 సమస్యలు
తదుపరి అధ్యాయానికి వెళ్లే ముందు అన్ని సమస్యలను ఒక అధ్యాయంలో పరిష్కరించాలని పాఠకులకు సలహా ఇస్తారు.
- 6502 µP కోసం $0200 నుండి ప్రారంభమయ్యే అసెంబ్లీ భాషా ప్రోగ్రామ్ను వ్రాయండి మరియు 2A94 యొక్క సంతకం చేయని సంఖ్యలను జోడిస్తుంది. హెచ్ (జోడించు) 2ABFకి హెచ్ (ఆగేండ్). ఇన్పుట్లు మరియు అవుట్పుట్ మెమరీలో ఉండనివ్వండి. అలాగే, సమావేశమైన ప్రోగ్రామ్ పత్రాన్ని చేతితో ఉత్పత్తి చేయండి.
- 6502 µP కోసం $0200 నుండి ప్రారంభమయ్యే అసెంబ్లీ భాషా ప్రోగ్రామ్ను వ్రాయండి మరియు 1569 సంతకం చేయని సంఖ్యలను తీసివేస్తుంది. హెచ్ (సబ్ట్రాహెండ్) 2ABF నుండి హెచ్ (చిన్న ముగింపు). ఇన్పుట్లు మరియు అవుట్పుట్లు మెమరీలో ఉండనివ్వండి. అలాగే, సమావేశమైన ప్రోగ్రామ్ పత్రాన్ని చేతితో ఉత్పత్తి చేయండి.
- లూప్ని ఉపయోగించి $00 నుండి $09 వరకు లెక్కించబడే 6502 µP కోసం అసెంబ్లీ భాషా ప్రోగ్రామ్ను వ్రాయండి. కార్యక్రమం $0200 వద్ద ప్రారంభం కావాలి. అలాగే, సమావేశమైన ప్రోగ్రామ్ పత్రాన్ని చేతితో ఉత్పత్తి చేయండి.
- 6502 µP కోసం $0200 నుండి ప్రారంభమయ్యే అసెంబ్లీ భాషా ప్రోగ్రామ్ను వ్రాయండి. ప్రోగ్రామ్లో రెండు సబ్రూటీన్లు ఉన్నాయి. మొదటి సబ్ట్రౌటిన్ 0203 యొక్క సంతకం చేయని సంఖ్యలను జోడిస్తుంది హెచ్ (augend) మరియు 0102H (జోడించు). రెండవ సబ్ట్రౌటిన్ మొదటి సబ్ట్రౌటిన్ నుండి 0305H నుండి 0006 వరకు మొత్తాన్ని జోడిస్తుంది హెచ్ (ఆగేండ్). తుది ఫలితం మెమరీలో నిల్వ చేయబడుతుంది. FSTSUB అయిన మొదటి సబ్రౌటిన్కి మరియు SECSUB అయిన రెండవ సబ్రౌటీన్కి కాల్ చేయండి. ఇన్పుట్లు మరియు అవుట్పుట్లు మెమరీలో ఉండనివ్వండి. అలాగే, మొత్తం ప్రోగ్రామ్ కోసం సమావేశమైన ప్రోగ్రామ్ పత్రాన్ని చేతితో రూపొందించండి.
- ఇచ్చిన ఒక IRQ హ్యాండ్లర్ అక్యుమ్యులేటర్ వద్ద $02 నుండి $01 వరకు కోర్ హ్యాండ్లింగ్గా జోడిస్తుంది NMI జారీ చేయబడింది మరియు ప్రధాన నిర్వహణ NMI అక్యుమ్యులేటర్ వద్ద $05 నుండి $04 వరకు జోడిస్తుంది, హ్యాండ్లర్లిద్దరికీ వారి కాల్లతో సహా అసెంబ్లీ భాషను వ్రాయండి. కు కాల్ IRQ హ్యాండ్లర్ $0200 చిరునామాలో ఉండాలి. ది IRQ హ్యాండ్లర్ $0300 చిరునామాతో ప్రారంభించాలి. ది NMI హ్యాండ్లర్ $0400 చిరునామాతో ప్రారంభించాలి. యొక్క ఫలితం IRQ హ్యాండ్లర్ని $0500 చిరునామాలో ఉంచాలి మరియు దాని ఫలితం NMI హ్యాండ్లర్ను $0501 చిరునామాలో ఉంచాలి.
- 65C02 కంప్యూటర్లో సాఫ్ట్వేర్ అంతరాయాన్ని ఉత్పత్తి చేయడానికి BRK సూచన ఎలా ఉపయోగించబడుతుందో క్లుప్తంగా వివరించండి.
- సాధారణ సబ్ట్రౌటిన్ను అంతరాయ సేవా దినచర్యతో పోల్చి మరియు విరుద్ధంగా ఉండే పట్టికను రూపొందించండి.
- అసెంబ్లీ భాషా సూచనల ఉదాహరణలతో 65C02 µP యొక్క ప్రధాన అడ్రసింగ్ మోడ్లను క్లుప్తంగా వివరించండి.
- ఎ) “ఐ లవ్ యు!” అని పెట్టడానికి 6502 మెషిన్ లాంగ్వేజ్ ప్రోగ్రామ్ను వ్రాయండి మెమరీలో ASCII కోడ్ల స్ట్రింగ్, స్ట్రింగ్ పొడవుతో $0300 చిరునామా నుండి ప్రారంభమవుతుంది. కార్యక్రమం $0200 చిరునామాలో ప్రారంభం కావాలి. అక్యుమ్యులేటర్ నుండి ఒక్కో అక్షరాన్ని ఒక్కొక్కటిగా పొందండి, అవి కొంత సబ్రూటీన్ ద్వారా అక్కడకు పంపబడ్డాయని భావించండి. అలాగే, ప్రోగ్రామ్ను చేతితో సమీకరించండి. (మీరు 'ఐ లవ్ యు!' కోసం ASCII కోడ్లను తెలుసుకోవాలంటే. అవి ఇక్కడ ఉన్నాయి: 'I':49 16 , స్థలం : 20 16 , 'l': 6C 16 , 'o':6F 16 , 'in':76 16 , 'e':65, 'y':79 16 , 'in':75 16 , మరియు ‘!’:21 16 (గమనిక: ప్రతి కోడ్ 1 బైట్ను ఆక్రమిస్తుంది).
బి) “ఐ లవ్ యు!” అని పెట్టడానికి 6502 మెషిన్ లాంగ్వేజ్ ప్రోగ్రామ్ను వ్రాయండి మెమరీలో ASCII కోడ్ల స్ట్రింగ్, స్ట్రింగ్ పొడవు లేకుండా $0300 చిరునామా నుండి మొదలై 00తో ముగుస్తుంది 16 . కార్యక్రమం $0200 చిరునామాలో ప్రారంభం కావాలి. అక్యుమ్యులేటర్ నుండి ప్రతి అక్షరాన్ని పొందండి, అవి కొన్ని సబ్రౌటీన్ ద్వారా ఒక్కొక్కటిగా అక్కడకు పంపబడుతున్నాయని భావించండి. అలాగే, ప్రోగ్రామ్ను చేతితో సమీకరించండి.