అధ్యాయం 6: అసెంబ్లీ భాషతో ఆధునిక కంప్యూటర్ ఆర్కిటెక్చర్ బేసిక్స్

Adhyayam 6 Asembli Bhasato Adhunika Kampyutar Arkitekcar Besiks



6.1 పరిచయం

ఆధునిక సాధారణ-ప్రయోజన కంప్యూటర్లు రెండు రకాలు: CISC మరియు RISC. CISC అంటే కాంప్లెక్స్ ఇన్‌స్ట్రక్షన్ సెట్ కంప్యూటర్. RISK అంటే తగ్గిన ఇన్‌స్ట్రక్షన్ సెట్ కంప్యూటర్. 6502 లేదా 6510 మైక్రోప్రాసెసర్‌లు, కమోడోర్-64 కంప్యూటర్‌కు వర్తించే విధంగా, CISC ఆర్కిటెక్చర్ కంటే RISC ఆర్కిటెక్చర్‌ను పోలి ఉంటాయి.

CISC కంప్యూటర్‌లతో పోలిస్తే RISC కంప్యూటర్‌లు సాధారణంగా తక్కువ అసెంబ్లీ భాషా సూచనలను (బైట్ల సంఖ్య ద్వారా) కలిగి ఉంటాయి.







గమనిక : CISC, RISC లేదా పాత కంప్యూటర్‌తో వ్యవహరించినా, ఒక పరిధీయ పోర్ట్ అంతర్గత పోర్ట్ నుండి ప్రారంభమవుతుంది మరియు కంప్యూటర్ సిస్టమ్ యూనిట్ (బేస్ యూనిట్) యొక్క నిలువు ఉపరితలంపై మరియు బాహ్య పరికరానికి బాహ్య పోర్ట్ ద్వారా బయటికి వెళుతుంది.



CISC కంప్యూటర్ యొక్క ఒక సాధారణ సూచన అనేక చిన్న అసెంబ్లీ భాషా సూచనలను ఒక పొడవైన అసెంబ్లీ భాషా సూచనలో చేర్చడం వంటిది చూడవచ్చు, దీని ఫలితంగా వచ్చే సూచనలను సంక్లిష్టంగా చేస్తుంది. ప్రత్యేకించి, CISC కంప్యూటర్ మెమరీ నుండి మైక్రోప్రాసెసర్ రిజిస్టర్‌లలోకి ఆపరాండ్‌లను లోడ్ చేస్తుంది, ఒక ఆపరేషన్‌ను నిర్వహిస్తుంది మరియు ఫలితాన్ని తిరిగి మెమరీలో నిల్వ చేస్తుంది, అన్నీ ఒకే సూచనలో. మరోవైపు, ఇది RISC కంప్యూటర్ కోసం కనీసం మూడు సూచనలు (చిన్నవి).



CISC కంప్యూటర్లలో రెండు ప్రసిద్ధ శ్రేణులు ఉన్నాయి: ఇంటెల్ మైక్రోప్రాసెసర్ కంప్యూటర్లు మరియు AMD మైక్రోప్రాసెసర్ కంప్యూటర్లు. AMD అంటే అధునాతన మైక్రో పరికరాలు; ఇది సెమీకండక్టర్ తయారీ కంపెనీ. ఇంటెల్ మైక్రోప్రాసెసర్ సిరీస్, అభివృద్ధి క్రమంలో, 8086, 8088, 80186, 80286, 80386, 80486, పెంటియమ్, కోర్, ఐ సిరీస్, సెలెరాన్ మరియు జియాన్. 8086 మరియు 8088 వంటి ప్రారంభ ఇంటెల్ మైక్రోప్రాసెసర్‌ల కోసం అసెంబ్లీ భాషా సూచనలు చాలా క్లిష్టంగా లేవు. అయినప్పటికీ, కొత్త మైక్రోప్రాసెసర్‌లకు అవి సంక్లిష్టంగా ఉంటాయి. CISC సిరీస్ కోసం ఇటీవలి AMD మైక్రోప్రాసెసర్‌లు Ryzen, Opteron, Athlon, Turion, Phenom మరియు Sempron. ఇంటెల్ మరియు AMD మైక్రోప్రాసెసర్‌లను x86 మైక్రోప్రాసెసర్‌లు అంటారు.





ARM అంటే అధునాతన RISC మెషిన్. ARM ఆర్కిటెక్చర్లు RISC ప్రాసెసర్‌ల కుటుంబాన్ని నిర్వచించాయి, ఇవి అనేక రకాల అప్లికేషన్‌లలో ఉపయోగించడానికి అనుకూలంగా ఉంటాయి. డెస్క్‌టాప్ పర్సనల్ కంప్యూటర్‌లలో అనేక Intel మరియు AMD మైక్రోప్రాసెసర్‌లు ఉపయోగించబడుతున్నప్పటికీ, అనేక ARM ప్రాసెసర్‌లు ఆటోమోటివ్ యాంటీ-లాక్ బ్రేక్‌లు వంటి భద్రతా-క్లిష్టమైన సిస్టమ్‌లలో పొందుపరిచిన ప్రాసెసర్‌లుగా మరియు స్మార్ట్‌వాచ్‌లు, పోర్టబుల్ ఫోన్‌లు, టాబ్లెట్‌లు మరియు ల్యాప్‌టాప్ కంప్యూటర్‌లలో సాధారణ-ప్రయోజన ప్రాసెసర్‌లుగా పనిచేస్తాయి. . రెండు రకాల మైక్రోప్రాసెసర్‌లను చిన్న మరియు పెద్ద పరికరాలలో చూడగలిగినప్పటికీ, RISC మైక్రోప్రాసెసర్‌లు పెద్ద పరికరాల కంటే చిన్న పరికరాలలో ఎక్కువగా కనిపిస్తాయి.

కంప్యూటర్ వర్డ్
కంప్యూటర్‌ను 32 బిట్స్ వర్డ్‌తో కూడిన కంప్యూటర్ అని చెప్పినట్లయితే, సమాచారం మదర్‌బోర్డు లోపలి భాగంలో ముప్పై-రెండు-బిట్ బైనరీ కోడ్‌ల రూపంలో నిల్వ చేయబడి, బదిలీ చేయబడిందని మరియు తారుమారు చేయబడిందని అర్థం. కంప్యూటర్ యొక్క మైక్రోప్రాసెసర్‌లోని సాధారణ-ప్రయోజన రిజిస్టర్‌లు 32-బిట్‌ల వెడల్పుతో ఉన్నాయని కూడా దీని అర్థం. 6502 మైక్రోప్రాసెసర్ యొక్క A, X మరియు Y రిజిస్టర్లు సాధారణ ప్రయోజన రిజిస్టర్లు. అవి ఎనిమిది-బిట్‌ల వెడల్పుతో ఉంటాయి, కాబట్టి కమోడోర్-64 కంప్యూటర్ ఎనిమిది-బిట్ వర్డ్ కంప్యూటర్.



కొన్ని పదజాలం
X86 కంప్యూటర్లు

బైట్, వర్డ్, డబుల్‌వర్డ్, క్వాడ్‌వర్డ్ మరియు డబుల్-క్వాడ్‌వర్డ్ యొక్క అర్థాలు x86 కంప్యూటర్‌లకు క్రింది విధంగా ఉన్నాయి:

  • బైట్ : 8 బిట్స్
  • మాట : 16 బిట్స్
  • ద్విపద : 32 బిట్స్
  • క్వాడ్వర్డ్ : 64 బిట్స్
  • డబుల్ క్వాడ్‌వర్డ్ : 128 బిట్స్

ARM కంప్యూటర్లు
ARM కంప్యూటర్‌లకు బైట్, హాఫ్‌వర్డ్, వర్డ్ మరియు డబుల్‌వర్డ్ అర్థాలు క్రింది విధంగా ఉన్నాయి:

  • బైట్ : 8 బిట్స్
  • సగం అవ్వండి : 16 బిట్స్
  • మాట : 32 బిట్స్
  • ద్విపద : 64 బిట్స్

x86 మరియు ARM పేర్లకు (మరియు విలువలు) తేడాలు మరియు సారూప్యతలు గమనించాలి.

గమనిక : రెండు కంప్యూటర్ రకాలలో సైన్ పూర్ణాంకాలు రెండు పూరకంగా ఉంటాయి.

మెమరీ స్థానం
కమోడోర్-64 కంప్యూటర్‌తో, మెమరీ స్థానం సాధారణంగా ఒక బైట్ అయితే పాయింటర్‌లను పరిగణనలోకి తీసుకున్నప్పుడు (పరోక్ష చిరునామా) అప్పుడప్పుడు రెండు వరుస బైట్‌లు కావచ్చు. ఆధునిక x86 కంప్యూటర్‌తో, 16 బైట్‌ల (128 బిట్‌లు) డబుల్ క్వాడ్‌వర్డ్‌తో వ్యవహరించేటప్పుడు మెమరీ స్థానం 16 వరుస బైట్‌లు, 8 బైట్‌ల క్వాడ్‌వర్డ్‌తో (64 బిట్‌లు) వ్యవహరించేటప్పుడు వరుసగా 8 బైట్లు, డబుల్ వర్డ్‌తో వ్యవహరించేటప్పుడు వరుసగా 4 బైట్లు 4 బైట్లు (32 బిట్‌లు), 2 బైట్‌ల (16 బిట్‌లు) పదంతో వ్యవహరించేటప్పుడు వరుసగా 2 బైట్‌లు మరియు బైట్‌తో వ్యవహరించేటప్పుడు 1 బైట్ (8 బిట్‌లు). ఆధునిక ARM కంప్యూటర్‌తో, 8 బైట్‌ల (64 బిట్‌లు) డబుల్‌వర్డ్‌తో వ్యవహరించేటప్పుడు మెమరీ స్థానం వరుసగా 8 బైట్‌లు, 4 బైట్‌ల పదంతో వ్యవహరించేటప్పుడు వరుసగా 4 బైట్లు (32 బిట్‌లు), హాఫ్‌వర్డ్‌తో వ్యవహరించేటప్పుడు 2 వరుస బైట్‌లు 2 బైట్‌లు (16 బిట్‌లు), మరియు 1 బైట్‌తో వ్యవహరించేటప్పుడు (8 బిట్‌లు).

ఈ అధ్యాయం CISC మరియు RISC ఆర్కిటెక్చర్‌లలో ఏది సాధారణమో మరియు వాటి తేడాలు ఏమిటో వివరిస్తుంది. ఇది వర్తించే 6502 µP మరియు కమోడోర్-64 కంప్యూటర్‌తో పోల్చితే చేయబడుతుంది.

6.2 ఆధునిక PC యొక్క మదర్‌బోర్డ్ బ్లాక్ రేఖాచిత్రం

PC అంటే పర్సనల్ కంప్యూటర్. వ్యక్తిగత కంప్యూటర్ కోసం ఒకే మైక్రోప్రాసెసర్‌తో ఆధునిక మదర్‌బోర్డు కోసం కిందిది సాధారణ ప్రాథమిక బ్లాక్ రేఖాచిత్రం. ఇది CISC లేదా RISC మదర్‌బోర్డును సూచిస్తుంది.


Fig. 6.21 ఆధునిక PC యొక్క ప్రాథమిక మదర్‌బోర్డ్ బ్లాక్ రేఖాచిత్రం

మూడు అంతర్గత పోర్ట్‌లు రేఖాచిత్రంలో చూపబడ్డాయి, అయితే ఆచరణలో మరిన్ని ఉన్నాయి. ప్రతి పోర్ట్‌లో రిజిస్టర్ ఉంటుంది, దానిని పోర్ట్‌గా చూడవచ్చు. ప్రతి పోర్ట్ సర్క్యూట్ కనీసం మరొక రిజిస్టర్‌ని కలిగి ఉంటుంది, దీనిని 'స్టేటస్ రిజిస్టర్' అని పిలుస్తారు. స్టేటస్ రిజిస్టర్ మైక్రోప్రాసెసర్‌కు అంతరాయ సిగ్నల్‌ను పంపుతున్న ప్రోగ్రామ్‌కు పోర్ట్‌ను సూచిస్తుంది. వివిధ పోర్ట్‌ల నుండి వేర్వేరు అంతరాయ రేఖల మధ్య తేడాను చూపే ఒక అంతరాయ కంట్రోలర్ సర్క్యూట్ (చూపబడలేదు) ఉంది మరియు µPకి కొన్ని పంక్తులు మాత్రమే ఉంటాయి.

రేఖాచిత్రంలో HD.C అంటే హార్డ్ డ్రైవ్ కార్డ్. NIC అంటే నెట్‌వర్క్ ఇంటర్‌ఫేస్ కార్డ్. హార్డ్ డ్రైవ్ కార్డ్ (సర్క్యూట్) ఆధునిక కంప్యూటర్ యొక్క బేస్ యూనిట్ (సిస్టమ్ యూనిట్) లోపల ఉన్న హార్డ్ డ్రైవ్‌కు కనెక్ట్ చేయబడింది. నెట్వర్క్ ఇంటర్ఫేస్ కార్డ్ (సర్క్యూట్) మరొక కంప్యూటర్కు బాహ్య కేబుల్ ద్వారా కనెక్ట్ చేయబడింది. రేఖాచిత్రంలో, హార్డ్ డిస్క్ కార్డ్ మరియు/లేదా నెట్‌వర్క్ ఇంటర్‌ఫేస్ కార్డ్‌కి కనెక్ట్ చేయబడిన ఒక పోర్ట్ మరియు DMA (క్రింది ఉదాహరణను చూడండి) ఉన్నాయి. DMA అంటే డైరెక్ట్ మెమరీ యాక్సెస్.

కమోడోర్-64 కంప్యూటర్ అధ్యాయం నుండి గుర్తుంచుకోండి, బైట్‌లను మెమరీ నుండి డిస్క్ డ్రైవ్ లేదా మరొక కంప్యూటర్‌కు పంపాలంటే, ప్రతి బైట్ సంబంధిత అంతర్గత పోర్ట్‌కు కాపీ చేయబడే ముందు మైక్రోప్రాసెసర్‌లోని రిజిస్టర్‌కి కాపీ చేయబడాలి, ఆపై స్వయంచాలకంగా పరికరానికి. డిస్క్ డ్రైవ్ లేదా మరొక కంప్యూటర్ నుండి మెమరీకి బైట్‌లను స్వీకరించడానికి, ప్రతి బైట్‌ను మెమరీకి కాపీ చేయడానికి ముందు సంబంధిత అంతర్గత పోర్ట్ రిజిస్టర్ నుండి మైక్రోప్రాసెసర్ రిజిస్టర్‌కి కాపీ చేయాలి. స్ట్రీమ్‌లో బైట్‌ల సంఖ్య ఎక్కువగా ఉంటే ఇది సాధారణంగా ఎక్కువ సమయం పడుతుంది. వేగవంతమైన బదిలీకి పరిష్కారం మైక్రోప్రాసెసర్ గుండా వెళ్ళకుండా డైరెక్ట్ మెమరీ యాక్సెస్ (సర్క్యూట్) ఉపయోగించడం.

DMA సర్క్యూట్ పోర్ట్ మరియు HD మధ్య ఉంటుంది. C లేదా NIC. DMA సర్క్యూట్ యొక్క డైరెక్ట్ మెమరీ యాక్సెస్‌తో, మైక్రోప్రాసెసర్ యొక్క నిరంతర భాగస్వామ్యం లేకుండా నేరుగా DMA సర్క్యూట్ మరియు మెమరీ (RAM) మధ్య బైట్‌ల పెద్ద స్ట్రీమ్‌ల బదిలీ జరుగుతుంది. DMA µP స్థానంలో అడ్రస్ బస్సు మరియు డేటా బస్‌ని ఉపయోగిస్తుంది. బదిలీ యొక్క మొత్తం వ్యవధి µP హార్డ్ ఉపయోగించాల్సిన దానికంటే తక్కువగా ఉంటుంది. HD C. లేదా NIC రెండూ RAM (మెమొరీ)తో బదిలీ చేయడానికి పెద్ద మొత్తంలో డేటా (బైట్‌లు) కలిగి ఉన్నప్పుడు DMAని ఉపయోగిస్తాయి.

GPU అంటే గ్రాఫిక్స్ ప్రాసెసింగ్ యూనిట్. మదర్‌బోర్డ్‌లోని ఈ బ్లాక్ టెక్స్ట్ మరియు మూవింగ్ లేదా స్టిల్ ఇమేజ్‌లను స్క్రీన్‌కి పంపడానికి బాధ్యత వహిస్తుంది.

ఆధునిక కంప్యూటర్‌లతో (PCలు), రీడ్ ఓన్లీ మెమరీ (ROM) లేదు. అయితే, BIOS లేదా UEFI ఒక రకమైన అస్థిరత లేని RAM. BIOSలోని సమాచారం నిజానికి బ్యాటరీ ద్వారా నిర్వహించబడుతుంది. బ్యాటరీ అనేది కంప్యూటర్‌కు సరైన సమయం మరియు తేదీలో క్లాక్ టైమర్‌ను కూడా నిర్వహిస్తుంది. BIOS తర్వాత UEFI కనుగొనబడింది మరియు ఆధునిక PCలలో BIOS ఇప్పటికీ చాలా సందర్భోచితంగా ఉన్నప్పటికీ BIOS స్థానంలో ఉంది. వీటి గురించి తర్వాత చర్చిస్తాం!

ఆధునిక PCలలో, µP మరియు అంతర్గత పోర్ట్ సర్క్యూట్‌ల (మరియు మెమరీ) మధ్య చిరునామా మరియు డేటా బస్‌లు సమాంతర బస్సులు కావు. అవి సీరియల్ బస్సులు, ఒక దిశలో ప్రసారం చేయడానికి ఇద్దరు కండక్టర్లు మరియు వ్యతిరేక దిశలో ప్రసారం చేయడానికి మరో ఇద్దరు కండక్టర్లు అవసరం. దీనర్థం, ఉదాహరణకు, 32-బిట్‌లను సిరీస్‌లో (ఒక బిట్ తర్వాత మరొకటి) ఏ దిశలోనైనా పంపవచ్చు.

సీరియల్ ట్రాన్స్మిషన్ రెండు కండక్టర్లతో (రెండు లైన్లు) ఒక దిశలో మాత్రమే ఉంటే, అది సగం-డ్యూప్లెక్స్ అని చెప్పబడుతుంది. సీరియల్ ట్రాన్స్‌మిషన్ నాలుగు కండక్టర్‌లతో రెండు దిశల్లో ఉంటే, రెండు దిశల్లో ఒక జత ఉంటే, అది పూర్తి-డ్యూప్లెక్స్ అని చెప్పబడుతుంది.

ఆధునిక కంప్యూటర్ యొక్క మొత్తం మెమరీ ఇప్పటికీ బైట్ స్థానాల శ్రేణిని కలిగి ఉంటుంది: బైట్‌కు ఎనిమిది-బిట్‌లు. ఆధునిక కంప్యూటర్‌లో కనీసం 4 గిగా బైట్‌లు = 4 x 210 x 2 మెమరీ స్పేస్ ఉంటుంది. 10 x 2 10 = 4 x 1,073,741,824 10 బైట్లు = 4 x 1024 10/సబ్> x 1024 10 x 1024 10 = 4 x 1,073,741,824 10 .

గమనిక : మునుపటి మదర్‌బోర్డ్‌లో టైమర్ సర్క్యూట్ చూపబడనప్పటికీ, అన్ని ఆధునిక మదర్‌బోర్డులు టైమర్ సర్క్యూట్‌లను కలిగి ఉంటాయి.

6.3 x64 కంప్యూటర్ ఆర్కిటెక్చర్ బేసిక్స్

6.31 x64 రిజిస్టర్ సెట్
మైక్రోప్రాసెసర్‌ల x86 సిరీస్‌లోని 64-బిట్ మైక్రోప్రాసెసర్ 64-బిట్ మైక్రోప్రాసెసర్. అదే సిరీస్‌లోని 32-బిట్ ప్రాసెసర్‌ను భర్తీ చేయడం చాలా ఆధునికమైనది. 64-బిట్ మైక్రోప్రాసెసర్ యొక్క సాధారణ ప్రయోజన రిజిస్టర్లు మరియు వాటి పేర్లు క్రింది విధంగా ఉన్నాయి:


Fig. 6.31 x64 కోసం సాధారణ ప్రయోజన రిజిస్టర్లు

ఇవ్వబడిన దృష్టాంతంలో పదహారు (16) సాధారణ ప్రయోజన రిజిస్టర్‌లు చూపబడ్డాయి. ఈ రిజిస్టర్లలో ప్రతి ఒక్కటి 64-బిట్ వెడల్పుతో ఉంటుంది. ఎగువ-ఎడమ మూలలో ఉన్న రిజిస్టర్‌ను చూస్తే, 64 బిట్‌లు RAXగా గుర్తించబడ్డాయి. ఇదే రిజిస్టర్‌లోని మొదటి 32 బిట్‌లు (కుడివైపు నుండి) EAXగా గుర్తించబడ్డాయి. ఇదే రిజిస్టర్‌లోని మొదటి 16 బిట్‌లు (కుడివైపు నుండి) AXగా గుర్తించబడ్డాయి. ఇదే రిజిస్టర్‌లోని రెండవ బైట్ (కుడివైపు నుండి) AHగా గుర్తించబడింది (ఇక్కడ H అంటే ఎక్కువ). మరియు మొదటి బైట్ (ఇదే రిజిస్టర్‌లో) ALగా గుర్తించబడింది (ఇక్కడ L అంటే తక్కువ). దిగువ-కుడి మూలలో ఉన్న రిజిస్టర్‌ను చూస్తే, 64 బిట్‌లు R15గా గుర్తించబడ్డాయి. ఇదే రిజిస్టర్‌లోని మొదటి 32 బిట్‌లు R15Dగా గుర్తించబడ్డాయి. ఇదే రిజిస్టర్‌లోని మొదటి 16 బిట్‌లు R15Wగా గుర్తించబడ్డాయి. మరియు మొదటి బైట్ R15Bగా గుర్తించబడింది. ఇతర రిజిస్టర్ల పేర్లు (మరియు సబ్ రిజిస్టర్లు) అదేవిధంగా వివరించబడ్డాయి.

Intel మరియు AMD µPల మధ్య కొన్ని తేడాలు ఉన్నాయి. ఈ విభాగంలోని సమాచారం ఇంటెల్ కోసం.

6502 µPతో, ప్రోగ్రామ్ కౌంటర్ రిజిస్టర్ (నేరుగా యాక్సెస్ చేయబడదు) అమలు చేయవలసిన తదుపరి సూచనను కలిగి ఉంటుంది, ఇది 16-బిట్‌ల వెడల్పుతో ఉంటుంది. ఇక్కడ (x64), ప్రోగ్రామ్ కౌంటర్‌ని ఇన్‌స్ట్రక్షన్ పాయింటర్ అని పిలుస్తారు మరియు ఇది 64-బిట్‌ల వెడల్పుతో ఉంటుంది. ఇది RIP అని లేబుల్ చేయబడింది. దీనర్థం x64 µP 264 = 1.844674407 x 1019 (వాస్తవానికి 18,446,744,073,709,551,616) మెమరీ బైట్ స్థానాలను అడ్రస్ చేయగలదు. RIP అనేది సాధారణ ప్రయోజన రిజిస్టర్ కాదు.

స్టాక్ పాయింటర్ రిజిస్టర్ లేదా RSP 16 సాధారణ ప్రయోజన రిజిస్టర్‌లలో ఒకటి. ఇది మెమరీలో చివరి స్టాక్ ఎంట్రీని సూచిస్తుంది. 6502 µP వలె, x64 కోసం స్టాక్ క్రిందికి పెరుగుతుంది. x64తో, సబ్‌రూటీన్‌ల కోసం రిటర్న్ చిరునామాలను నిల్వ చేయడానికి RAMలోని స్టాక్ ఉపయోగించబడుతుంది. ఇది 'షాడో స్పేస్' నిల్వ చేయడానికి కూడా ఉపయోగించబడుతుంది (క్రింది చర్చను చూడండి).

6502 µP 8-బిట్ ప్రాసెసర్ స్థితి రిజిస్టర్‌ను కలిగి ఉంది. x64లో సమానమైన దానిని RFLAGS రిజిస్టర్ అంటారు. ఈ రిజిస్టర్ కార్యకలాపాల ఫలితాల కోసం మరియు ప్రాసెసర్ (µP) నియంత్రణ కోసం ఉపయోగించే ఫ్లాగ్‌లను నిల్వ చేస్తుంది. ఇది 64-బిట్స్ వెడల్పు. అధిక 32 బిట్‌లు రిజర్వ్ చేయబడ్డాయి మరియు ప్రస్తుతం ఉపయోగించబడవు. కింది పట్టిక RFLAGS రిజిస్టర్‌లో సాధారణంగా ఉపయోగించే బిట్‌ల పేర్లు, సూచిక మరియు అర్థాలను ఇస్తుంది:

పట్టిక 6.31.1
ఎక్కువగా ఉపయోగించే RFLAGS ఫ్లాగ్‌లు (బిట్స్)
చిహ్నం బిట్ పేరు ప్రయోజనం
CF 0 తీసుకువెళ్ళండి ఒక అంకగణిత ఆపరేషన్ ఫలితం యొక్క అత్యంత ముఖ్యమైన బిట్ నుండి క్యారీ లేదా అరువును ఉత్పత్తి చేస్తే అది సెట్ చేయబడుతుంది; లేకపోతే క్లియర్ చేయబడింది. ఈ ఫ్లాగ్ సంతకం చేయని-పూర్ణాంక అంకగణితానికి ఓవర్‌ఫ్లో పరిస్థితిని సూచిస్తుంది. ఇది బహుళ-ఖచ్చితమైన అంకగణితంలో కూడా ఉపయోగించబడుతుంది.
PF 2 సమానత్వం ఫలితం యొక్క అతి తక్కువ-ముఖ్యమైన బైట్ 1 బిట్‌ల సరి సంఖ్యను కలిగి ఉంటే అది సెట్ చేయబడుతుంది; లేకపోతే క్లియర్ చేయబడింది.
OF 4 సర్దుబాటు ఒక అంకగణిత ఆపరేషన్ ఫలితంగా బిట్ 3 నుండి క్యారీ లేదా అరువును ఉత్పత్తి చేస్తే అది సెట్ చేయబడుతుంది; లేకపోతే క్లియర్ చేయబడింది. ఈ ఫ్లాగ్ బైనరీ-కోడెడ్ డెసిమల్ (BCD) అంకగణితంలో ఉపయోగించబడుతుంది.
ZF 6 సున్నా ఫలితం సున్నా అయితే ఇది సెట్ చేయబడుతుంది; లేకపోతే క్లియర్ చేయబడింది.
SF 7 సంతకం చేయండి ఇది సంకేత పూర్ణాంకం యొక్క సంకేత బిట్ అయిన ఫలితం యొక్క అత్యంత ముఖ్యమైన బిట్‌కు సమానంగా ఉంటే అది సెట్ చేయబడుతుంది (0 సానుకూల విలువను సూచిస్తుంది మరియు 1 ప్రతికూల విలువను సూచిస్తుంది).
OF పదకొండు పొంగిపొర్లుతోంది పూర్ణాంకం ఫలితం చాలా పెద్ద ధనాత్మక సంఖ్య లేదా చాలా చిన్న ప్రతికూల సంఖ్య (సైన్-బిట్ మినహా) డెస్టినేషన్ ఆపరాండ్‌లో సరిపోయేలా సెట్ చేయబడుతుంది; లేకపోతే క్లియర్ చేయబడింది. ఈ ఫ్లాగ్ సంతకం-పూర్ణాంకం (రెండు పూరకం) అంకగణితానికి ఓవర్‌ఫ్లో పరిస్థితిని సూచిస్తుంది.
DF 10 దిశ దిశ స్ట్రింగ్ సూచనలు పనిచేస్తే (పెరుగుదల లేదా తగ్గుదల) ఇది సెట్ చేయబడుతుంది.
ID ఇరవై ఒకటి గుర్తింపు మార్పు అనేది CPUID సూచనల ఉనికిని సూచిస్తే అది సెట్ చేయబడుతుంది.

గతంలో సూచించిన పద్దెనిమిది 64-బిట్ రిజిస్టర్‌లతో పాటు, x64 ఆర్కిటెక్చర్ µP ఫ్లోటింగ్ పాయింట్ అరిథ్‌మెటిక్ కోసం ఎనిమిది 80-బిట్ వైడ్ రిజిస్టర్‌లను కలిగి ఉంది. ఈ ఎనిమిది రిజిస్టర్‌లను MMX రిజిస్టర్‌లుగా కూడా ఉపయోగించవచ్చు (క్రింది చర్చను చూడండి). XMM కోసం పదహారు 128-బిట్ రిజిస్టర్‌లు కూడా ఉన్నాయి (క్రింది చర్చను చూడండి).

రిజిస్టర్ల గురించి అంతే కాదు. సెగ్మెంట్ రిజిస్టర్‌లు (ఎక్కువగా x64లో ఉపయోగించనివి), కంట్రోల్ రిజిస్టర్‌లు, మెమరీ మేనేజ్‌మెంట్ రిజిస్టర్‌లు, డీబగ్ రిజిస్టర్‌లు, వర్చువలైజేషన్ రిజిస్టర్‌లు, పెర్ఫార్మెన్స్ రిజిస్టర్‌లు అన్ని రకాల అంతర్గత పారామితులను ట్రాక్ చేసే x64 రిజిస్టర్‌లు (కాష్ హిట్‌లు/మిస్‌లు, మైక్రో-ఆప్‌లు ఎగ్జిక్యూటెడ్, టైమింగ్) ఉన్నాయి. , ఇవే కాకండా ఇంకా).

SIMD

SIMD అంటే సింగిల్ ఇన్‌స్ట్రక్షన్ మల్టిపుల్ డేటా. ఒక మైక్రోప్రాసెసర్‌లో ఒకే సమయంలో బహుళ డేటాపై ఒక అసెంబ్లీ భాషా సూచన పని చేయగలదని దీని అర్థం. కింది పట్టికను పరిగణించండి:

1 2 3 4 5 6 7 8
+ 9 10 పదకొండు 12 13 14 పదిహేను 16
= 10 12 14 16 18 ఇరవై 22 24

ఈ పట్టికలో, ఎనిమిది సమాధానాలను ఇవ్వడానికి ఎనిమిది జతల సంఖ్యలు సమాంతరంగా (అదే వ్యవధిలో) జోడించబడ్డాయి. ఒక అసెంబ్లీ భాషా సూచన MMX రిజిస్టర్‌లలో ఎనిమిది సమాంతర పూర్ణాంక జోడింపులను చేయగలదు. ఇదే విధమైన పనిని XMM రిజిస్టర్‌లతో చేయవచ్చు. కాబట్టి, పూర్ణాంకాల కోసం MMX సూచనలు మరియు ఫ్లోట్‌ల కోసం XMM సూచనలు ఉన్నాయి.

6.32 మెమరీ మ్యాప్ మరియు x64

ఇన్‌స్ట్రక్షన్ పాయింటర్ (ప్రోగ్రామ్ కౌంటర్) 64 బిట్‌లను కలిగి ఉండటంతో, దీనర్థం 264 = 1.844674407 x 1019 మెమరీ బైట్ స్థానాలను పరిష్కరించవచ్చు. హెక్సాడెసిమల్‌లో, అత్యధిక బైట్ స్థానం FFFF,FFFF,FFFF,FFFF16. ఈరోజు ఏ సాధారణ కంప్యూటర్ కూడా ఇంత పెద్ద మెమరీ (పూర్తి) స్థలాన్ని అందించదు. కాబట్టి, x64 కంప్యూటర్ కోసం తగిన మెమరీ మ్యాప్ క్రింది విధంగా ఉంటుంది:

0000,8000,0000,000016 నుండి FFFF,7FFF,FFFF,FFFF16 వరకు గ్యాప్‌లో మెమరీ స్థానాలు లేవు (మెమొరీ RAM బ్యాంకులు లేవు). ఇది FFFF,0000,0000,000116 తేడా, ఇది చాలా పెద్దది. కానానికల్ హై హాఫ్‌లో ఆపరేటింగ్ సిస్టమ్ ఉంటుంది, కానానికల్ లో హాఫ్‌లో యూజర్ ప్రోగ్రామ్‌లు (అప్లికేషన్‌లు) మరియు డేటా ఉంటాయి. ఆపరేటింగ్ సిస్టమ్ రెండు భాగాలను కలిగి ఉంటుంది: ఒక చిన్న UEFI (BIOS) మరియు హార్డ్ డ్రైవ్ నుండి లోడ్ చేయబడిన పెద్ద భాగం. తదుపరి అధ్యాయం ఆధునిక ఆపరేటింగ్ సిస్టమ్‌ల గురించి మరింత మాట్లాడుతుంది. ఈ మెమరీ మ్యాప్‌తో సారూప్యతను గమనించండి మరియు కమోడోర్-64 కోసం 64KB చాలా మెమరీ లాగా ఉండవచ్చు.

ఈ సందర్భంలో, ఆపరేటింగ్ సిస్టమ్‌ను సుమారుగా 'కెర్నల్' అని పిలుస్తారు. కెర్నల్ కెర్నల్ ఆఫ్ ది కమోడోర్-64 కంప్యూటర్‌ని పోలి ఉంటుంది, కానీ చాలా ఎక్కువ సబ్‌రౌటిన్‌లను కలిగి ఉంది.

x64 యొక్క అంత్యాంశం చిన్నది, అంటే ఒక స్థానం కోసం, దిగువ చిరునామా మెమరీలోని తక్కువ కంటెంట్ బైట్‌ని సూచిస్తుంది.

6.33 x64 కోసం అసెంబ్లీ లాంగ్వేజ్ అడ్రసింగ్ మోడ్‌లు

µP రిజిస్టర్‌లను మరియు మెమరీని (అంతర్గత పోర్ట్ రిజిస్టర్‌లతో సహా) యాక్సెస్ చేయగల మార్గాలను అడ్రస్సింగ్ మోడ్‌లు అంటారు. x64 అనేక అడ్రసింగ్ మోడ్‌లను కలిగి ఉంది, అయితే సాధారణంగా ఉపయోగించే అడ్రసింగ్ మోడ్‌లు మాత్రమే ఇక్కడ ప్రస్తావించబడ్డాయి. ఇక్కడ సూచనల కోసం సాధారణ వాక్యనిర్మాణం:

opcode గమ్యం, మూలం

దశాంశ సంఖ్యలు ఉపసర్గ లేదా ప్రత్యయం లేకుండా వ్రాయబడ్డాయి. 6502తో, మూలం అంతర్లీనంగా ఉంటుంది. x64 6502 కంటే ఎక్కువ ఆప్-కోడ్‌లను కలిగి ఉంది, అయితే కొన్ని ఆప్‌కోడ్‌లు ఒకే విధమైన జ్ఞాపకాలను కలిగి ఉన్నాయి. వ్యక్తిగత x64 సూచనలు వేరియబుల్ పొడవు మరియు 1 నుండి 15 బైట్‌ల పరిమాణంలో ఉంటాయి. సాధారణంగా ఉపయోగించే చిరునామా మోడ్‌లు క్రింది విధంగా ఉన్నాయి:

తక్షణ చిరునామా మోడ్
ఇక్కడ, మూలం ఒపెరాండ్ వాస్తవ విలువ మరియు చిరునామా లేదా లేబుల్ కాదు. ఉదాహరణ (వ్యాఖ్యను చదవండి):

EAXని జోడించు, 14 ; 64-బిట్ RAX యొక్క దశాంశ 14 నుండి 32-బిట్ EAXని జోడించండి, సమాధానం EAX (గమ్యం)లో ఉంటుంది

రిజిస్టర్ అడ్రస్సింగ్ మోడ్‌కు నమోదు చేయండి
ఉదాహరణ:

ADD R8B, AL ; 64-బిట్ R8 యొక్క R8Bకి RAX యొక్క 8-బిట్ AL జోడించండి - సమాధానాలు R8B (గమ్యం)లో మిగిలి ఉన్నాయి

పరోక్ష మరియు ఇండెక్స్డ్ అడ్రస్సింగ్ మోడ్
6502 µPతో పరోక్ష చిరునామా అంటే సూచనలో ఇచ్చిన చిరునామా యొక్క స్థానం తుది స్థానం యొక్క ప్రభావవంతమైన చిరునామా (పాయింటర్)ని కలిగి ఉంటుంది. x64తో కూడా ఇదే జరుగుతుంది. 6502 µPతో సూచిక చిరునామా అంటే µP రిజిస్టర్ యొక్క కంటెంట్ ప్రభావవంతమైన చిరునామాను కలిగి ఉండటానికి సూచనలో ఇవ్వబడిన చిరునామాకు జోడించబడుతుంది. x64తో కూడా ఇదే జరుగుతుంది. అలాగే, x64తో, రిజిస్టర్‌లోని కంటెంట్ కూడా ఇచ్చిన చిరునామాకు జోడించబడటానికి ముందు 1 లేదా 2 లేదా 4 లేదా 8తో గుణించవచ్చు. x64 యొక్క mov (కాపీ) సూచన పరోక్ష మరియు ఇండెక్స్డ్ అడ్రసింగ్ రెండింటినీ మిళితం చేయగలదు. ఉదాహరణ:

MOV R8W, 1234[8*RAX+RCX] ; చిరునామా (8 x RAX + RCX) + 1234 వద్ద పదాన్ని తరలించండి

ఇక్కడ, R8W R8 యొక్క మొదటి 16-బిట్‌లను కలిగి ఉంది. ఇచ్చిన చిరునామా 1234. RAX రిజిస్టర్‌లో 64-బిట్ సంఖ్య ఉంది, దానిని 8తో గుణించాలి. ఫలితం 64-బిట్ RCX రిజిస్టర్‌లోని కంటెంట్‌కు జోడించబడుతుంది. ఈ రెండవ ఫలితం ప్రభావవంతమైన చిరునామాను పొందడానికి 1234 ఇవ్వబడిన చిరునామాకు జోడించబడింది. ప్రభావవంతమైన చిరునామా స్థానంలో ఉన్న సంఖ్య R8 రిజిస్టర్‌లోని మొదటి 16-బిట్ స్థానానికి (R8W) తరలించబడింది (కాపీ చేయబడింది), అక్కడ ఉన్న వాటిని భర్తీ చేస్తుంది. చదరపు బ్రాకెట్ల వినియోగాన్ని గమనించండి. x64లోని పదం 16-బిట్‌ల వెడల్పుతో ఉంటుందని గుర్తుంచుకోండి.

RIP బంధువు చిరునామా
6502 µP కోసం, బ్రాంచ్ సూచనలతో మాత్రమే సంబంధిత చిరునామా ఉపయోగించబడుతుంది. అక్కడ, ఆప్‌కోడ్ యొక్క సింగిల్ ఆపరాండ్ అనేది సమర్థవంతమైన సూచన చిరునామా (డేటా చిరునామా కాదు) కోసం ప్రోగ్రామ్ కౌంటర్ యొక్క కంటెంట్‌కు జోడించబడిన లేదా తీసివేయబడిన ఆఫ్‌సెట్. ప్రోగ్రామ్ కౌంటర్‌ని ఇన్‌స్ట్రక్షన్ పాయింటర్‌గా పిలవబడే x64తో ఇదే విధమైన విషయం జరుగుతుంది. x64తో ఉన్న సూచన బ్రాంచ్ సూచనగా మాత్రమే ఉండవలసిన అవసరం లేదు. RIP-సంబంధిత చిరునామాకు ఉదాహరణ:

MOV AL, [RIP]

RAX యొక్క AL 8-బిట్ సంతకం చేసిన సంఖ్యను కలిగి ఉంది, ఇది తదుపరి సూచనను సూచించడానికి RIP (64-బిట్ ఇన్‌స్ట్రక్షన్ పాయింటర్)లోని కంటెంట్ నుండి జోడించబడింది లేదా తీసివేయబడుతుంది. ఈ సూచనలో మూలం మరియు గమ్యం అనూహ్యంగా మారాయని గమనించండి. RIP యొక్క కంటెంట్‌ను సూచించే స్క్వేర్ బ్రాకెట్‌ల వినియోగాన్ని కూడా గమనించండి.

6.34 x64 యొక్క సాధారణంగా ఉపయోగించే సూచనలు

కింది పట్టికలో * అంటే ఆప్‌కోడ్‌ల ఉపసమితి యొక్క విభిన్న ప్రత్యయాలు:

పట్టిక 6.34.1
x64లో సాధారణంగా ఉపయోగించే సూచనలు
ఆప్కోడ్ అర్థం
MOV మెమరీ మరియు రిజిస్టర్‌ల మధ్యకు/నుండి/మధ్యకు (కాపీ) తరలించండి
CMV* వివిధ షరతులతో కూడిన కదలికలు
XCHG మార్పిడి
BSWAP బైట్ మార్పిడి
పుష్/పాప్ స్టాక్ వినియోగం
ADD/ADC క్యారీతో / జోడించండి
SUB/SBC క్యారీతో / తీసివేయండి
MUL/IMUL గుణకారం/సంతకం చేయబడలేదు
DIV/IDIV విభజించు/సంతకం చేయబడలేదు
INC/DEC పెంపు/తరుగుదల
NEG తిరస్కరించు
CMP సరిపోల్చండి
మరియు/OR/XOR/కాదు బిట్‌వైజ్ కార్యకలాపాలు
SHR/SAR కుడి తార్కిక/అంకగణితాన్ని మార్చండి
SHL/SAL ఎడమ తార్కిక/అంకగణితాన్ని మార్చండి
ROR/ROLE కుడి/ఎడమ తిప్పండి
RCR/RCL క్యారీ బిట్ ద్వారా కుడి/ఎడమవైపు తిప్పండి
BT/BTS/BTR బిట్ టెస్ట్/మరియు సెట్/మరియు రీసెట్ చేయండి
JMP షరతులు లేని జంప్
JE/JNE/JC/JNC/J* సమానం/సమానం కానట్లయితే/ తీసుకువెళ్లడం/తీసుకెళ్లడం లేదు/మరికొంతమంది ఉంటే దూకుతారు
నడక/నడక/నడక ECXతో లూప్ చేయండి
కాల్/RET సబ్‌రూటీన్/రిటర్న్‌కు కాల్ చేయండి
NOP ఆపరేషన్ లేదు
CPUID CPU సమాచారం

x64 గుణకారం మరియు విభజన సూచనలను కలిగి ఉంది. ఇది దాని µPలో గుణకారం మరియు విభజన హార్డ్‌వేర్ సర్క్యూట్‌లను కలిగి ఉంది. 6502 µPకి గుణకారం మరియు విభజన హార్డ్‌వేర్ సర్క్యూట్‌లు లేవు. సాఫ్ట్‌వేర్ (బిట్‌ల బదిలీతో సహా) కంటే హార్డ్‌వేర్ ద్వారా గుణకారం మరియు విభజన చేయడం వేగంగా ఉంటుంది.

స్ట్రింగ్ సూచనలు
అనేక స్ట్రింగ్ సూచనలు ఉన్నాయి, కానీ ఇక్కడ చర్చించవలసినది MOVS (మూవ్ స్ట్రింగ్ కోసం) సూచన C000 చిరునామాతో ప్రారంభమయ్యే స్ట్రింగ్‌ను కాపీ చేయడం. హెచ్ . చిరునామా C100 వద్ద ప్రారంభించడానికి హెచ్ , కింది సూచనలను ఉపయోగించండి:

MOVS [C100H], [C000H]

హెక్సాడెసిమల్ కోసం H ప్రత్యయం గమనించండి.

6.35 x64లో లూపింగ్

6502 µP లూపింగ్ కోసం శాఖ సూచనలను కలిగి ఉంది. బ్రాంచ్ సూచన కొత్త సూచనలను కలిగి ఉన్న చిరునామా స్థానానికి చేరుకుంటుంది. చిరునామా స్థానాన్ని 'లూప్' అని పిలవవచ్చు. x64 లూపింగ్ కోసం LOOP/LOOPE/LOOPNE సూచనలను కలిగి ఉంది. ఈ రిజర్వ్ చేయబడిన అసెంబ్లీ భాషా పదాలు 'లూప్' లేబుల్ (కోట్‌లు లేకుండా)తో అయోమయం చెందకూడదు. ప్రవర్తన క్రింది విధంగా ఉంది:

LOOP ECXని తగ్గిస్తుంది మరియు ECX సున్నా కాకపోతే తనిఖీ చేస్తుంది. ఆ షరతు (సున్నా) నెరవేరినట్లయితే, అది పేర్కొన్న లేబుల్‌కి జంప్ అవుతుంది. లేకపోతే, అది పడిపోతుంది (క్రింది చర్చలో మిగిలిన సూచనలతో కొనసాగించండి).

LOOPE ECXని తగ్గిస్తుంది మరియు ECX సున్నా కాదని తనిఖీ చేస్తుంది (ఉదాహరణకు 1 కావచ్చు) మరియు ZF సెట్ చేయబడిందా (1కి). ఈ షరతులు నెరవేరినట్లయితే, అది లేబుల్ వద్ద దూకుతుంది. లేకపోతే, అది పడిపోతుంది.

LOOPNE ECXని తగ్గిస్తుంది మరియు ECX సున్నా కాదని మరియు ZF సెట్ చేయబడలేదని తనిఖీ చేస్తుంది (అనగా, సున్నాగా ఉండండి). ఈ షరతులు నెరవేరినట్లయితే, అది లేబుల్‌కి దూకుతుంది. లేకపోతే, అది పడిపోతుంది.

x64తో, RCX రిజిస్టర్ లేదా ECX లేదా CX వంటి దాని ఉప భాగాలు కౌంటర్ పూర్ణాంకాన్ని కలిగి ఉంటాయి. LOOP సూచనలతో, కౌంటర్ సాధారణంగా లెక్కించబడుతుంది, ప్రతి జంప్ (లూప్)కి 1 తగ్గుతుంది. కింది లూపింగ్ కోడ్ విభాగంలో, EAX రిజిస్టర్‌లోని సంఖ్య పది పునరావృతాలలో 0 నుండి 10 వరకు పెరుగుతుంది, అయితే ECXలోని సంఖ్య 10 రెట్లు తగ్గుతుంది (తగ్గింపులు) (కామెంట్‌లను చదవండి):

MOV EAX, 0 ;
MOV ECX, 10 ; డిఫాల్ట్‌గా 10 సార్లు లెక్కించండి, ప్రతి పునరావృతానికి ఒకసారి
లేబుల్:
INC EAX; EAXని లూప్ బాడీగా పెంచండి
LOOP లేబుల్; EAXని తగ్గించండి మరియు EAX సున్నా కాకపోతే, 'లేబుల్:' నుండి లూప్ బాడీని మళ్లీ అమలు చేయండి

లూప్ కోడింగ్ 'లేబుల్:' నుండి ప్రారంభమవుతుంది. కోలన్ వాడకాన్ని గమనించండి. లూప్ కోడింగ్ 'LOOP లేబుల్'తో ముగుస్తుంది, ఇది EAXని తగ్గించండి. దాని కంటెంట్ సున్నా కాకపోతే, 'లేబుల్:' తర్వాత సూచనలకు తిరిగి వెళ్లి, 'LOOP లేబుల్' వరకు క్రిందికి వచ్చే ఏదైనా సూచనలను (అన్ని శరీర సూచనలు) మళ్లీ అమలు చేయండి. 'లేబుల్' ఇప్పటికీ మరొక పేరును కలిగి ఉండవచ్చని గమనించండి.

6.36 x64 యొక్క ఇన్‌పుట్/అవుట్‌పుట్

అధ్యాయంలోని ఈ విభాగం డేటాను అవుట్‌పుట్ (అంతర్గత) పోర్ట్‌కు పంపడం లేదా ఇన్‌పుట్ (అంతర్గత) పోర్ట్ నుండి డేటాను స్వీకరించడం గురించి వ్యవహరిస్తుంది. చిప్‌సెట్‌లో ఎనిమిది-బిట్ పోర్ట్‌లు ఉన్నాయి. ఏవైనా రెండు వరుస 8-బిట్ పోర్ట్‌లను 16-బిట్ పోర్ట్‌గా పరిగణించవచ్చు మరియు ఏవైనా నాలుగు వరుస పోర్ట్‌లు 32-బిట్ పోర్ట్ కావచ్చు. ఈ పద్ధతిలో, ప్రాసెసర్ 8, 16 లేదా 32 బిట్‌లను బాహ్య పరికరానికి లేదా దాని నుండి బదిలీ చేయగలదు.

సమాచారాన్ని ప్రాసెసర్ మరియు అంతర్గత పోర్ట్ మధ్య రెండు విధాలుగా బదిలీ చేయవచ్చు: మెమరీ-మ్యాప్ చేసిన ఇన్‌పుట్/అవుట్‌పుట్ లేదా ప్రత్యేక ఇన్‌పుట్/అవుట్‌పుట్ అడ్రస్ స్పేస్‌ని ఉపయోగించడం. మెమరీ-మ్యాప్ చేయబడిన I/O 6502 ప్రాసెసర్‌తో ఏమి జరుగుతుందో, ఇక్కడ పోర్ట్ చిరునామాలు మొత్తం మెమరీ స్థలంలో భాగంగా ఉంటాయి. ఈ సందర్భంలో, నిర్దిష్ట చిరునామా స్థానానికి డేటాను పంపేటప్పుడు, అది పోర్ట్‌కి వెళుతుంది మరియు మెమరీ బ్యాంక్‌కి కాదు. పోర్ట్‌లు ప్రత్యేక I/O చిరునామా స్థలాన్ని కలిగి ఉండవచ్చు. ఈ రెండో సందర్భంలో, అన్ని మెమరీ బ్యాంకులు వాటి చిరునామాలను సున్నా నుండి కలిగి ఉంటాయి. 0000H నుండి FFFF16 వరకు ప్రత్యేక చిరునామా పరిధి ఉంది. వీటిని చిప్‌సెట్‌లోని పోర్ట్‌లు ఉపయోగిస్తాయి. మెమరీ-మ్యాప్ చేయబడిన I/O మరియు ప్రత్యేక I/O అడ్రస్ స్పేస్ మధ్య గందరగోళం చెందకుండా ఉండటానికి మదర్‌బోర్డ్ ప్రోగ్రామ్ చేయబడింది.

మెమరీ-మ్యాప్ చేయబడిన I/O
దీనితో, పోర్ట్‌లు మెమరీ స్థానాలుగా పరిగణించబడతాయి మరియు మెమరీ మరియు µP మధ్య ఉపయోగించడానికి సాధారణ ఆప్‌కోడ్‌లు µP మరియు పోర్ట్‌ల మధ్య డేటా బదిలీకి ఉపయోగించబడతాయి. కాబట్టి, F000H చిరునామాలోని పోర్ట్ నుండి బైట్‌ను µP రిజిస్టర్ RAX:EAX:AX:ALకి తరలించడానికి, ఈ క్రింది వాటిని చేయండి:

MOV AL, [F000H]

స్ట్రింగ్‌ను మెమరీ నుండి పోర్ట్‌కి తరలించవచ్చు మరియు వైస్ వెర్సా. ఉదాహరణ:

MOVS [F000H], [C000H] ; మూలం C000H, మరియు గమ్యం F000H వద్ద పోర్ట్.

I/O అడ్రస్ స్పేస్‌ని వేరు చేయండి

దీనితో, ఇన్‌పుట్ మరియు అవుట్‌పుట్ కోసం ప్రత్యేక సూచనలను ఉపయోగించాలి.

ఒకే వస్తువులను బదిలీ చేయడం
బదిలీ కోసం ప్రాసెసర్ రిజిస్టర్ RAX. వాస్తవానికి, ఇది డబుల్‌వర్డ్‌కు RAX:EAX, పదానికి RAX:EAX:AX ​​మరియు బైట్‌కు RAX:EAX:AX:AL. కాబట్టి, FFF0h వద్ద పోర్ట్ నుండి బైట్‌ను RAX:EAX:AX:ALకి బదిలీ చేయడానికి, కింది వాటిని టైప్ చేయండి:

AL లో, [FFF0H]

రివర్స్ బదిలీ కోసం, కింది వాటిని టైప్ చేయండి:

అవుట్ [FFF0H], AL

కాబట్టి, ఒకే ఐటెమ్‌ల కోసం, సూచనలు ఇన్ మరియు అవుట్‌గా ఉంటాయి. పోర్ట్ చిరునామాను RDX:EDX:DX రిజిస్టర్‌లో కూడా ఇవ్వవచ్చు.

స్ట్రింగ్‌లను బదిలీ చేస్తోంది
స్ట్రింగ్‌ను మెమరీ నుండి చిప్‌సెట్ పోర్ట్‌కి బదిలీ చేయవచ్చు మరియు దీనికి విరుద్ధంగా. FFF0H చిరునామాలో ఉన్న పోర్ట్ నుండి స్ట్రింగ్‌ను మెమరీకి బదిలీ చేయడానికి, C100H వద్ద ప్రారంభించి, టైప్ చేయండి:

INS [ESI], [DX]

ఇది అదే ప్రభావాన్ని కలిగి ఉంటుంది:

INS [EDI], [DX]

ప్రోగ్రామర్ FFF0H యొక్క రెండు-బైట్ పోర్ట్ చిరునామాను RDX:EDX:Dx రిజిస్టర్‌లో ఉంచాలి మరియు C100H యొక్క రెండు-బైట్ చిరునామాను RSI:ESI లేదా RDI:EDI రిజిస్టర్‌లో ఉంచాలి. రివర్స్ బదిలీ కోసం, ఈ క్రింది వాటిని చేయండి:

INS [DX], [ESI]

ఇది అదే ప్రభావాన్ని కలిగి ఉంటుంది:

INS [DX], [EDI]

6.37 x64లో స్టాక్

6502 ప్రాసెసర్ వలె, x64 ప్రాసెసర్ కూడా RAMలో స్టాక్‌ను కలిగి ఉంది. x64 కోసం స్టాక్ 2 కావచ్చు 16 = 65,536 బైట్‌ల పొడవు లేదా అది 2 కావచ్చు 32 = 4,294,967,296 బైట్ల పొడవు. ఇది క్రిందికి కూడా పెరుగుతుంది. రిజిస్టర్ యొక్క కంటెంట్ స్టాక్‌పైకి నెట్టబడినప్పుడు, RSP స్టాక్ పాయింటర్‌లోని సంఖ్య 8 తగ్గింది. x64 కోసం మెమరీ చిరునామా 64 బిట్‌ల వెడల్పుతో ఉంటుందని గుర్తుంచుకోండి. µPలోని స్టాక్ పాయింటర్‌లోని విలువ RAMలోని స్టాక్‌లోని తదుపరి స్థానానికి పాయింట్లు. రిజిస్టర్ కంటెంట్ (లేదా ఒక ఒపెరాండ్‌లోని విలువ) స్టాక్ నుండి రిజిస్టర్‌లోకి పాప్ చేయబడినప్పుడు, RSP స్టాక్ పాయింటర్‌లోని సంఖ్య 8 ద్వారా పెరుగుతుంది. ఆపరేటింగ్ సిస్టమ్ స్టాక్ యొక్క పరిమాణాన్ని మరియు RAMలో ఎక్కడ మొదలవుతుందో నిర్ణయిస్తుంది. మరియు క్రిందికి పెరుగుతుంది. స్టాక్ అనేది లాస్ట్-ఇన్-ఫస్ట్-అవుట్ (LIFO) నిర్మాణం అని గుర్తుంచుకోండి, ఇది క్రిందికి పెరుగుతుంది మరియు ఈ సందర్భంలో పైకి కుంచించుకుపోతుంది.

µP RBX రిజిస్టర్‌లోని కంటెంట్‌ను స్టాక్‌కి నెట్టడానికి, ఈ క్రింది వాటిని చేయండి:

RBXని పుష్ చేయండి

స్టాక్‌లోని చివరి ఎంట్రీని తిరిగి RBXకి పాప్ చేయడానికి, ఈ క్రింది వాటిని చేయండి:

POP RBX

6.38 x64లో విధానం

x64లోని సబ్‌ట్రౌటిన్‌ని 'విధానం' అంటారు. 6502 µP కోసం ఉపయోగించిన దాని కంటే స్టాక్ ఇక్కడ ఎక్కువగా ఉపయోగించబడుతుంది. x64 విధానం కోసం వాక్యనిర్మాణం:

proc_name:
ప్రక్రియ శరీరం

కుడి

కొనసాగించే ముందు, x64 సబ్‌రూటీన్ (సాధారణంగా అసెంబ్లీ భాషా సూచనలు) కోసం ఆప్‌కోడ్‌లు మరియు లేబుల్‌లు కేస్ ఇన్‌సెన్సిటివ్‌గా ఉన్నాయని గమనించండి. అంటే proc_name అనేది PROC_NAMEకి సమానం. 6502 వలె, అసెంబ్లీ భాష కోసం టెక్స్ట్ ఎడిటర్‌లోని కొత్త లైన్ ప్రారంభంలో ప్రక్రియ పేరు (లేబుల్) పేరు ప్రారంభమవుతుంది. దీని తర్వాత 6502 వలె స్పేస్ మరియు ఆప్‌కోడ్ ద్వారా కాకుండా కోలన్ ఉంటుంది. సబ్‌రూటీన్ బాడీని అనుసరిస్తుంది, RETతో ముగుస్తుంది మరియు 6502 µPతో RTS కాదు. 6502 వలె, RETతో సహా శరీరంలోని ప్రతి సూచన దాని పంక్తి ప్రారంభంలో ప్రారంభం కాదు. ఇక్కడ ఒక లేబుల్ 8 అక్షరాల కంటే ఎక్కువ పొడవు ఉంటుందని గమనించండి. ఈ విధానాన్ని కాల్ చేయడానికి, టైప్ చేసిన విధానం పైన లేదా దిగువ నుండి, ఈ క్రింది వాటిని చేయండి:

proc_nameకి కాల్ చేయండి

6502తో, లేబుల్ పేరు కేవలం కాల్ చేయడానికి మాత్రమే టైప్ చేయబడుతుంది. అయితే, ఇక్కడ, 'కాల్' లేదా 'కాల్' అనే రిజర్వ్ చేయబడిన పదం టైప్ చేయబడుతుంది, తర్వాత స్పేస్ తర్వాత ప్రక్రియ పేరు (సబ్రౌటిన్) ఉంటుంది.

విధానాలతో వ్యవహరించేటప్పుడు, సాధారణంగా రెండు విధానాలు ఉన్నాయి. ఒక విధానం మరొకదానిని పిలుస్తుంది. కాల్ చేసే విధానాన్ని (కాల్ ఇన్‌స్ట్రక్షన్‌ని కలిగి ఉంది) “కాలర్” అని పిలుస్తారు మరియు పిలిచే విధానాన్ని “కాలీ” అంటారు. అనుసరించడానికి ఒక కన్వెన్షన్ (నియమాలు) ఉంది.

కాలర్ నియమాలు

సబ్‌రూటీన్‌ను ప్రారంభించేటప్పుడు కాలర్ క్రింది నియమాలకు కట్టుబడి ఉండాలి:

1. సబ్‌రూటీన్‌కు కాల్ చేయడానికి ముందు, కాలర్ స్టాక్ చేయడానికి కాలర్-సేవ్‌గా పేర్కొనబడిన నిర్దిష్ట రిజిస్టర్‌ల కంటెంట్‌లను సేవ్ చేయాలి. కాలర్-సేవ్ చేసిన రిజిస్టర్‌లు R10, R11 మరియు పరామితులు (RDI, RSI, RDX, RCX, R8, R9) ఉంచబడిన ఏవైనా రిజిస్టర్‌లు. ఈ రిజిస్టర్‌లలోని కంటెంట్‌లు సబ్‌రూటీన్ కాల్‌లో భద్రపరచబడాలంటే, RAMలో సేవ్ చేయడానికి బదులుగా వాటిని స్టాక్‌పైకి నెట్టండి. మునుపటి విషయాలను చెరిపివేయడానికి కాల్ చేసిన వ్యక్తి రిజిస్టర్‌లను ఉపయోగించాలి కాబట్టి వీటిని చేయాలి.

2. ఉదాహరణకు రెండు సంఖ్యలను జోడించడం ప్రక్రియ అయితే, రెండు సంఖ్యలు స్టాక్‌కు పంపబడే పారామితులు. సబ్‌ట్రౌటిన్‌కు పారామితులను పాస్ చేయడానికి, వాటిలో ఆరింటిని క్రింది రిజిస్టర్‌లలో క్రమంలో ఉంచండి: RDI, RSI, RDX, RCX, R8, R9. సబ్‌రూటీన్‌కు ఆరు కంటే ఎక్కువ పారామీటర్‌లు ఉంటే, మిగిలిన వాటిని రివర్స్ ఆర్డర్‌లో స్టాక్‌పైకి నెట్టండి (అనగా, మొదట చివరి పరామితి). స్టాక్ తగ్గుతున్నందున, మొదటి అదనపు పారామితులు (నిజంగా ఏడవ పరామితి) అత్యల్ప చిరునామాలో నిల్వ చేయబడుతుంది (ఈ పారామితుల విలోమం చారిత్రాత్మకంగా ఫంక్షన్‌లను (సబ్రౌటీన్‌లు) వేరియబుల్ సంఖ్యలో పారామీటర్‌లతో పాస్ చేయడానికి అనుమతించడానికి ఉపయోగించబడింది).

3. సబ్‌రూటీన్ (విధానం)కి కాల్ చేయడానికి, కాల్ సూచనలను ఉపయోగించండి. ఈ సూచన స్టాక్‌లోని పారామీటర్‌ల పైన రిటర్న్ చిరునామాను (అత్యల్ప స్థానం) మరియు బ్రాంచ్‌లను సబ్‌రూటీన్ కోడ్‌లో ఉంచుతుంది.

4. సబ్‌రూటీన్ తిరిగి వచ్చిన తర్వాత (అంటే వెంటనే కాల్ సూచనలను అనుసరించి), కాలర్ తప్పనిసరిగా స్టాక్ నుండి ఏవైనా అదనపు పారామితులను (రిజిస్టర్‌లలో నిల్వ చేయబడిన ఆరు కంటే ఎక్కువ) తీసివేయాలి. ఇది కాల్ చేయడానికి ముందు స్టాక్‌ను దాని స్థితికి పునరుద్ధరిస్తుంది.

5. కాలర్ RAX రిజిస్టర్‌లో సబ్‌ట్రౌటిన్ యొక్క రిటర్న్ విలువ (చిరునామా)ని కనుగొనవచ్చు.

6. కాలర్ సేవ్ చేసిన రిజిస్టర్‌లలోని కంటెంట్‌లను (R10, R11, మరియు పారామీటర్ పాసింగ్ రిజిస్టర్‌లలోని ఏదైనా) స్టాక్ నుండి పాప్ చేయడం ద్వారా కాలర్ రీస్టోర్ చేస్తాడు. సబ్‌రౌటిన్ ద్వారా ఇతర రిజిస్టర్‌లు ఏవీ సవరించబడలేదని కాలర్ భావించవచ్చు.

కాలింగ్ కన్వెన్షన్ నిర్మాణాత్మకంగా ఉన్న విధానం కారణంగా, సాధారణంగా ఈ దశల్లో కొన్ని (లేదా చాలా వరకు) స్టాక్‌లో ఎటువంటి మార్పులు చేయవు. ఉదాహరణకు, ఆరు లేదా అంతకంటే తక్కువ పారామితులు ఉంటే, ఆ దశలో స్టాక్‌పైకి ఏమీ నెట్టబడదు. అదేవిధంగా, ప్రోగ్రామర్లు (మరియు కంపైలర్‌లు) సాధారణంగా అదనపు పుష్‌లు మరియు పాప్‌లను నివారించడానికి 1 మరియు 6 దశల్లో కాలర్-సేవ్ చేసిన రిజిస్టర్‌ల నుండి వారు శ్రద్ధ వహించే ఫలితాలను ఉంచుతారు.

సబ్‌ట్రౌటిన్‌కి పారామితులను పాస్ చేయడానికి మరో రెండు మార్గాలు ఉన్నాయి, కానీ ఈ ఆన్‌లైన్ కెరీర్ కోర్సులో వాటిని పరిష్కరించరు. వాటిలో ఒకటి సాధారణ ప్రయోజన రిజిస్టర్‌లకు బదులుగా స్టాక్‌ను ఉపయోగిస్తుంది.

కాల్లీ నియమాలు

అని పిలువబడే సబ్‌రూటీన్ యొక్క నిర్వచనం క్రింది నియమాలకు కట్టుబడి ఉండాలి:

1. రిజిస్టర్‌లను ఉపయోగించి లేదా స్టాక్‌పై ఖాళీని సృష్టించడం ద్వారా స్థానిక వేరియబుల్స్ (విధానంలో అభివృద్ధి చేయబడిన వేరియబుల్స్) కేటాయించండి. స్టాక్ క్రిందికి పెరుగుతుందని గుర్తుంచుకోండి. కాబట్టి, స్టాక్ పైభాగంలో ఖాళీ చేయడానికి, స్టాక్ పాయింటర్‌ను తగ్గించాలి. స్టాక్ పాయింటర్ తగ్గిన మొత్తం స్థానిక వేరియబుల్‌ల అవసరమైన సంఖ్యపై ఆధారపడి ఉంటుంది. ఉదాహరణకు, లోకల్ ఫ్లోట్ మరియు లోకల్ లాంగ్ (మొత్తం 12 బైట్‌లు) అవసరమైతే, ఈ లోకల్ వేరియబుల్స్ కోసం స్పేస్ చేయడానికి స్టాక్ పాయింటర్‌ను 12తో తగ్గించాలి. C వంటి ఉన్నత-స్థాయి భాషలో, విలువలను కేటాయించకుండా (ప్రారంభించడం) లేకుండా వేరియబుల్స్ డిక్లేర్ చేయడం దీని అర్థం.

2. తర్వాత, ఫంక్షన్ ద్వారా ఉపయోగించబడే నియమించబడిన కాల్-సేవ్ చేయబడిన (సాధారణ ప్రయోజన రిజిస్టర్‌లు కాలర్ ద్వారా సేవ్ చేయబడని) ఏవైనా రిజిస్టర్‌ల విలువలు తప్పనిసరిగా సేవ్ చేయబడాలి. రిజిస్టర్‌లను సేవ్ చేయడానికి, వాటిని స్టాక్‌పైకి నెట్టండి. కాల్-సేవ్ చేసిన రిజిస్టర్‌లు RBX, RBP మరియు R12 నుండి R15 (RSP కూడా కాల్ కన్వెన్షన్ ద్వారా భద్రపరచబడుతుంది, అయితే ఈ దశలో స్టాక్‌పైకి నెట్టాల్సిన అవసరం లేదు).

ఈ మూడు చర్యలు చేసిన తర్వాత, సబ్‌ట్రౌటిన్ యొక్క వాస్తవ ఆపరేషన్ కొనసాగవచ్చు. సబ్‌ట్రౌటిన్ తిరిగి రావడానికి సిద్ధంగా ఉన్నప్పుడు, కాల్ కన్వెన్షన్ నియమాలు కొనసాగుతాయి.

3. సబ్‌ట్రౌటిన్ పూర్తయినప్పుడు, సబ్‌ట్రౌటిన్ రిటర్న్ విలువ అది ఇప్పటికే లేనట్లయితే RAXలో ఉంచాలి.

4. సబ్‌ట్రౌటిన్ తప్పనిసరిగా సవరించబడిన ఏవైనా కాల్-సేవ్ చేసిన రిజిస్టర్‌ల (RBX, RBP మరియు R15 నుండి R15) పాత విలువలను పునరుద్ధరించాలి. రిజిస్టర్ కంటెంట్‌లను స్టాక్ నుండి పాప్ చేయడం ద్వారా పునరుద్ధరించబడతాయి. రిజిస్టర్‌లు పుష్ చేయబడిన విలోమ క్రమంలో పాప్ చేయబడాలని గమనించండి.

5. తరువాత, మేము స్థానిక వేరియబుల్స్‌ను డీల్‌లోకేట్ చేస్తాము. దీన్ని చేయడానికి సులభమైన మార్గం ఏమిటంటే, దశ 1లో దాని నుండి తీసివేయబడిన అదే మొత్తాన్ని RSPకి జోడించడం.

6. చివరగా, మేము రెట్ సూచనను అమలు చేయడం ద్వారా కాలర్ వద్దకు తిరిగి వస్తాము. ఈ సూచన స్టాక్ నుండి తగిన రిటర్న్ చిరునామాను కనుగొని తీసివేస్తుంది.

'myFunc' అని పిలువబడే మరొక సబ్‌రౌటీన్‌ని కాల్ చేయడానికి కాలర్ సబ్‌ట్రౌటిన్ యొక్క శరీరానికి ఉదాహరణ ఈ క్రింది విధంగా ఉంది (కామెంట్‌లను చదవండి):

; మూడు తీసుకునే ఫంక్షన్ ”myFunc”ని కాల్ చేయాలనుకుంటున్నారా
; పూర్ణాంక పరామితి. మొదటి పరామితి RAXలో ఉంది.
; రెండవ పరామితి స్థిరాంకం 456. మూడవది
; పారామీటర్ మెమరీ లొకేషన్ ”వేరియబుల్”లో ఉంది

పుష్ rdi ; rdi అనేది ఒక పారామ్ అవుతుంది, కాబట్టి దాన్ని సేవ్ చేస్తోంది
; దీర్ఘ retVal = myFunc (x, 456, z);

మోవ్ ఆర్డి, రాక్స్; RDIలో మొదటి పరామితిని ఉంచండి
mov rsi, 456 ; RSIలో రెండవ పరామితిని ఉంచండి
mov rdx , [వేరియబుల్]; RDXలో మూడవ పరామితిని ఉంచండి

myFuncకి కాల్ చేయండి; ఫంక్షన్ కాల్

పాప్ ఆర్డిఐ ; సేవ్ చేయబడిన RDI విలువను పునరుద్ధరించండి
; myFunc యొక్క రిటర్న్ విలువ ఇప్పుడు RAXలో అందుబాటులో ఉంది

కాలీ ఫంక్షన్ (myFunc) యొక్క ఉదాహరణ (కామెంట్‌లను చదవండి):

myFunc:
; ∗∗∗ ప్రామాణిక సబ్‌రౌటిన్ ప్రోలాగ్ ∗∗∗
ఉప rsp, 8 ; “సబ్” ఆప్‌కోడ్‌ని ఉపయోగించి 64−bit లోకల్ వేరియబుల్ (ఫలితం) కోసం గది

పుష్ rbx; కాల్-సేవ్ రిజిస్టర్‌లను సేవ్ చేయండి
పుష్ rbp; రెండూ myFunc ద్వారా ఉపయోగించబడతాయి

; ∗∗∗ సబ్ రొటీన్ బాడీ ∗∗∗
మోవ్ రాక్స్, ఆర్డిఐ; పరామితి 1 నుండి RAX
mov rbp, rsi; పరామితి 2 నుండి RBP
mov rbx, rdx; పరామితి 3 నుండి rb x
mov [rsp + 1 6], rbx; rbx ను లోకల్ వేరియబుల్‌లో ఉంచండి
జోడించు [ rsp + 1 6 ] , rbp ; స్థానిక వేరియబుల్‌లో rbpని జోడించండి
మోవ్ రాక్స్, [rsp +16]; స్థానిక వేరియబుల్ యొక్క mov కంటెంట్‌లు RAXకి
; (రిటర్న్ విలువ/చివరి ఫలితం)

; ∗∗∗ ప్రామాణిక సబ్‌రూటీన్ ఎపిలోగ్ ∗∗∗
పాప్ rbp; కాలీ సేవ్ రిజిస్టర్‌లను పునరుద్ధరించండి
పాప్ rbx; నెట్టినప్పుడు రివర్స్
rsp, 8 జోడించండి; స్థానిక వేరియబుల్ (లు)ని డీలాకేట్ చేయండి 8 అంటే 8 బైట్లు
ret ; స్టాక్ నుండి పాప్ టాప్ విలువ , అక్కడికి దూకు

6.39 x64 కోసం అంతరాయాలు మరియు మినహాయింపులు

ప్రోగ్రామ్ ఎగ్జిక్యూషన్, అంతరాయాలు మరియు మినహాయింపులకు అంతరాయం కలిగించడానికి ప్రాసెసర్ రెండు విధానాలను అందిస్తుంది:

  • అంతరాయం అనేది సాధారణంగా I/O పరికరం ద్వారా ప్రేరేపించబడే అసమకాలిక (ఏ సమయంలోనైనా జరగవచ్చు) ఈవెంట్.
  • ఒక మినహాయింపు అనేది ఒక సూచనను అమలు చేస్తున్నప్పుడు ప్రాసెసర్ ఒకటి లేదా అంతకంటే ఎక్కువ ముందే నిర్వచించిన పరిస్థితులను గుర్తించినప్పుడు ఉత్పత్తి చేయబడిన ఒక సమకాలిక ఈవెంట్ (కోడ్ అమలు చేయబడినప్పుడు, ముందుగా ప్రోగ్రామ్ చేయబడినప్పుడు, కొన్ని సంఘటనల ఆధారంగా జరుగుతుంది). మూడు రకాల మినహాయింపులు పేర్కొనబడ్డాయి: లోపాలు, ఉచ్చులు మరియు గర్భస్రావాలు.

ప్రాసెసర్ తప్పనిసరిగా అదే విధంగా అంతరాయాలు మరియు మినహాయింపులకు ప్రతిస్పందిస్తుంది. అంతరాయం లేదా మినహాయింపు సంకేతాలు ఇచ్చినప్పుడు, ప్రాసెసర్ ప్రస్తుత ప్రోగ్రామ్ లేదా టాస్క్ యొక్క అమలును నిలిపివేస్తుంది మరియు అంతరాయాన్ని లేదా మినహాయింపు పరిస్థితిని నిర్వహించడానికి ప్రత్యేకంగా వ్రాసిన హ్యాండ్లర్ విధానానికి మారుతుంది. ప్రాసెసర్ ఇంటరప్ట్ డిస్క్రిప్టర్ టేబుల్ (IDT)లోని ఎంట్రీ ద్వారా హ్యాండ్లర్ విధానాన్ని యాక్సెస్ చేస్తుంది. హ్యాండ్లర్ అంతరాయాన్ని లేదా మినహాయింపును నిర్వహించడాన్ని పూర్తి చేసినప్పుడు, ప్రోగ్రామ్ నియంత్రణ అంతరాయం కలిగించిన ప్రోగ్రామ్ లేదా టాస్క్‌కి తిరిగి వస్తుంది.

ఆపరేటింగ్ సిస్టమ్, ఎగ్జిక్యూటివ్ మరియు/లేదా పరికర డ్రైవర్లు సాధారణంగా అప్లికేషన్ ప్రోగ్రామ్‌లు లేదా టాస్క్‌ల నుండి స్వతంత్రంగా అంతరాయాలు మరియు మినహాయింపులను నిర్వహిస్తాయి. అయితే, అప్లికేషన్ ప్రోగ్రామ్‌లు ఆపరేటింగ్ సిస్టమ్‌లో పొందుపరచబడిన అంతరాయ మరియు మినహాయింపు హ్యాండ్లర్‌లను యాక్సెస్ చేయగలవు లేదా అసెంబ్లీ-భాషా కాల్‌ల ద్వారా దానిని ఎగ్జిక్యూటివ్ చేయగలవు.

IDTలోని ఎంట్రీలతో అనుబంధించబడిన పద్దెనిమిది (18) ముందే నిర్వచించబడిన అంతరాయాలు మరియు మినహాయింపులు నిర్వచించబడ్డాయి. రెండు వందల ఇరవై నాలుగు (224) వినియోగదారు నిర్వచించిన అంతరాయాలను కూడా తయారు చేయవచ్చు మరియు పట్టికతో అనుబంధించవచ్చు. IDTలోని ప్రతి అంతరాయం మరియు మినహాయింపు 'వెక్టర్' అని పిలువబడే సంఖ్యతో గుర్తించబడుతుంది. టేబుల్ 6.39.1 IDT మరియు వాటి సంబంధిత వెక్టర్‌లలోని ఎంట్రీలతో అంతరాయాలు మరియు మినహాయింపులను జాబితా చేస్తుంది. వెక్టర్స్ 0 నుండి 8, 10 నుండి 14, మరియు 16 నుండి 19 వరకు ముందే నిర్వచించబడిన అంతరాయాలు మరియు మినహాయింపులు. 32 నుండి 255 వరకు వెక్టర్స్ సాఫ్ట్‌వేర్-నిర్వచించిన అంతరాయాలకు (యూజర్) సాఫ్ట్‌వేర్ అంతరాయాలు లేదా ముసుగు చేయగల హార్డ్‌వేర్ అంతరాయాలకు సంబంధించినవి.

ప్రాసెసర్ అంతరాయాన్ని లేదా మినహాయింపును గుర్తించినప్పుడు, అది క్రింది వాటిలో ఒకదాన్ని చేస్తుంది:

  • హ్యాండ్లర్ విధానానికి అవ్యక్త కాల్‌ని అమలు చేయండి
  • హ్యాండ్లర్ టాస్క్‌కి అవ్యక్త కాల్‌ని అమలు చేయండి

6.4 64-బిట్ ARM కంప్యూటర్ ఆర్కిటెక్చర్ బేసిక్స్

ARM ఆర్కిటెక్చర్లు RISC ప్రాసెసర్ల కుటుంబాన్ని నిర్వచించాయి, ఇవి అనేక రకాల అప్లికేషన్‌లలో ఉపయోగించడానికి అనుకూలంగా ఉంటాయి. ARM అనేది ఒక లోడ్/స్టోర్ ఆర్కిటెక్చర్, దీనితో ALU (అరిథ్‌మెటిక్ లాజిక్ యూనిట్) ఆపరేషన్ వంటి ఏదైనా ప్రాసెసింగ్ జరగడానికి ముందు డేటాను మెమరీ నుండి రిజిస్టర్‌కి లోడ్ చేయడం అవసరం. తదుపరి సూచన ఫలితాన్ని మెమరీకి తిరిగి నిల్వ చేస్తుంది. ఇది x86 మరియు x64 ఆర్కిటెక్చర్‌ల నుండి ఒక అడుగు వెనక్కి వేసినట్లు అనిపించవచ్చు, ఇవి ఒకే సూచనలో (ప్రాసెసర్ రిజిస్టర్‌లను ఉపయోగించి, వాస్తవానికి) మెమరీలోని ఒపెరాండ్‌లపై నేరుగా పనిచేస్తాయి, లోడ్/స్టోర్ విధానం, ఆచరణలో, అనేక సీక్వెన్షియల్ ఆపరేషన్‌లను అనుమతిస్తుంది. అనేక ప్రాసెసర్ రిజిస్టర్‌లలో ఒకదానిలోకి లోడ్ అయిన తర్వాత, ఆపరాండ్‌లో అధిక వేగంతో ప్రదర్శించబడుతుంది. ARM ప్రాసెసర్‌లు చిన్న ముగింపు లేదా పెద్ద-ఎండియన్‌నెస్ ఎంపికను కలిగి ఉంటాయి. డిఫాల్ట్ ARM 64 సెట్టింగ్ లిటిల్-ఎండియన్, ఇది సాధారణంగా ఆపరేటింగ్ సిస్టమ్‌లచే ఉపయోగించబడే కాన్ఫిగరేషన్. 64-బిట్ ARM ఆర్కిటెక్చర్ ఆధునికమైనది మరియు ఇది 32-బిట్ ARM ఆర్కిటెక్చర్‌ను భర్తీ చేయడానికి సెట్ చేయబడింది.

గమనిక : 64-బిట్ ARM µP కోసం ప్రతి సూచన 4 బైట్లు (32 బిట్‌లు) పొడవు ఉంటుంది.

6.41 64-బిట్ ARM రిజిస్టర్ సెట్
64-బిట్ ARM µP కోసం 31 సాధారణ ప్రయోజనం 64-బిట్ రిజిస్టర్‌లు ఉన్నాయి. కింది రేఖాచిత్రం సాధారణ ప్రయోజన రిజిస్టర్‌లు మరియు కొన్ని ముఖ్యమైన రిజిస్టర్‌లను చూపుతుంది:


Fig.4.11.1 64-బిట్ సాధారణ ప్రయోజనం మరియు కొన్ని ముఖ్యమైన రిజిస్టర్‌లు

సాధారణ ప్రయోజన రిజిస్టర్‌లను X0 నుండి X30 వరకు సూచిస్తారు. ప్రతి రిజిస్టర్ కోసం మొదటి 32-బిట్ భాగం W0 నుండి W30 వరకు సూచించబడుతుంది. 32 బిట్‌లు మరియు 64 బిట్‌ల మధ్య వ్యత్యాసాన్ని నొక్కి చెప్పనప్పుడు, “R” ఉపసర్గ ఉపయోగించబడుతుంది. ఉదాహరణకు, R14 W14 లేదా X14ని సూచిస్తుంది.

6502 µP 16-బిట్ ప్రోగ్రామ్ కౌంటర్‌ని కలిగి ఉంది మరియు 2ని పరిష్కరించగలదు 16 మెమరీ బైట్ స్థానాలు. 64-బిట్ ARM µP 64-బిట్ ప్రోగ్రామ్ కౌంటర్‌ని కలిగి ఉంది మరియు 2 వరకు పరిష్కరించగలదు 64 = 1.844674407 x 1019 (వాస్తవానికి 18,446,744,073,709,551,616) మెమరీ బైట్ స్థానాలు. ప్రోగ్రామ్ కౌంటర్ అమలు చేయవలసిన తదుపరి సూచనల చిరునామాను కలిగి ఉంటుంది. ARM64 లేదా AArch64 సూచనల పొడవు సాధారణంగా నాలుగు బైట్లు. మెమరీ నుండి ప్రతి సూచనను పొందిన తర్వాత ప్రాసెసర్ స్వయంచాలకంగా ఈ రిజిస్టర్‌ను నాలుగుకి పెంచుతుంది.

స్టాక్ పాయింటర్ రిజిస్టర్ లేదా SP 31 సాధారణ ప్రయోజన రిజిస్టర్‌లలో లేదు. ఏదైనా ఆర్కిటెక్చర్ యొక్క స్టాక్ పాయింటర్ మెమరీలో చివరి స్టాక్ ఎంట్రీని సూచిస్తుంది. ARM-64 కోసం, స్టాక్ క్రిందికి పెరుగుతుంది.

6502 µP 8-బిట్ ప్రాసెసర్ స్టేటస్ రిజిస్టర్‌ను కలిగి ఉంది. ARM64లో సమానమైన దానిని PSTATE రిజిస్టర్ అంటారు. ఈ రిజిస్టర్ కార్యకలాపాల ఫలితాల కోసం మరియు ప్రాసెసర్ (µP) నియంత్రణ కోసం ఉపయోగించే ఫ్లాగ్‌లను నిల్వ చేస్తుంది. ఇది 32-బిట్‌ల వెడల్పుతో ఉంటుంది. కింది పట్టిక PSTATE రిజిస్టర్‌లో సాధారణంగా ఉపయోగించే బిట్‌ల పేర్లు, సూచిక మరియు అర్థాలను ఇస్తుంది:

పట్టిక 6.41.1
ఎక్కువగా ఉపయోగించే PSTATE ఫ్లాగ్‌లు (బిట్స్)
చిహ్నం బిట్ ప్రయోజనం
ఎం 0-3 మోడ్: ప్రస్తుత అమలు అధికార స్థాయి (USR, SVC మరియు మొదలైనవి).
టి 4 థంబ్: T32 (థంబ్) ఇన్‌స్ట్రక్షన్ సెట్ సక్రియంగా ఉంటే ఇది సెట్ చేయబడుతుంది. స్పష్టంగా ఉంటే, ARM సూచనల సెట్ సక్రియంగా ఉంటుంది. వినియోగదారు కోడ్ ఈ బిట్‌ని సెట్ చేసి క్లియర్ చేయగలదు.
మరియు 9 ఎండియన్‌నెస్: ఈ బిట్‌ని సెట్ చేయడం వలన పెద్ద-ఎండియన్ మోడ్‌ను ప్రారంభిస్తుంది. స్పష్టంగా ఉంటే, లిటిల్-ఎండియన్ మోడ్ సక్రియంగా ఉంటుంది. డిఫాల్ట్ లిటిల్-ఎండియన్ మోడ్.
ప్ర 27 క్యుములేటివ్ సంతృప్త ఫ్లాగ్: ఆపరేషన్ల శ్రేణిలో ఏదో ఒక సమయంలో ఓవర్‌ఫ్లో లేదా సంతృప్తత సంభవించినట్లయితే ఇది సెట్ చేయబడుతుంది
IN 28 ఓవర్‌ఫ్లో ఫ్లాగ్: ఆపరేషన్ ఫలితంగా సంతకం చేసిన ఓవర్‌ఫ్లో ఉంటే ఇది సెట్ చేయబడింది.
సి 29 క్యారీ ఫ్లాగ్: ఇది అదనంగా క్యారీని ఉత్పత్తి చేసిందా లేదా తీసివేత రుణాన్ని ఉత్పత్తి చేసిందా అని సూచిస్తుంది.
తో 30 జీరో ఫ్లాగ్: ఆపరేషన్ ఫలితం సున్నా అయితే ఇది సెట్ చేయబడుతుంది.
ఎన్ 31 ప్రతికూల ఫ్లాగ్: ఆపరేషన్ ఫలితం ప్రతికూలంగా ఉంటే ఇది సెట్ చేయబడుతుంది.

ARM-64 µP అనేక ఇతర రిజిస్టర్‌లను కలిగి ఉంది.

SIMD
SIMD అంటే సింగిల్ ఇన్‌స్ట్రక్షన్, మల్టిపుల్ డేటా. ఒక మైక్రోప్రాసెసర్‌లో ఒకే సమయంలో బహుళ డేటాపై ఒక అసెంబ్లీ భాషా సూచన పని చేయగలదని దీని అర్థం. SIMD మరియు ఫ్లోటింగ్-పాయింట్ కార్యకలాపాలతో ఉపయోగం కోసం ముప్పై రెండు 128 బిట్స్ వెడల్పు రిజిస్టర్లు ఉన్నాయి.

6.42 మెమరీ మ్యాపింగ్
RAM మరియు DRAM రెండూ రాండమ్ యాక్సెస్ మెమరీలు. DRAM RAM కంటే నెమ్మదిగా పని చేస్తుంది. DRAM RAM కంటే చౌకైనది. మెమరీలో 32 గిగాబైట్ (GB) కంటే ఎక్కువ DRAM ఉంటే, మెమరీ నిర్వహణ సమస్యలు ఎక్కువగా ఉంటాయి: 32 GB = 32 x 1024 x 1024 x 1024 బైట్లు. 32 GB కంటే చాలా పెద్ద మొత్తం మెమరీ స్థలం కోసం, మెరుగైన మెమరీ నిర్వహణ కోసం 32 GB కంటే ఎక్కువ DRAMని RAMలతో విడదీయాలి. ARM-64 మెమరీ మ్యాప్‌ను అర్థం చేసుకోవడానికి, మీరు ముందుగా 32-బిట్ ARM సెంట్రల్ ప్రాసెసింగ్ యూనిట్ (CPU) కోసం 4GB మెమరీ మ్యాప్‌ను అర్థం చేసుకోవాలి. CPU అంటే µP. 32-బిట్ కంప్యూటర్ కోసం, గరిష్ట మెమరీ అడ్రస్ చేయగల స్థలం 2 32 = 4 x 2 10 x 2 10 x 2 10 = 4 x 1024 x 1024 x 1024 = 4,294,967,296 = 4GB.

32-బిట్ ARM మెమరీ మ్యాప్
32-బిట్ ARM కోసం మెమరీ మ్యాప్:

32-బిట్ కంప్యూటర్ కోసం, మొత్తం మెమరీ గరిష్ట పరిమాణం 4GB. 0GB చిరునామా నుండి 1GB చిరునామా వరకు ROM ఆపరేటింగ్ సిస్టమ్, RAM మరియు I/O స్థానాలు ఉంటాయి. ROM OS, RAM మరియు I/O చిరునామాల మొత్తం ఆలోచన 6502 CPUతో Commodore-64 పరిస్థితిని పోలి ఉంటుంది. Commodore-64 కోసం OS ROM మెమరీ స్థలంలో టాప్-ఎండ్‌లో ఉంది. ఇక్కడ ROM OS Commodore-64 కంటే చాలా పెద్దది మరియు ఇది మొత్తం మెమరీ చిరునామా స్థలం ప్రారంభంలో ఉంది. ఇతర ఆధునిక కంప్యూటర్‌లతో పోల్చినప్పుడు, ఇక్కడ ROM OS పూర్తయింది, అది వారి హార్డ్ డ్రైవ్‌లలోని OS మొత్తంతో పోల్చదగినది. ROM ఇంటిగ్రేటెడ్ సర్క్యూట్‌లలో OS ఉండడానికి రెండు ప్రధాన కారణాలు ఉన్నాయి: 1) ARM CPUలు ఎక్కువగా స్మార్ట్‌ఫోన్‌ల వంటి చిన్న పరికరాలలో ఉపయోగించబడతాయి. చాలా హార్డ్ డ్రైవ్‌లు స్మార్ట్‌ఫోన్‌లు మరియు ఇతర చిన్న పరికరాల కంటే పెద్దవి, 2) భద్రత కోసం. OS చదవడానికి మాత్రమే మెమరీలో ఉన్నప్పుడు, అది హ్యాకర్లచే పాడైపోదు (భాగాలు ఓవర్‌రైట్ చేయబడింది). కమోడోర్-64తో పోలిస్తే RAM విభాగాలు మరియు ఇన్‌పుట్/అవుట్‌పుట్ విభాగాలు కూడా చాలా పెద్దవి.

32-బిట్ ROM OSతో పవర్ ఆన్ చేయబడినప్పుడు, HiVECలు ప్రారంభించబడితే OS తప్పనిసరిగా 0x00000000 చిరునామా లేదా 0xFFFF0000 చిరునామా నుండి (బూట్ నుండి) ప్రారంభం కావాలి. కాబట్టి, రీసెట్ దశ తర్వాత పవర్ ఆన్ చేయబడినప్పుడు, CPU హార్డ్‌వేర్ 0x00000000 లేదా 0xFFFF0000 ప్రోగ్రామ్ కౌంటర్‌కి లోడ్ అవుతుంది. “0x” ఉపసర్గ అంటే హెక్సాడెసిమల్. ARMv8 64bit CPUల బూట్ చిరునామా నిర్వచించబడిన అమలు. అయినప్పటికీ, వెనుకబడిన అనుకూలత కోసం 0x00000000 లేదా 0xFFFF0000 వద్ద ప్రారంభించమని రచయిత కంప్యూటర్ ఇంజనీర్‌కు సలహా ఇస్తున్నారు.

1GB నుండి 2GB వరకు మ్యాప్ చేయబడిన ఇన్‌పుట్/అవుట్‌పుట్. మ్యాప్ చేయబడిన I/O మరియు 0GB మరియు 1GB మధ్య కనిపించే I/O మధ్య వ్యత్యాసం ఉంది. I/Oతో, ప్రతి పోర్ట్‌కు చిరునామా కమోడోర్-64 వలె స్థిరంగా ఉంటుంది. మ్యాప్ చేయబడిన I/Oతో, కంప్యూటర్ యొక్క ప్రతి ఆపరేషన్‌కు (డైనమిక్) ప్రతి పోర్ట్‌కు చిరునామా తప్పనిసరిగా ఒకే విధంగా ఉండదు.

2GB నుండి 4GB వరకు DRAM. ఇది ఊహించిన (లేదా సాధారణ) RAM. DRAM అంటే డైనమిక్ RAM, కంప్యూటర్ ఆపరేషన్ సమయంలో మారుతున్న చిరునామా యొక్క అర్థం కాదు, భౌతిక RAMలోని ప్రతి సెల్ విలువ ప్రతి క్లాక్ పల్స్‌లో రిఫ్రెష్ చేయబడాలి.

గమనిక :

  • 0x0000,0000 నుండి 0x0000 వరకు, FFFF అనేది OS ROM.
  • 0x0001,0000 నుండి 0x3FFF,FFFF వరకు, ఎక్కువ ROM ఉండవచ్చు, ఆపై RAM, ఆపై కొంత I/O ఉండవచ్చు.
  • 0x4000,0000 నుండి 0x7FFF,FFFF వరకు, అదనపు I/O మరియు/లేదా మ్యాప్ చేయబడిన I/O అనుమతించబడుతుంది.
  • 0x8000,0000 నుండి 0xFFFF వరకు, FFFF ఊహించిన DRAM.

ఆచరణలో, ఊహించిన DRAM 2GB మెమరీ సరిహద్దు వద్ద ప్రారంభించాల్సిన అవసరం లేదని దీని అర్థం. మదర్‌బోర్డుపై స్లాట్ చేయబడిన తగినంత భౌతిక RAM బ్యాంకులు లేనప్పుడు ప్రోగ్రామర్ ఆదర్శ సరిహద్దులను ఎందుకు గౌరవించాలి? అన్ని ర్యామ్ బ్యాంకులకు సరిపడా డబ్బు కస్టమర్ వద్ద లేకపోవడం దీనికి కారణం.

36-బిట్ ARM మెమరీ మ్యాప్
64-బిట్ ARM కంప్యూటర్ కోసం, మొత్తం 32 బిట్‌లు మొత్తం మెమరీని పరిష్కరించడానికి ఉపయోగించబడతాయి. 64-బిట్ ARM కంప్యూటర్ కోసం, మొదటి 36 బిట్‌లు మొత్తం మెమరీని పరిష్కరించడానికి ఉపయోగించవచ్చు, ఈ సందర్భంలో, 2 36 = 68,719,476,736 = 64GB. ఇది ఇప్పటికే చాలా జ్ఞాపకం. నేటి సాధారణ కంప్యూటర్‌లకు ఇంత మెమరీ అవసరం లేదు. ఇది 64 బిట్‌ల ద్వారా యాక్సెస్ చేయగల గరిష్ట మెమరీ పరిధికి ఇంకా చేరుకోలేదు. ARM CPU కోసం 36-బిట్‌ల మెమరీ మ్యాప్:

0GB చిరునామా నుండి 4GB చిరునామా వరకు 32-బిట్ మెమరీ మ్యాప్ ఉంటుంది. 'రిజర్వ్ చేయబడింది' అంటే ఉపయోగించబడదు మరియు భవిష్యత్ ఉపయోగం కోసం ఉంచబడుతుంది. ఇది ఆ స్థలం కోసం మదర్‌బోర్డ్‌లో స్లాట్ చేయబడిన భౌతిక మెమరీ బ్యాంకులు కానవసరం లేదు. ఇక్కడ, DRAM మరియు మ్యాప్ చేయబడిన I/O 32-బిట్ మెమరీ మ్యాప్‌కు సమానమైన అర్థాలను కలిగి ఉంటాయి.

కింది పరిస్థితి ఆచరణలో కనుగొనవచ్చు:

  • 0x1 0000 0000 - 0x3 FFFF FFFF; రిజర్వ్ చేయబడింది. భవిష్యత్ ఉపయోగం కోసం 12GB చిరునామా స్థలం రిజర్వ్ చేయబడింది.
  • 0x4 0000 0000 - 0x7 FFFF FFFF; మ్యాప్ చేయబడిన I/O. డైనమిక్‌గా మ్యాప్ చేయబడిన I/O కోసం 16GB చిరునామా స్థలం అందుబాటులో ఉంది.
  • 0x8 0000 0000 - 0x8 7FFF FFFF FFFF; రంధ్రం లేదా DRAM. 2GB చిరునామా స్థలం కింది వాటిలో దేనినైనా కలిగి ఉండవచ్చు:
    • DRAM పరికర విభజనను ప్రారంభించడానికి రంధ్రం (క్రింది చర్చలో వివరించినట్లు).
    • DRAM.
  • 0x8 8000 0000 - 0xF FFFF FFFF; DRAM. DRAM కోసం 30GB చిరునామా స్థలం.

ఈ మెమరీ మ్యాప్ 32-బిట్ అడ్రస్ మ్యాప్ యొక్క సూపర్‌సెట్, అదనపు స్థలం 50% DRAM (1/2)గా విభజించబడింది, దానిలో ఒక ఐచ్ఛిక రంధ్రం మరియు 25% మ్యాప్ చేయబడిన I/O స్పేస్ మరియు రిజర్వ్ చేయబడిన స్థలం (1/4 ) మిగిలిన 25% (1/4) 32-బిట్ మెమరీ మ్యాప్ ½ + ¼ + ¼ = 1 కోసం.

గమనిక : 32 బిట్‌ల నుండి 360 బిట్‌ల వరకు 36 బిట్‌ల యొక్క అత్యంత ముఖ్యమైన వైపుకు 4 బిట్‌ల అదనం.

40-బిట్ మెమరీ మ్యాప్
40-బిట్ అడ్రస్ మ్యాప్ అనేది 36-బిట్ అడ్రస్ మ్యాప్ యొక్క సూపర్‌సెట్ మరియు దానిలో ఐచ్ఛిక రంధ్రం యొక్క 50% DRAM, 25% మ్యాప్ చేయబడిన I/O స్పేస్ మరియు రిజర్వ్ చేసిన స్థలం మరియు మిగిలిన 25% అదే నమూనాను అనుసరిస్తుంది. మునుపటి మెమరీ మ్యాప్ కోసం స్థలం (36-బిట్). మెమరీ మ్యాప్ కోసం రేఖాచిత్రం:

రంధ్రం యొక్క పరిమాణం 544 - 512 = 32GB. కింది పరిస్థితి ఆచరణలో కనుగొనవచ్చు:

  • 0x10 0000 0000 - 0x3F FFFF FFFF; రిజర్వ్ చేయబడింది. 192GB చిరునామా స్థలం భవిష్యత్ ఉపయోగం కోసం రిజర్వ్ చేయబడింది.
  • 0x40 0000 0000 - 0x7F FFFF FFFF; మ్యాప్ చేయబడింది. డైనమిక్‌గా మ్యాప్ చేయబడిన I/O కోసం I/O 256GB చిరునామా స్థలం అందుబాటులో ఉంది.
  • 0x80 0000 0000 - 0x87 FFFF FFFF; రంధ్రం లేదా DRAM. 32GB చిరునామా స్థలం కింది వాటిలో దేనినైనా కలిగి ఉండవచ్చు:
    • DRAM పరికర విభజనను ప్రారంభించడానికి రంధ్రం (క్రింది చర్చలో వివరించిన విధంగా)
    • DRAM
  • 0x88 0000 0000 - 0xFF FFFF FFFF; DRAM. DRAM కోసం 480GB చిరునామా స్థలం.

గమనిక : 36 బిట్‌ల నుండి 40 బిట్‌ల వరకు 36 బిట్‌ల యొక్క అత్యంత ముఖ్యమైన వైపు 4 బిట్‌ల అదనం.

DRAM రంధ్రం
32-బిట్‌లకు మించిన మెమరీ మ్యాప్‌లో, ఇది DRAM హోల్ లేదా ఎగువ నుండి DRAM యొక్క కొనసాగింపుగా ఉంటుంది. ఇది రంధ్రం అయినప్పుడు, అది క్రింది విధంగా ప్రశంసించబడాలి: DRAM రంధ్రం పెద్ద DRAM పరికరాన్ని బహుళ చిరునామా పరిధులుగా విభజించడానికి ఒక మార్గాన్ని అందిస్తుంది. అధిక DRAM చిరునామా సరిహద్దు ప్రారంభంలో ఐచ్ఛిక DRAM రంధ్రం ప్రతిపాదించబడింది. తక్కువ భౌతికంగా అడ్రస్ చేయబడిన ప్రాంతం అంతటా పెద్ద సామర్థ్యం గల DRAM పరికరాన్ని విభజించేటప్పుడు ఇది సరళీకృత డీకోడింగ్ స్కీమ్‌ను ప్రారంభిస్తుంది.

ఉదాహరణకు, 64GB DRAM భాగం క్రింది విధంగా అధిక ఆర్డర్ చిరునామా బిట్‌లలో సాధారణ వ్యవకలనం ద్వారా నిర్వహించబడే చిరునామా ఆఫ్‌సెట్‌లతో మూడు ప్రాంతాలుగా ఉప-విభజన చేయబడింది:

పట్టిక 6.42.1
హోల్స్‌తో 64GB DRAM విభజనకు ఉదాహరణ
SoCలో భౌతిక చిరునామాలు ఆఫ్‌సెట్ అంతర్గత DRAM చిరునామా
2 GBytes (32-bit మ్యాప్) 0x00 8000 0000 – 0x00 FFFF FFFF -0x00 8000 0000 0x00 0000 0000 – 0x00 7FFF FFFF
30 GBytes (36-bit మ్యాప్) 0x08 8000 0000 – 0x0F FFFF FFFF -0x08 0000 0000 0x00 8000 0000 – 0x07 FFFF FFFF
32 GBytes (40-bit మ్యాప్) 0x88 0000 0000 – 0x8F FFFF FFFF -0x80 0000 0000 0x08 0000 0000 – 0x0F FFFF FFFF

ARM CPUల కోసం ప్రతిపాదిత 44-బిట్ మరియు 48-బిట్ అడ్రస్డ్ మెమరీ మ్యాప్స్
ఒక పర్సనల్ కంప్యూటర్‌లో 1024GB (= 1TB) మెమరీ ఉందని భావించండి; అది చాలా ఎక్కువ జ్ఞాపకశక్తి. కాబట్టి, వరుసగా 16 TB మరియు 256 TB కోసం ARM CPUల కోసం 44-బిట్ మరియు 48-బిట్ అడ్రస్డ్ మెమరీ మ్యాప్‌లు భవిష్యత్ కంప్యూటర్ అవసరాల కోసం ప్రతిపాదనలు మాత్రమే. వాస్తవానికి, ARM CPUల కోసం ఈ ప్రతిపాదనలు మునుపటి మెమరీ మ్యాప్‌ల మాదిరిగానే నిష్పత్తి ద్వారా మెమరీ విభజనను అనుసరిస్తాయి. అంటే: 50% DRAM దానిలో ఐచ్ఛిక రంధ్రం, 25% మ్యాప్ చేయబడిన I/O స్పేస్ మరియు రిజర్వ్ చేయబడిన స్థలం మరియు మిగిలిన 25% స్థలం మునుపటి మెమరీ మ్యాప్‌కు.

ARM 64 బిట్‌ల కోసం 52-బిట్, 56-బిట్, 60-బిట్ మరియు 64-బిట్ అడ్రస్డ్ మెమరీ మ్యాప్‌లు ఇప్పటికీ ప్రతిపాదించబడాల్సి ఉంది. ఆ సమయంలో శాస్త్రవేత్తలు ఇప్పటికీ మెమరీ స్థలం యొక్క 50 : 25 : 25 విభజన ఉపయోగకరంగా ఉంటే, వారు నిష్పత్తిని నిర్వహిస్తారు.

గమనిక : SoC అంటే సిస్టమ్-ఆన్-చిప్, ఇది µP చిప్‌లోని సర్క్యూట్‌లను సూచిస్తుంది, అది లేకపోతే అక్కడ ఉండేది కాదు.

SRAM లేదా స్టాటిక్ రాండమ్ యాక్సెస్ మెమరీ సంప్రదాయ DRAM కంటే వేగవంతమైనది, కానీ ఎక్కువ సిలికాన్ ప్రాంతం అవసరం. SRAMకి రిఫ్రెష్ అవసరం లేదు. రీడర్ RAMని SRAMగా ఊహించవచ్చు.

6.43 ARM 64 కోసం అసెంబ్లీ లాంగ్వేజ్ అడ్రసింగ్ మోడ్‌లు
ARM అనేది లోడ్/స్టోర్ ఆర్కిటెక్చర్, దీనితో అరిథ్‌మెటిక్ లాజిక్ ఆపరేషన్ వంటి ఏదైనా ప్రాసెసింగ్ జరగడానికి ముందు డేటాను మెమరీ నుండి ప్రాసెసర్ రిజిస్టర్‌కి లోడ్ చేయడం అవసరం. తదుపరి సూచన ఫలితాన్ని మెమరీకి తిరిగి నిల్వ చేస్తుంది. ఇది x86 మరియు దాని తదుపరి x64 ఆర్కిటెక్చర్‌ల నుండి ఒక మెట్టు వెనుకకు వచ్చినట్లు అనిపించవచ్చు, ఇవి ఒకే సూచనలో మెమరీలోని ఆపరాండ్‌లపై నేరుగా పనిచేస్తాయి, ఆచరణలో, లోడ్/స్టోర్ విధానం అనేక సీక్వెన్షియల్ ఆపరేషన్‌లను అధిక వేగంతో నిర్వహించడానికి అనుమతిస్తుంది. అనేక ప్రాసెసర్ రిజిస్టర్లలో ఒకదానిలో లోడ్ అయిన తర్వాత ఒక ఆపరేండ్.

ARM అసెంబ్లీ భాష యొక్క ఆకృతి x64 (x86) సిరీస్‌తో సారూప్యతలు మరియు తేడాలను కలిగి ఉంది.

  • ఆఫ్‌సెట్ : బేస్ రిజిస్టర్‌కి సంతకం చేసిన స్థిరాంకం జోడించబడుతుంది. సూచనలో భాగంగా ఆఫ్‌సెట్ టైప్ చేయబడింది. ఉదాహరణకు: ldr x0, [rx, #10] r1+10 చిరునామాలో పదంతో r0ని లోడ్ చేస్తుంది.
  • నమోదు చేసుకోండి : రిజిస్టర్‌లో నిల్వ చేయబడిన సంతకం చేయని ఇంక్రిమెంట్ బేస్ రిజిస్టర్‌లోని విలువకు జోడించబడుతుంది లేదా తీసివేయబడుతుంది. ఉదాహరణకు: ldr r0, [x1, x2] x1+x2 చిరునామాలో పదంతో r0ని లోడ్ చేస్తుంది. రిజిస్టర్‌లలో దేనినైనా బేస్ రిజిస్టర్‌గా భావించవచ్చు.
  • స్కేల్ రిజిస్టర్ : రిజిస్టర్‌లోని ఇంక్రిమెంట్ బేస్ రిజిస్టర్ విలువకు జోడించబడటానికి లేదా తీసివేయడానికి ముందు పేర్కొన్న బిట్ స్థానాల సంఖ్య ద్వారా ఎడమ లేదా కుడికి మార్చబడుతుంది. ఉదాహరణకు: ldr x0, [x1, x2, lsl #3] r1+(r2×8) చిరునామాలో పదంతో r0ని లోడ్ చేస్తుంది. షిఫ్ట్ అనేది ఖాళీ చేయబడిన బిట్ స్థానాల్లో సున్నా బిట్‌లను ఇన్సర్ట్ చేసే లాజికల్ లెఫ్ట్ లేదా రైట్ షిఫ్ట్ (lsl లేదా lsr) కావచ్చు లేదా ఖాళీ చేయబడిన స్థానాల్లో సైన్ బిట్‌ను ప్రతిబింబించే అంకగణిత కుడి షిఫ్ట్ (asr).

రెండు ఒపెరాండ్‌లు పాల్గొన్నప్పుడు, గమ్యం మూలానికి ముందు (ఎడమవైపు) వస్తుంది (దీనికి కొన్ని మినహాయింపులు ఉన్నాయి). ARM అసెంబ్లీ భాష కోసం ఆప్‌కోడ్‌లు కేస్ ఇన్‌సెన్సిటివ్‌గా ఉంటాయి.

తక్షణ ARM64 అడ్రస్సింగ్ మోడ్
ఉదాహరణ:

mov r0, #0xFF000000 ; 32-బిట్ విలువ FF000000hని r0లోకి లోడ్ చేయండి

దశాంశ విలువ 0x లేకుండా ఉంటుంది కానీ ఇప్పటికీ #తో ముందు ఉంటుంది.

నేరుగా నమోదు చేసుకోండి
ఉదాహరణ:

mov x0, x1 ; x1 నుండి x0కి కాపీ చేయండి

పరోక్షంగా నమోదు చేయండి
ఉదాహరణ:

str x0, [x3] ; x3లోని చిరునామాకు x0ని నిల్వ చేయండి

ఆఫ్‌సెట్‌తో పరోక్షంగా నమోదు చేసుకోండి
ఉదాహరణలు:

ldr x0, [x1, #32] ; చిరునామా [r1+32] వద్ద ఉన్న విలువతో r0ని లోడ్ చేయండి; r1 అనేది బేస్ రిజిస్టర్
str x0, [x1, #4] ; r0ని చిరునామా [r1+4]కి నిల్వ చేయండి; r1 అనేది బేస్ రిజిస్టర్; సంఖ్యలు బేస్ 10

ఆఫ్‌సెట్‌తో పరోక్షంగా నమోదు చేసుకోండి (ముందుగా పెంచబడింది)
ఉదాహరణలు:

ldr x0, [x1, #32]! ; r0ని [r1+32]తో లోడ్ చేయండి మరియు r1ని (r1+32)కి అప్‌డేట్ చేయండి
str x0, [x1, #4]! ; r0 నుండి [r1+4]కి నిల్వ చేయండి మరియు r1ని (r1+4)కి నవీకరించండి

'!' ఉపయోగాన్ని గమనించండి చిహ్నం.

ఆఫ్‌సెట్‌తో పరోక్షంగా నమోదు చేసుకోండి (పోస్ట్-ఇంక్రిమెంటెడ్)
ఉదాహరణలు:

ldr x0, [x1], #32 ; [x1]ని x0కి లోడ్ చేయండి, ఆపై x1ని (x1+32)కి అప్‌డేట్ చేయండి
str x0, [x1], #4 ; x0 నుండి [x1] వరకు నిల్వ చేయండి, ఆపై x1ని (x1+4)కి నవీకరించండి

పరోక్షంగా డబుల్ నమోదు
ఒపెరాండ్ చిరునామా అనేది బేస్ రిజిస్టర్ మరియు ఇంక్రిమెంట్ రిజిస్టర్ మొత్తం. రిజిస్టర్ పేర్లు చదరపు బ్రాకెట్లతో చుట్టుముట్టబడి ఉంటాయి.
ఉదాహరణలు:

ldr x0, [x1, x2] ; [x1+x2]తో x0ని లోడ్ చేయండి
str x0, [rx, x2] ; x0 నుండి [x1+x2] వరకు నిల్వ చేయండి

సంబంధిత చిరునామా మోడ్
సంబంధిత అడ్రసింగ్ మోడ్‌లో, ప్రోగ్రామ్ కౌంటర్‌లోని తదుపరి సూచన, ఇండెక్స్‌తో పాటు ప్రభావవంతమైన సూచన. సూచిక సానుకూలంగా లేదా ప్రతికూలంగా ఉండవచ్చు.
ఉదాహరణ:

ldr x0, [pc, #24]

దీని అర్థం PC కంటెంట్ ప్లస్ 24 ద్వారా సూచించబడిన పదంతో లోడ్ రిజిస్టర్ X0.

6.44 ARM 64 కోసం సాధారణంగా ఉపయోగించే కొన్ని సూచనలు
సాధారణంగా ఉపయోగించే సూచనలు ఇక్కడ ఉన్నాయి:

6.45 లూపింగ్

ఇలస్ట్రేషన్
క్రింది కోడ్ X10 రిజిస్టర్‌లోని విలువను X9లోని విలువకు X8లోని విలువ సున్నా అయ్యే వరకు జోడిస్తూనే ఉంటుంది. అన్ని విలువలు పూర్ణాంకాలు అని భావించండి. X8లోని విలువ ప్రతి పునరావృతంలో 1 ద్వారా తీసివేయబడుతుంది:

లూప్:
CBZ X8, దాటవేయి
ADD X9, X9, X10 ; మొదటి X9 గమ్యం మరియు రెండవ X9 మూలం
SUB X8, X8, #1 ; మొదటి X8 గమ్యం మరియు రెండవ X8 మూలం
B లూప్
దాటవేయి:

6502 µP మరియు X64 µP లాగా, ARM 64 µPలోని లేబుల్ లైన్ ప్రారంభంలో ప్రారంభమవుతుంది. పంక్తి ప్రారంభమైన తర్వాత మిగిలిన సూచనలు కొన్ని ఖాళీలలో ప్రారంభమవుతాయి. x64 మరియు ARM 64తో, లేబుల్ తర్వాత కోలన్ మరియు కొత్త లైన్ ఉంటుంది. 6502తో ఉన్నప్పుడు, లేబుల్‌ని అనుసరించి ఒక స్పేస్ తర్వాత సూచన ఉంటుంది. మునుపటి కోడ్‌లో, మొదటి సూచన “CBZ X8, skip” అంటే X8లో విలువ సున్నా అయితే, “skip:” లేబుల్‌లో కొనసాగండి, మధ్యలో సూచనలను దాటవేసి, దిగువ మిగిలిన సూచనలతో కొనసాగండి 'దాటవేయి:'. 'B లూప్' అనేది 'లూప్' లేబుల్‌కి షరతులు లేకుండా దూకడం. 'లూప్' స్థానంలో ఏదైనా ఇతర లేబుల్ పేరు ఉపయోగించవచ్చు.

కాబట్టి, 6502 µP వలె, ARM 64తో లూప్‌ని కలిగి ఉండటానికి శాఖ సూచనలను ఉపయోగించండి.

6.46 ARM 64 ఇన్‌పుట్/అవుట్‌పుట్
అన్ని ARM పెరిఫెరల్స్ (అంతర్గత పోర్ట్‌లు) మెమరీ మ్యాప్ చేయబడ్డాయి. అంటే ప్రోగ్రామింగ్ ఇంటర్‌ఫేస్ అనేది మెమరీ అడ్రస్డ్ రిజిస్టర్‌ల (అంతర్గత పోర్ట్‌లు) సమితి. అటువంటి రిజిస్టర్ యొక్క చిరునామా నిర్దిష్ట మెమరీ బేస్ చిరునామా నుండి ఆఫ్‌సెట్. ఇది 6502 ఇన్‌పుట్/అవుట్‌పుట్ ఎలా చేస్తుందో అదే విధంగా ఉంటుంది. ARMకి ప్రత్యేక I/O అడ్రస్ స్పేస్ కోసం ఎంపిక లేదు.

6.47 ARM 64 స్టాక్
ARM 64 6502 మరియు x64 కలిగి ఉన్న విధంగానే మెమరీలో (RAM) స్టాక్‌ను కలిగి ఉంది. అయితే, ARM64తో, పుష్ లేదా పాప్ ఆప్‌కోడ్ లేదు. ARM 64లోని స్టాక్ కూడా క్రిందికి పెరుగుతుంది. స్టాక్ పాయింటర్‌లోని చిరునామా స్టాక్‌లో ఉంచబడిన చివరి విలువ యొక్క చివరి బైట్ తర్వాత పాయింట్లను సూచిస్తుంది.

ARM64 కోసం సాధారణ పాప్ లేదా పుష్ ఆప్‌కోడ్ లేకపోవడానికి కారణం ARM 64 దాని స్టాక్‌ను వరుసగా 16 బైట్‌ల సమూహాలలో నిర్వహిస్తుంది. అయినప్పటికీ, విలువలు ఒక బైట్, రెండు బైట్లు, నాలుగు బైట్లు మరియు 8 బైట్‌ల బైట్ సమూహాలలో ఉన్నాయి. కాబట్టి, ఒక విలువను స్టాక్‌లో ఉంచవచ్చు మరియు 16 బైట్‌ల కోసం మిగిలిన స్థలాలు (బైట్ స్థానాలు) డమ్మీ బైట్‌లతో ప్యాడ్ చేయబడతాయి. ఇది జ్ఞాపకశక్తిని వృధా చేయడం యొక్క ప్రతికూలత. 16-బైట్ లొకేషన్‌ను చిన్న విలువలతో నింపడం మరియు 16-బైట్ లొకేషన్‌లోని విలువలు ఎక్కడి నుండి వచ్చాయో (రిజిస్టర్‌లు) ట్రాక్ చేసే కొన్ని ప్రోగ్రామర్ వ్రాసిన కోడ్‌ని కలిగి ఉండటం మంచి పరిష్కారం. విలువలను వెనక్కి లాగడంలో కూడా ఈ అదనపు కోడ్ అవసరం. దీనికి ప్రత్యామ్నాయం రెండు 8-బైట్ సాధారణ ప్రయోజన రిజిస్టర్‌లను వేర్వేరు విలువలతో నింపి, ఆపై రెండు 8-బైట్ రిజిస్టర్‌ల కంటెంట్‌లను స్టాక్‌కు పంపడం. స్టాక్‌లోకి వెళ్లి స్టాక్‌ను వదిలివేసే నిర్దిష్ట చిన్న విలువలను ట్రాక్ చేయడానికి ఇక్కడ ఇంకా అదనపు కోడ్ అవసరం.

కింది కోడ్ నాలుగు 4-బైట్ డేటాను స్టాక్‌లో నిల్వ చేస్తుంది:

str w0, [sp, #-4]!
str w1, [sp, #-8]!
str w2, [sp, #-12]!
str w3, [sp, #-16]!

మొదటి నాలుగు బైట్‌లు (w) రిజిస్టర్‌లు – x0, x1, x2 మరియు x3 – స్టాక్‌లోని 16-వరుసగా బైట్ స్థానాలకు పంపబడతాయి. 'str' ​​వినియోగాన్ని గమనించండి మరియు 'పుష్' కాదు. ప్రతి సూచన చివరిలో ఆశ్చర్యార్థక చిహ్నాన్ని గమనించండి. మెమరీ స్టాక్ క్రిందికి పెరుగుతుంది కాబట్టి, మొదటి నాలుగు-బైట్ విలువ మునుపటి స్టాక్ పాయింటర్ స్థానం కంటే మైనస్-నాలుగు బైట్‌ల స్థానంలో ప్రారంభమవుతుంది. మిగిలిన నాలుగు-బైట్ విలువలు క్రిందికి వెళ్తాయి. కింది కోడ్ సెగ్మెంట్ నాలుగు బైట్‌లను పాపింగ్ చేయడానికి సమానమైన సరైన (మరియు క్రమంలో) చేస్తుంది:

ldr w3, [sp], #0
ldr w2, [sp], #4
ldr w1, [sp], #8
ldr w0, [sp], #12

పాప్‌కు బదులుగా ldr ఆప్‌కోడ్‌ను ఉపయోగించడాన్ని గమనించండి. ఆశ్చర్యార్థక చిహ్నం ఇక్కడ ఉపయోగించబడలేదని కూడా గమనించండి.

X0 (8 బైట్లు) మరియు X1 (8 బైట్లు)లోని అన్ని బైట్‌లను స్టాక్‌లోని 16 బైట్-స్థానానికి క్రింది విధంగా పంపవచ్చు:

stp x0, x1, [sp, #-16]! ; 8 + 8 = 16

ఈ సందర్భంలో, x2 (w2) మరియు x3 (w3) రిజిస్టర్‌లు అవసరం లేదు. అన్ని వాంటెడ్ బైట్‌లు X0 మరియు X2 రిజిస్టర్‌లలో ఉన్నాయి. RAMలో రిజిస్టర్ కంటెంట్‌ల జతలను నిల్వ చేయడానికి stp ఆప్‌కోడ్‌ను గమనించండి. ఆశ్చర్యార్థక చిహ్నాన్ని కూడా గమనించండి. పాప్ సమానమైనది:

ldp x0, x1, [sp], #0

ఈ సూచనకు ఆశ్చర్యార్థకం గుర్తు లేదు. మెమరీ నుండి రెండు µP రిజిస్టర్‌లకు వరుసగా రెండు డేటా స్థానాలను లోడ్ చేయడానికి LDRకి బదులుగా ఆప్‌కోడ్ LDPని గమనించండి. మెమరీ నుండి µP రిజిస్టర్‌కి కాపీ చేయడం లోడ్ అవుతుందని గుర్తుంచుకోండి, డిస్క్ నుండి RAMకి ఫైల్‌ను లోడ్ చేయడంతో గందరగోళం చెందకూడదు మరియు µP రిజిస్టర్ నుండి RAMకి కాపీ చేయడం నిల్వ చేయబడుతోంది.

6.48 సబ్‌రూటీన్‌
సబ్‌రౌటిన్ అనేది ఒక విధిని నిర్వర్తించే కోడ్ యొక్క బ్లాక్, ఇది ఐచ్ఛికంగా కొన్ని వాదనల ఆధారంగా మరియు ఐచ్ఛికంగా ఫలితాన్ని అందిస్తుంది. సంప్రదాయం ప్రకారం, R0 నుండి R3 రిజిస్టర్‌లు (నాలుగు రిజిస్టర్‌లు) ఆర్గ్యుమెంట్‌లను (పారామితులు) సబ్‌ట్రౌటిన్‌కి పంపడానికి ఉపయోగించబడతాయి మరియు R0 కాలర్‌కు ఫలితాన్ని తిరిగి పంపడానికి ఉపయోగించబడుతుంది. 4 కంటే ఎక్కువ ఇన్‌పుట్‌లు అవసరమయ్యే సబ్‌ట్రౌటిన్ అదనపు ఇన్‌పుట్‌ల కోసం స్టాక్‌ను ఉపయోగిస్తుంది. సబ్‌ట్రౌటిన్‌కి కాల్ చేయడానికి, లింక్ లేదా షరతులతో కూడిన బ్రాంచ్ సూచనలను ఉపయోగించండి. లింక్ సూచనల కోసం వాక్యనిర్మాణం:

BL లేబుల్

ఇక్కడ BL అనేది ఆప్‌కోడ్ మరియు లేబుల్ సబ్‌ట్రౌటిన్ యొక్క ప్రారంభాన్ని (చిరునామా) సూచిస్తుంది. ఈ శాఖ 128MB లోపు షరతులు లేనిది, ముందుకు లేదా వెనుకకు. షరతులతో కూడిన శాఖ సూచనల కోసం వాక్యనిర్మాణం:

బి.కాండ్ లేబుల్

ఎక్కడ cond అనేది షరతు, ఉదా., eq (సమానం) లేదా ne (సమానం కాదు). కింది ప్రోగ్రామ్ రెండు ఆర్గ్యుమెంట్‌ల విలువలను జోడించి R0లో ఫలితాన్ని అందించే doadd సబ్‌ట్రౌటిన్‌ని కలిగి ఉంది:

ఏరియా సబ్‌రౌట్, కోడ్, చదవడానికి మాత్రమే ; ఈ కోడ్ బ్లాక్‌కు పేరు పెట్టండి
ENTRY ; అమలు చేయడానికి మొదటి సూచనను గుర్తించండి
MOV r0, #10 ప్రారంభించండి; పారామితులను సెటప్ చేయండి
MOV r1, #3
BL doadd; సబ్‌రూటీన్‌కి కాల్ చేయండి
ఆపు MOV r0, #0x18 ; angel_SWIreason_ReportException
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
SVC #0x123456 ; ARM సెమీహోస్టింగ్ (గతంలో SWI)
doadd ADD r0, r0, r1 ; సబ్‌రూటీన్ కోడ్
BX lr; సబ్‌ట్రౌటిన్ నుండి తిరిగి వెళ్లండి
;
END ; ఫైల్ ముగింపును గుర్తించండి

జోడించాల్సిన సంఖ్యలు దశాంశం 10 మరియు దశాంశం 3. ఈ కోడ్ బ్లాక్ (ప్రోగ్రామ్)లోని మొదటి రెండు పంక్తులు తర్వాత వివరించబడతాయి. తదుపరి మూడు పంక్తులు 10 నుండి R0 రిజిస్టర్‌ని మరియు 3 నుండి R1 రిజిస్టర్‌ను పంపుతాయి మరియు doadd subroutineని కూడా పిలుస్తాయి. 'doadd' అనేది సబ్‌ట్రౌటిన్ ప్రారంభం యొక్క చిరునామాను కలిగి ఉన్న లేబుల్.

సబ్‌ట్రౌటిన్‌లో కేవలం రెండు లైన్లు ఉంటాయి. మొదటి పంక్తి R0లోని కంటెంట్ 10కి R యొక్క కంటెంట్ 3ని జోడిస్తుంది, ఇది R0లో 13 ఫలితాన్ని అనుమతిస్తుంది. BX ఆప్‌కోడ్ మరియు LR ఆపరాండ్‌తో ఉన్న రెండవ పంక్తి సబ్‌ట్రౌటిన్ నుండి కాలర్ కోడ్‌కి తిరిగి వస్తుంది.

కుడి
ARM 64లోని RET ఆప్‌కోడ్ ఇప్పటికీ సబ్‌ట్రౌటిన్‌తో వ్యవహరిస్తుంది, కానీ 6502లో RTS లేదా x64లో RET లేదా ARM 64లో “BX LR” కలయికకు భిన్నంగా పనిచేస్తుంది. ARM 64లో, RET కోసం వాక్యనిర్మాణం:

నేరుగా {Xn}

ఈ సూచన ప్రోగ్రామ్ కాలర్ సబ్‌ట్రౌటిన్‌లో లేని సబ్‌ట్రౌటిన్‌తో కొనసాగడానికి లేదా కొన్ని ఇతర సూచనలతో మరియు దాని క్రింది కోడ్ సెగ్‌మెంట్‌తో కొనసాగించడానికి అవకాశాన్ని ఇస్తుంది. Xn అనేది ప్రోగ్రామ్ కొనసాగించాల్సిన చిరునామాను కలిగి ఉండే సాధారణ ప్రయోజన రిజిస్టర్. ఈ సూచన బేషరతుగా శాఖలు. Xn ఇవ్వకపోతే ఇది X30 కంటెంట్‌కి డిఫాల్ట్ అవుతుంది.

విధానం కాల్ స్టాండర్డ్
ప్రోగ్రామర్ తన కోడ్ వేరొకరు వ్రాసిన కోడ్‌తో లేదా కంపైలర్ ద్వారా ఉత్పత్తి చేయబడిన కోడ్‌తో పరస్పర చర్య చేయాలని కోరుకుంటే, ప్రోగ్రామర్ రిజిస్టర్ వినియోగానికి సంబంధించిన నియమాలపై వ్యక్తి లేదా కంపైలర్ రైటర్‌తో ఏకీభవించవలసి ఉంటుంది. ARM ఆర్కిటెక్చర్ కోసం, ఈ నియమాలను ప్రొసీజర్ కాల్ స్టాండర్డ్ లేదా PCS అంటారు. ఇవి రెండు మూడు పార్టీల మధ్య కుదిరిన ఒప్పందాలు. PCS కింది వాటిని నిర్దేశిస్తుంది:

  • ఆర్గ్యుమెంట్‌లను ఫంక్షన్‌లోకి పంపడానికి ఏ µP రిజిస్టర్‌లు ఉపయోగించబడతాయి (సబ్రౌటిన్)
  • కాలర్ అని పిలువబడే కాలింగ్ చేసే ఫంక్షన్‌కు ఫలితాన్ని తిరిగి ఇవ్వడానికి ఏ µP రిజిస్టర్‌లు ఉపయోగించబడతాయి
  • కాల్ చేయబడుతున్న ఫంక్షన్‌ను ఏ µP నమోదు చేస్తుంది, ఇది కాల్‌గా పిలువబడుతుంది, ఇది భ్రష్టు పట్టవచ్చు
  • కాల్ చేసే వ్యక్తిని ఏ µP నమోదు చేస్తే భ్రష్టు పట్టదు

6.49 అంతరాయాలు
ARM ప్రాసెసర్ కోసం రెండు రకాల ఇంటర్‌ప్ట్ కంట్రోలర్ సర్క్యూట్‌లు అందుబాటులో ఉన్నాయి:

  • స్టాండర్డ్ ఇంటరప్ట్ కంట్రోలర్: ఇంటరప్ట్ కంట్రోలర్‌లో పరికర బిట్‌మ్యాప్ రిజిస్టర్‌ను చదవడం ద్వారా ఏ పరికరానికి సర్వీసింగ్ అవసరమో అంతరాయ హ్యాండ్లర్ నిర్ణయిస్తుంది.
  • వెక్టర్ ఇంటరప్ట్ కంట్రోలర్ (VIC): అంతరాయాలకు ప్రాధాన్యతనిస్తుంది మరియు అంతరాయానికి కారణమైన పరికరం యొక్క నిర్ధారణను సులభతరం చేస్తుంది. ప్రతి అంతరాయంతో ప్రాధాన్యత మరియు హ్యాండ్లర్ చిరునామాను అనుబంధించిన తర్వాత, ప్రస్తుతం అమలులో ఉన్న అంతరాయ హ్యాండ్లర్ కంటే కొత్త అంతరాయానికి ప్రాధాన్యత ఎక్కువగా ఉంటే మాత్రమే VIC ప్రాసెసర్‌కు అంతరాయ సంకేతాన్ని నిర్ధారిస్తుంది.

గమనిక : మినహాయింపు దోషాన్ని సూచిస్తుంది. 32-బిట్ ARM కంప్యూటర్ కోసం వెక్టర్ ఇంటరప్ట్ కంట్రోలర్ వివరాలు క్రింది విధంగా ఉన్నాయి (64 బిట్ సారూప్యంగా ఉంటుంది):

పట్టిక 6.49.1
32-బిట్ కంప్యూటర్ కోసం ARM వెక్టర్ మినహాయింపు/అంతరాయం
మినహాయింపు/అంతరాయం పొట్టి చేయి చిరునామా ఉన్నత చిరునామా
రీసెట్ చేయండి రీసెట్ చేయండి 0x00000000 0xffff0000
నిర్వచించబడని సూచన UNDEF 0x00000004 0xffff0004
సాఫ్ట్‌వేర్ అంతరాయం SWI 0x00000008 0xffff0008
గర్భస్రావం చేయడాన్ని ముందుగా పొందండి పాబ్ట్ 0x0000000C 0xffff000C
అబార్షన్ తేదీ DABT 0x00000010 0xffff0010
రిజర్వ్ చేయబడింది 0x00000014 0xffff0014
అభ్యర్థనను అంతరాయం కలిగించు IRQ 0x00000018 0xffff0018
వేగవంతమైన అంతరాయ అభ్యర్థన FIQ 0x0000001C 0xffff001C

ఇది 6502 ఆర్కిటెక్చర్ కోసం ఏర్పాటు చేసినట్లు కనిపిస్తోంది NMI , BR , మరియు IRQ పేజీ సున్నాలో పాయింటర్‌లను కలిగి ఉంటుంది మరియు సంబంధిత రొటీన్‌లు మెమరీలో ఎక్కువగా ఉంటాయి (ROM OS). మునుపటి పట్టిక యొక్క వరుసల సంక్షిప్త వివరణలు క్రింది విధంగా ఉన్నాయి:

రీసెట్ చేయండి
ప్రాసెసర్ పవర్ అప్ చేసినప్పుడు ఇది జరుగుతుంది. ఇది సిస్టమ్‌ను ప్రారంభిస్తుంది మరియు విభిన్న ప్రాసెసర్ మోడ్‌ల కోసం స్టాక్‌లను సెట్ చేస్తుంది. ఇది అత్యధిక ప్రాధాన్యత మినహాయింపు. రీసెట్ హ్యాండ్లర్‌లోకి ప్రవేశించిన తర్వాత, CPSR SVC మోడ్‌లో ఉంటుంది మరియు IRQ మరియు FIQ బిట్‌లు రెండూ 1కి సెట్ చేయబడతాయి, ఏవైనా అంతరాయాలను మాస్కింగ్ చేస్తాయి.

అబార్షన్ తేదీ
రెండవ అత్యంత ప్రాధాన్యత. మేము చెల్లని చిరునామాలో చదవడానికి/వ్రాయడానికి ప్రయత్నించినప్పుడు లేదా తప్పు యాక్సెస్ అనుమతిని యాక్సెస్ చేసినప్పుడు ఇది జరుగుతుంది. డేటా అబార్ట్ హ్యాండ్లర్‌లోకి ప్రవేశించిన తర్వాత, IRQలు నిలిపివేయబడతాయి (I-bit సెట్ 1) మరియు FIQ ప్రారంభించబడుతుంది. IRQలు ముసుగు వేయబడ్డాయి, కానీ FIQలు ముసుగు లేకుండా ఉంచబడతాయి.

FIQ
FIQ నిర్వహించబడే వరకు అత్యధిక ప్రాధాన్యత కలిగిన అంతరాయాలు, IRQ & FIQలు నిలిపివేయబడతాయి.

IRQ
కొనసాగుతున్న FIQ & డేటా అబార్ట్ లేనప్పుడు మాత్రమే అధిక ప్రాధాన్యత గల అంతరాయమైన IRQ హ్యాండ్లర్ నమోదు చేయబడుతుంది.

ఆబార్ట్‌ని ముందుగా పొందండి
ఇది డేటా అబార్ట్ లాగానే ఉంటుంది కానీ అడ్రస్ పొందడంలో వైఫల్యంతో జరుగుతుంది. హ్యాండ్లర్‌లోకి ప్రవేశించిన తర్వాత, IRQలు నిలిపివేయబడతాయి కానీ FIQలు ఎనేబుల్ చేయబడి ఉంటాయి మరియు ముందస్తుగా పొందే ఆబార్ట్ సమయంలో జరగవచ్చు.

SWI
SWI సూచన అమలు చేయబడినప్పుడు మరియు ఇతర అధిక-ప్రాధాన్యత మినహాయింపులు ఏవీ ఫ్లాగ్ చేయబడనప్పుడు సాఫ్ట్‌వేర్ అంతరాయం (SWI) మినహాయింపు ఏర్పడుతుంది.

నిర్వచించని సూచన
ARM లేదా థంబ్ ఇన్‌స్ట్రక్షన్ సెట్‌లో లేని సూచన పైప్‌లైన్ యొక్క ఎగ్జిక్యూట్ దశకు చేరుకున్నప్పుడు మరియు ఇతర మినహాయింపులు ఏవీ ఫ్లాగ్ చేయనప్పుడు నిర్వచించబడని సూచన మినహాయింపు ఏర్పడుతుంది. ఇది ఒక సమయంలో జరిగే SWI వలె అదే ప్రాధాన్యత. దీనర్థం, అమలు చేయబడే సూచన ఒకే సమయంలో SWI సూచన మరియు నిర్వచించబడని సూచన రెండూ కాకూడదు.

ARM మినహాయింపు నిర్వహణ
మినహాయింపు జరిగినప్పుడు క్రింది సంఘటనలు జరుగుతాయి:

  • CPSRని మినహాయింపు మోడ్ యొక్క SPSRలో నిల్వ చేయండి.
  • PC మినహాయింపు మోడ్ యొక్క LRలో నిల్వ చేయబడుతుంది.
  • లింక్ రిజిస్టర్ ప్రస్తుత సూచనల ఆధారంగా నిర్దిష్ట చిరునామాకు సెట్ చేయబడింది. ఉదాహరణకు: ISR కోసం, LR = చివరిగా అమలు చేయబడిన సూచన + 8.
  • మినహాయింపు గురించి CPSRని నవీకరించండి.
  • మినహాయింపు హ్యాండ్లర్ చిరునామాకు PCని సెట్ చేయండి.

6.5 సూచనలు మరియు డేటా

డేటా అనేది వేరియబుల్స్ (వాటి విలువలతో లేబుల్‌లు) మరియు శ్రేణులు మరియు శ్రేణికి సమానమైన ఇతర నిర్మాణాలను సూచిస్తుంది. స్ట్రింగ్ అనేది అక్షరాల శ్రేణి లాంటిది. మునుపటి అధ్యాయాలలో ఒకదానిలో పూర్ణాంకాల శ్రేణి కనిపిస్తుంది. సూచనలు ఆప్‌కోడ్‌లు మరియు వాటి కార్యక్రమాలను సూచిస్తాయి. ఒక ప్రోగ్రామ్‌ను ఆప్‌కోడ్‌లు మరియు మెమరీలోని ఒక కంటిన్యూస్ విభాగంలో మిక్స్ చేసిన డేటాతో వ్రాయవచ్చు. ఈ విధానం ప్రతికూలతలను కలిగి ఉంది, కానీ సిఫారసు చేయబడలేదు.

ఒక ప్రోగ్రామ్ మొదట సూచనలతో వ్రాయబడాలి, దాని తర్వాత డేటా (డేటమ్ యొక్క బహువచనం డేటా). సూచనలు మరియు డేటా మధ్య విభజన కేవలం కొన్ని బైట్‌లు మాత్రమే కావచ్చు. ప్రోగ్రామ్ కోసం, సూచనలు మరియు డేటా రెండూ మెమరీలో ఒకటి లేదా రెండు వేర్వేరు విభాగాలలో ఉంటాయి.

6.6 హార్వర్డ్ ఆర్కిటెక్చర్

ప్రారంభ కంప్యూటర్లలో ఒకటి హార్వర్డ్ మార్క్ I (1944). కఠినమైన హార్వర్డ్ ఆర్కిటెక్చర్ ప్రోగ్రామ్ సూచనల కోసం ఒక చిరునామా స్థలాన్ని మరియు డేటా కోసం వేరే ప్రత్యేక చిరునామా స్థలాన్ని ఉపయోగిస్తుంది. అంటే రెండు వేర్వేరు జ్ఞాపకాలు ఉన్నాయి. కింది వాస్తుశిల్పం చూపిస్తుంది:


మూర్తి 6.71 హార్వర్డ్ ఆర్కిటెక్చర్

కంట్రోల్ యూనిట్ సూచనల డీకోడింగ్ చేస్తుంది. అంకగణిత లాజిక్ యూనిట్ (ALU) కాంబినేషన్ లాజిక్ (గేట్లు)తో అంకగణిత కార్యకలాపాలను చేస్తుంది. ALU లాజికల్ ఆపరేషన్‌లను కూడా చేస్తుంది (ఉదా. షిఫ్టింగ్).

6502 మైక్రోప్రాసెసర్‌తో, డేటా (డేటా కోసం ఏకవచనం) పరస్పర చర్యకు ముందు µP రిజిస్టర్‌కి వెళ్లే ముందు మైక్రోప్రాసెసర్‌కు సూచన మొదటి (కంట్రోల్ యూనిట్)కి వెళుతుంది. దీనికి కనీసం రెండు క్లాక్ పల్స్ అవసరం మరియు ఇది సూచన మరియు డేటాకు ఏకకాల యాక్సెస్ కాదు. మరోవైపు, హార్వర్డ్ ఆర్కిటెక్చర్ సూచనలు మరియు డేటాకు ఏకకాల ప్రాప్యతను అందిస్తుంది, సూచన మరియు డేటా రెండూ ఒకే సమయంలో µPలోకి ప్రవేశిస్తాయి (యూనిట్‌ను నియంత్రించడానికి ఆప్‌కోడ్ మరియు µP రిజిస్టర్‌కి డేటా), కనీసం ఒక క్లాక్ పల్స్‌ను ఆదా చేస్తుంది. ఇది సమాంతరత యొక్క ఒక రూపం. ఈ రకమైన సమాంతరత ఆధునిక మదర్‌బోర్డులలోని హార్డ్‌వేర్ కాష్‌లో ఉపయోగించబడుతుంది (క్రింది చర్చను చూడండి).

6.7 కాష్ మెమరీ

కాష్ మెమరీ (RAM) అనేది హై-స్పీడ్ మెమరీ రీజియన్ (ప్రధాన మెమరీ వేగంతో పోలిస్తే) ఇది భవిష్యత్ ఉపయోగం కోసం ప్రోగ్రామ్ సూచనలు లేదా డేటాను తాత్కాలికంగా నిల్వ చేస్తుంది. కాష్ మెమరీ ప్రధాన మెమరీ కంటే వేగంగా పనిచేస్తుంది. సాధారణంగా, ఈ సూచనలు లేదా డేటా అంశాలు ఇటీవలి ప్రధాన మెమరీ నుండి తిరిగి పొందబడతాయి మరియు త్వరలో మళ్లీ అవసరం కావచ్చు. అదే ప్రధాన మెమరీ స్థానాలను పదే పదే యాక్సెస్ చేసే వేగాన్ని పెంచడం కాష్ మెమరీ యొక్క ప్రాథమిక ఉద్దేశ్యం. ప్రభావవంతంగా ఉండాలంటే, కాష్ చేయబడిన అంశాలను యాక్సెస్ చేయడం అనేది బ్యాకింగ్ స్టోర్‌గా సూచించబడే సూచనల యొక్క అసలు మూలాన్ని లేదా డేటాను యాక్సెస్ చేయడం కంటే చాలా వేగంగా ఉండాలి.

కాషింగ్ ఉపయోగంలో ఉన్నప్పుడు, ప్రధాన మెమరీ స్థానాన్ని యాక్సెస్ చేయడానికి ప్రతి ప్రయత్నం కాష్ యొక్క శోధనతో ప్రారంభమవుతుంది. అభ్యర్థించిన అంశం ఉన్నట్లయితే, ప్రాసెసర్ దానిని వెంటనే తిరిగి పొందుతుంది మరియు ఉపయోగిస్తుంది. దీనిని కాష్ హిట్ అంటారు. కాష్ శోధన విఫలమైతే (కాష్ మిస్), సూచన లేదా డేటా అంశం తప్పనిసరిగా బ్యాకింగ్ స్టోర్ (ప్రధాన మెమరీ) నుండి తిరిగి పొందాలి. అభ్యర్థించిన వస్తువును తిరిగి పొందే ప్రక్రియలో, ఊహించిన సమీప భవిష్యత్తులో ఉపయోగం కోసం కాష్‌కి కాపీ జోడించబడుతుంది.

మెమరీ మేనేజ్‌మెంట్ యూనిట్
మెమరీ మేనేజ్‌మెంట్ యూనిట్ (MMU) అనేది మదర్‌బోర్డులో ప్రధాన మెమరీ మరియు సంబంధిత మెమరీ రిజిస్టర్‌లను నిర్వహించే సర్క్యూట్. గతంలో, ఇది మదర్‌బోర్డుపై ప్రత్యేక ఇంటిగ్రేటెడ్ సర్క్యూట్; కానీ నేడు, ఇది సాధారణంగా మైక్రోప్రాసెసర్‌లో భాగం. MMU ఈరోజు మైక్రోప్రాసెసర్‌లో భాగమైన కాష్ (సర్క్యూట్)ని కూడా నిర్వహించాలి. కాష్ సర్క్యూట్ గతంలో ఒక ప్రత్యేక ఇంటిగ్రేటెడ్ సర్క్యూట్.

స్టాటిక్ RAM
స్టాటిక్ ర్యామ్ (SRAM) DRAM కంటే గణనీయంగా వేగవంతమైన యాక్సెస్ సమయాన్ని కలిగి ఉంది, అయినప్పటికీ చాలా క్లిష్టమైన సర్క్యూట్రీ ఖర్చుతో. SRAM బిట్ కణాలు సమానమైన డేటాను నిల్వ చేయగల DRAM పరికరం యొక్క కణాల కంటే ఇంటిగ్రేటెడ్ సర్క్యూట్ డైలో ఎక్కువ స్థలాన్ని తీసుకుంటాయి. ప్రధాన మెమరీ (RAM) సాధారణంగా DRAM (డైనమిక్ RAM)ని కలిగి ఉంటుంది.

కాష్ మెమరీ కంప్యూటర్ పనితీరును మెరుగుపరుస్తుంది ఎందుకంటే ఆపరేటింగ్ సిస్టమ్‌లు మరియు అప్లికేషన్‌ల ద్వారా అమలు చేయబడిన అనేక అల్గారిథమ్‌లు సూచన యొక్క స్థానికతను ప్రదర్శిస్తాయి. రిఫరెన్స్ స్థానికత అనేది ఇటీవల యాక్సెస్ చేయబడిన డేటా యొక్క పునర్వినియోగాన్ని సూచిస్తుంది. దీనిని తాత్కాలిక ప్రాంతంగా సూచిస్తారు. ఆధునిక మదర్‌బోర్డులో, కాష్ మెమరీ మైక్రోప్రాసెసర్ వలె అదే ఇంటిగ్రేటెడ్ సర్క్యూట్‌లో ఉంటుంది. ప్రధాన మెమరీ (DRAM) చాలా దూరంలో ఉంది మరియు బస్సుల ద్వారా అందుబాటులో ఉంటుంది. లొకాలిటీ ఆఫ్ రిఫరెన్స్ అనేది ప్రాదేశిక ప్రాంతాన్ని కూడా సూచిస్తుంది. భౌతిక సామీప్యత కారణంగా ప్రాదేశిక ప్రాంతం డేటా యాక్సెస్ యొక్క అధిక వేగంతో సంబంధం కలిగి ఉంటుంది.

నియమం ప్రకారం, బ్యాకింగ్ స్టోర్ (ప్రధాన మెమరీ)తో పోల్చితే కాష్ మెమరీ ప్రాంతాలు చిన్నవి (బైట్ స్థానాల సంఖ్యలో). కాష్ మెమరీ పరికరాలు గరిష్ట వేగం కోసం రూపొందించబడ్డాయి, సాధారణంగా అవి బ్యాకింగ్ స్టోర్‌లో ఉపయోగించే డేటా నిల్వ సాంకేతికత కంటే బిట్‌కు చాలా క్లిష్టంగా మరియు ఖరీదైనవి అని అర్థం. వాటి పరిమిత పరిమాణం కారణంగా, కాష్ మెమరీ పరికరాలు త్వరగా పూరించబడతాయి. కొత్త ఎంట్రీని నిల్వ చేయడానికి కాష్‌కి అందుబాటులో లేనప్పుడు, పాత ఎంట్రీని తప్పనిసరిగా విస్మరించాలి. కొత్త ఎంట్రీ ద్వారా ఏ కాష్ ఎంట్రీ ఓవర్‌రైట్ చేయబడుతుందో ఎంచుకోవడానికి కాష్ కంట్రోలర్ కాష్ రీప్లేస్‌మెంట్ పాలసీని ఉపయోగిస్తుంది.

మైక్రోప్రాసెసర్ కాష్ మెమరీ యొక్క లక్ష్యం కాలక్రమేణా కాష్ హిట్‌ల శాతాన్ని పెంచడం, తద్వారా అత్యధిక నిరంతర సూచనల అమలు రేటును అందించడం. ఈ లక్ష్యాన్ని సాధించడానికి, కాషింగ్ లాజిక్ తప్పనిసరిగా కాష్‌లో ఏ సూచనలు మరియు డేటాను ఉంచబడుతుందో మరియు సమీప భవిష్యత్ ఉపయోగం కోసం ఉంచబడుతుందో నిర్ణయించాలి.

ప్రాసెసర్ యొక్క కాషింగ్ లాజిక్‌కు కాష్ చేయబడిన డేటా ఐటెమ్ కాష్‌లోకి చొప్పించిన తర్వాత మళ్లీ ఉపయోగించబడుతుందనే హామీ ఉండదు.

కాషింగ్ యొక్క తర్కం తాత్కాలిక (కాలక్రమేణా పునరావృతం) మరియు ప్రాదేశిక (స్పేస్) స్థానికత కారణంగా, సమీప భవిష్యత్తులో కాష్ చేయబడిన డేటాను యాక్సెస్ చేయడానికి చాలా మంచి అవకాశం ఉంది. ఆధునిక ప్రాసెసర్‌లపై ఆచరణాత్మక అమలులో, క్యాష్ హిట్‌లు సాధారణంగా 95 నుండి 97 శాతం మెమరీ యాక్సెస్‌లలో జరుగుతాయి. కాష్ మెమరీ యొక్క జాప్యం DRAM యొక్క జాప్యం యొక్క చిన్న భాగం కాబట్టి, కాష్-రహిత డిజైన్‌తో పోల్చితే అధిక కాష్ హిట్ రేటు గణనీయమైన పనితీరు మెరుగుదలకు దారితీస్తుంది.

కాష్‌తో కొంత సమాంతరత
ఇంతకు ముందు చెప్పినట్లుగా, మెమరీలో మంచి ప్రోగ్రామ్ డేటా నుండి వేరు చేయబడిన సూచనలను కలిగి ఉంటుంది. కొన్ని కాష్ సిస్టమ్‌లలో, ప్రాసెసర్ యొక్క 'ఎడమ' వద్ద కాష్ సర్క్యూట్ ఉంది మరియు ప్రాసెసర్ యొక్క 'కుడి'లో మరొక కాష్ సర్క్యూట్ ఉంది. ఎడమ కాష్ ప్రోగ్రామ్ (లేదా అప్లికేషన్) యొక్క సూచనలను నిర్వహిస్తుంది మరియు కుడి కాష్ అదే ప్రోగ్రామ్ (లేదా అదే అప్లికేషన్) యొక్క డేటాను నిర్వహిస్తుంది. ఇది మెరుగైన వేగాన్ని పెంచడానికి దారితీస్తుంది.

6.8 ప్రక్రియలు మరియు థ్రెడ్‌లు

CISC మరియు RISC కంప్యూటర్‌లు రెండూ ప్రక్రియలను కలిగి ఉంటాయి. సాఫ్ట్‌వేర్‌పై ఒక ప్రక్రియ ఉంది. రన్ అవుతున్న ప్రోగ్రామ్ (ఎగ్జిక్యూట్ చేయడం) ఒక ప్రక్రియ. ఆపరేటింగ్ సిస్టమ్ దాని స్వంత ప్రోగ్రామ్‌లతో వస్తుంది. కంప్యూటర్ పనిచేస్తున్నప్పుడు, కంప్యూటర్ పని చేయడానికి వీలు కల్పించే ఆపరేటింగ్ సిస్టమ్ యొక్క ప్రోగ్రామ్‌లు కూడా నడుస్తున్నాయి. ఇవి ఆపరేటింగ్ సిస్టమ్ ప్రక్రియలు. వినియోగదారు లేదా ప్రోగ్రామర్ తన స్వంత ప్రోగ్రామ్‌లను వ్రాయవచ్చు. వినియోగదారు ప్రోగ్రామ్ నడుస్తున్నప్పుడు, ఇది ఒక ప్రక్రియ. ప్రోగ్రామ్ అసెంబ్లీ భాషలో వ్రాయబడిందా లేదా C లేదా C++ వంటి ఉన్నత-స్థాయి భాషలో వ్రాయబడిందా అనేది పట్టింపు లేదు. అన్ని ప్రక్రియలు (యూజర్ లేదా OS) 'షెడ్యూలర్' అని పిలువబడే మరొక ప్రక్రియ ద్వారా నిర్వహించబడతాయి.

థ్రెడ్ అనేది ఒక ప్రక్రియకు చెందిన ఉప ప్రక్రియ లాంటిది. ఒక ప్రక్రియ ప్రారంభమవుతుంది మరియు థ్రెడ్‌లుగా విభజించవచ్చు మరియు తర్వాత కూడా ఒక ప్రక్రియగా కొనసాగుతుంది. థ్రెడ్‌లు లేని ప్రక్రియను ప్రధాన థ్రెడ్‌గా పరిగణించవచ్చు. ప్రక్రియలు మరియు వాటి థ్రెడ్‌లు ఒకే షెడ్యూలర్ ద్వారా నిర్వహించబడతాయి. OS డిస్క్‌లో రెసిడెంట్‌గా ఉన్నప్పుడు షెడ్యూలర్ అనేది ఒక ప్రోగ్రామ్. మెమరీలో నడుస్తున్నప్పుడు, షెడ్యూలర్ అనేది ఒక ప్రక్రియ.

6.9 మల్టీప్రాసెసింగ్

థ్రెడ్‌లు దాదాపు ప్రక్రియల వలె నిర్వహించబడతాయి. మల్టీప్రాసెసింగ్ అంటే ఒకే సమయంలో ఒకటి కంటే ఎక్కువ ప్రక్రియలను అమలు చేయడం. ఒకే మైక్రోప్రాసెసర్ ఉన్న కంప్యూటర్లు ఉన్నాయి. ఒకటి కంటే ఎక్కువ మైక్రోప్రాసెసర్లు ఉన్న కంప్యూటర్లు ఉన్నాయి. ఒకే మైక్రోప్రాసెసర్‌తో, ప్రక్రియలు మరియు/లేదా థ్రెడ్‌లు ఒకే మైక్రోప్రాసెసర్‌ను ఇంటర్‌లీవింగ్ (లేదా టైమ్-స్లైసింగ్) పద్ధతిలో ఉపయోగిస్తాయి. అంటే ఒక ప్రక్రియ ప్రాసెసర్‌ని ఉపయోగిస్తుంది మరియు పూర్తి చేయకుండానే ఆగిపోతుంది. మరొక ప్రక్రియ లేదా థ్రెడ్ ప్రాసెసర్‌ను ఉపయోగిస్తుంది మరియు పూర్తి చేయకుండా ఆగిపోతుంది. అప్పుడు, మరొక ప్రక్రియ లేదా థ్రెడ్ మైక్రోప్రాసెసర్‌ను ఉపయోగిస్తుంది మరియు పూర్తి చేయకుండా ఆగిపోతుంది. షెడ్యూలర్ ద్వారా క్యూలో ఉంచబడిన అన్ని ప్రక్రియలు మరియు థ్రెడ్‌లు ప్రాసెసర్‌లో వాటాను కలిగి ఉండే వరకు ఇది కొనసాగుతుంది. ఇది ఏకకాల మల్టీప్రాసెసింగ్‌గా సూచించబడుతుంది.

ఒకటి కంటే ఎక్కువ మైక్రోప్రాసెసర్‌లు ఉన్నప్పుడు, కాన్‌కరెన్సీకి విరుద్ధంగా సమాంతర మల్టీప్రాసెసింగ్ ఉంటుంది. ఈ సందర్భంలో, ప్రతి ప్రాసెసర్ ఒక నిర్దిష్ట ప్రక్రియ లేదా థ్రెడ్‌ను అమలు చేస్తుంది, ఇది ఇతర ప్రాసెసర్ రన్ అవుతున్న దానికి భిన్నంగా ఉంటుంది. ఒకే మదర్‌బోర్డ్‌లోని అన్ని ప్రాసెసర్‌లు సమాంతర మల్టీప్రాసెసింగ్‌లో ఒకే సమయంలో వాటి విభిన్న ప్రక్రియలు మరియు/లేదా విభిన్న థ్రెడ్‌లను అమలు చేస్తాయి. సమాంతర మల్టీప్రాసెసింగ్‌లోని ప్రక్రియలు మరియు థ్రెడ్‌లు ఇప్పటికీ షెడ్యూలర్ ద్వారా నిర్వహించబడతాయి. సమాంతర మల్టీప్రాసెసింగ్ ఏకకాల మల్టీప్రాసెసింగ్ కంటే వేగంగా ఉంటుంది.

ఈ సమయంలో, పాఠకుడు ఏకకాల ప్రాసెసింగ్ కంటే సమాంతర ప్రాసెసింగ్ ఎంత వేగంగా ఉంటుందో ఆశ్చర్యపోవచ్చు. ఎందుకంటే ప్రాసెసర్‌లు ఒకే మెమరీ మరియు ఇన్‌పుట్/అవుట్‌పుట్ పోర్ట్‌లను పంచుకుంటాయి (వేర్వేరు సమయాల్లో ఉపయోగించాలి). బాగా, కాష్ ఉపయోగంతో, మదర్బోర్డు యొక్క మొత్తం ఆపరేషన్ వేగంగా ఉంటుంది.

6.10 పేజింగ్

మెమరీ మేనేజ్‌మెంట్ యూనిట్ (MMU) అనేది మైక్రోప్రాసెసర్‌కు దగ్గరగా లేదా మైక్రోప్రాసెసర్ చిప్‌లో ఉండే సర్క్యూట్. ఇది మెమరీ మ్యాప్ లేదా పేజింగ్ మరియు ఇతర మెమరీ సమస్యలను నిర్వహిస్తుంది. 6502 µP లేదా కమోడోర్-64 కంప్యూటర్‌లో ఒక MMU లేదు (కామోడోర్-64లో ఇంకా కొంత మెమరీ నిర్వహణ ఉన్నప్పటికీ). కమోడోర్-64 ప్రతి పేజీ 256 ఉన్న చోట పేజింగ్ చేయడం ద్వారా మెమరీని నిర్వహిస్తుంది 10 బైట్‌ల పొడవు (100 16 బైట్‌ల పొడవు). పేజింగ్ ద్వారా మెమరీని నిర్వహించడానికి ఇది తప్పనిసరి కాదు. ఇది ఇప్పటికీ కేవలం మెమరీ మ్యాప్‌ను కలిగి ఉంటుంది మరియు ఆ తర్వాత ప్రోగ్రామ్‌లను వారి వివిధ నియమించబడిన ప్రాంతాలకు సరిపోయేలా చేయవచ్చు. బాగా, పేజింగ్ అనేది డేటా లేదా ప్రోగ్రామ్‌ను కలిగి ఉండని అనేక మెమరీ విభాగాలు లేకుండా మెమరీని సమర్థవంతంగా ఉపయోగించుకునే ఒక మార్గం.

x86 386 కంప్యూటర్ ఆర్కిటెక్చర్ 1985లో విడుదలైంది. అడ్రస్ బస్సు 32-బిట్‌ల వెడల్పుతో ఉంది. కాబట్టి, మొత్తం 2 32 = 4,294,967,296 చిరునామా స్థలం సాధ్యమే. ఈ చిరునామా స్థలం 1,048,576 పేజీలు = 1,024 KB పేజీలుగా విభజించబడింది. ఈ పేజీల సంఖ్యతో, ఒక పేజీలో 4,096 బైట్లు = 4 KB ఉంటాయి. కింది పట్టిక x86 32-బిట్ ఆర్కిటెక్చర్ కోసం భౌతిక చిరునామా పేజీలను చూపుతుంది:

పట్టిక 6.10.1
x86 ఆర్కిటెక్చర్ కోసం ఫిజికల్ అడ్రస్ చేయగల పేజీలు
బేస్ 16 చిరునామాలు పేజీలు బేస్ 10 చిరునామాలు
FFFFF000 – FFFFFFF పేజీ 1,048,575 4,294,963,200 – 4,294,967,295
FFFFE000 - FFFFEFFF పేజీ 1,044,479 4,294,959,104 – 4,294,963,199
FFFFD000 – FFFFDFFF పేజీ 1,040,383 4,294,955,008 – 4,294,959,103
|
|
|
|
|
|
|
|
|
00002000 – 00002FFF పేజీ 2 8,192 – 12,288
00001000 – 00001FFF పుట 1 4,096 – 8,191
00000000 – 00000FFF పేజీ 0 0 – 4,095

ఈ రోజు అప్లికేషన్ ఒకటి కంటే ఎక్కువ ప్రోగ్రామ్‌లను కలిగి ఉంటుంది. ఒక ప్రోగ్రామ్ ఒక పేజీ కంటే తక్కువ (4096 కంటే తక్కువ) తీసుకోవచ్చు లేదా రెండు లేదా అంతకంటే ఎక్కువ పేజీలను తీసుకోవచ్చు. కాబట్టి, ప్రతి పేజీ 4096 బైట్‌ల పొడవు ఉండే అప్లికేషన్ ఒకటి లేదా అంతకంటే ఎక్కువ పేజీలను తీసుకోవచ్చు. ప్రతి వ్యక్తికి ఒకటి లేదా అంతకంటే ఎక్కువ పేజీలు కేటాయించబడి వేర్వేరు వ్యక్తులు అప్లికేషన్‌ను వ్రాయవచ్చు.

పేజీ 0 00000000H నుండి 00000FFF వరకు ఉందని గమనించండి
పేజీ 1 00001000H నుండి 00001FFFH వరకు, పేజీ 2 00002000 నుండి హెచ్ – 00002FFF హెచ్ , మరియు మొదలైనవి. 32-బిట్ కంప్యూటర్ కోసం, భౌతిక పేజీ చిరునామా కోసం ప్రాసెసర్‌లో రెండు 32-బిట్ రిజిస్టర్‌లు ఉన్నాయి: ఒకటి ఆధార చిరునామా మరియు మరొకటి సూచిక చిరునామా కోసం. పేజీ 2 యొక్క బైట్ స్థానాలను యాక్సెస్ చేయడానికి, ఉదాహరణకు, మూల చిరునామా కోసం రిజిస్టర్ 00002 అయి ఉండాలి హెచ్ పేజీ 2 ప్రారంభ చిరునామాలకు ఇది మొదటి 20 బిట్‌లు (ఎడమవైపు నుండి). మిగిలిన బిట్‌లు 000 పరిధిలో ఉన్నాయి హెచ్ FFFకి హెచ్ 'ఇండెక్స్ రిజిస్టర్' అనే రిజిస్టర్‌లో ఉన్నాయి. కాబట్టి, ఇండెక్స్ రిజిస్టర్‌లోని కంటెంట్‌ను 000 నుండి పెంచడం ద్వారా పేజీలోని అన్ని బైట్‌లను యాక్సెస్ చేయవచ్చు. హెచ్ FFFకి హెచ్ . ఇండెక్స్ రిజిస్టర్‌లోని కంటెంట్ ప్రభావవంతమైన చిరునామాను పొందేందుకు బేస్ రిజిస్టర్‌లో మారని కంటెంట్‌కు జోడించబడుతుంది. ఈ సూచిక చిరునామా పథకం ఇతర పేజీలకు వర్తిస్తుంది.

అయితే, ప్రతి పేజీకి అసెంబ్లీ భాషా ప్రోగ్రామ్ వ్రాయబడిన విధానం ఇది కాదు. ప్రతి పేజీకి, ప్రోగ్రామర్ పేజీ 000 నుండి కోడ్‌ను వ్రాస్తాడు హెచ్ పేజీకి FFF హెచ్ . వేర్వేరు పేజీలలోని కోడ్ కనెక్ట్ చేయబడినందున, కంపైలర్ వివిధ పేజీలలోని అన్ని సంబంధిత చిరునామాలను కనెక్ట్ చేయడానికి సూచిక చిరునామాను ఉపయోగిస్తుంది. ఉదాహరణకు, పేజీ 0, పేజీ 1 మరియు పేజీ 2 ఒక అప్లికేషన్ కోసం మరియు ప్రతి ఒక్కటి 555 కలిగి ఉన్నాయని ఊహిస్తే హెచ్ ఒకదానికొకటి అనుసంధానించబడిన చిరునామా, కంపైలర్ 555గా ఉండే విధంగా కంపైల్ చేస్తుంది హెచ్ పేజీ 0ని యాక్సెస్ చేయాలి, 00000 హెచ్ బేస్ రిజిస్టర్ మరియు 555లో ఉంటుంది హెచ్ ఇండెక్స్ రిజిస్టర్‌లో ఉంటుంది. 555 ఉన్నప్పుడు హెచ్ పేజీ 1లో 00001ని యాక్సెస్ చేయాలి హెచ్ బేస్ రిజిస్టర్ మరియు 555లో ఉంటుంది హెచ్ ఇండెక్స్ రిజిస్టర్‌లో ఉంటుంది. 555 ఉన్నప్పుడు హెచ్ 2వ పేజీని యాక్సెస్ చేయవలసి ఉంది, 00002 హెచ్ బేస్ రిజిస్టర్‌లో ఉంటుంది మరియు 555H ఇండెక్స్ రిజిస్టర్‌లో ఉంటుంది. లేబుల్స్ (వేరియబుల్స్) ఉపయోగించి చిరునామాలను గుర్తించడం వలన ఇది సాధ్యమవుతుంది. వేర్వేరు కనెక్ట్ చేసే చిరునామాల కోసం ఉపయోగించే లేబుల్‌ల పేరుపై వేర్వేరు ప్రోగ్రామర్లు అంగీకరించాలి.

పేజీ వర్చువల్ మెమరీ
పేజింగ్, గతంలో వివరించిన విధంగా, 'పేజ్ వర్చువల్ మెమరీ'గా సూచించబడే టెక్నిక్‌లో మెమరీ పరిమాణాన్ని పెంచడానికి సవరించబడుతుంది. అన్ని ఫిజికల్ మెమరీ పేజీలు, గతంలో వివరించిన విధంగా, ఏదైనా (సూచనలు మరియు డేటా) కలిగి ఉన్నాయని ఊహిస్తే, అన్ని పేజీలు ప్రస్తుతం సక్రియంగా లేవు. ప్రస్తుతం యాక్టివ్‌గా లేని పేజీలు హార్డ్ డిస్క్‌కి పంపబడతాయి మరియు వాటి స్థానంలో హార్డ్ డిస్క్‌లోని పేజీలు రన్ అవుతాయి. ఆ విధంగా, మెమరీ పరిమాణం పెరుగుతుంది. కంప్యూటర్ పని చేయడం కొనసాగిస్తున్నందున, నిష్క్రియంగా మారిన పేజీలు హార్డ్ డిస్క్‌లోని పేజీలతో మార్చబడతాయి, అవి ఇప్పటికీ మెమరీ నుండి డిస్క్‌కి పంపబడిన పేజీలు కావచ్చు. ఇదంతా మెమరీ మేనేజ్‌మెంట్ యూనిట్ (MMU) ద్వారా జరుగుతుంది.

6.11 సమస్యలు

తదుపరి అధ్యాయానికి వెళ్లే ముందు అన్ని సమస్యలను ఒక అధ్యాయంలో పరిష్కరించాలని పాఠకులకు సలహా ఇస్తారు.

1) CISC మరియు RISC కంప్యూటర్ ఆర్కిటెక్చర్‌ల సారూప్యతలు మరియు తేడాలను ఇవ్వండి. SISC మరియు RISC కంప్యూటర్‌లకు ఒక్కో ఉదాహరణను పేర్కొనండి.

2) ఎ) బిట్‌ల పరంగా CISC కంప్యూటర్‌కు క్రింది పేర్లు ఏమిటి: బైట్, వర్డ్, డబుల్‌వర్డ్, క్వాడ్‌వర్డ్ మరియు డబుల్ క్వాడ్‌వర్డ్.
బి) బిట్‌ల పరంగా RISC కంప్యూటర్‌కు క్రింది పేర్లు ఏమిటి: బైట్, హాఫ్‌వర్డ్, వర్డ్ మరియు డబుల్‌వర్డ్.
c) అవును లేదా కాదు. CISC మరియు RISC ఆర్కిటెక్చర్‌లలో డబుల్‌వర్డ్ మరియు క్వాడ్‌వర్డ్ అనే పదాలు ఒకే విధంగా ఉన్నాయా?

3 a) x64 కోసం, అసెంబ్లీ భాషా సూచనల కోసం బైట్‌ల సంఖ్య దేని నుండి ఏది వరకు ఉంటుంది?
బి) ARM 64 కోసం అన్ని అసెంబ్లీ భాషా సూచనల కోసం బైట్‌ల సంఖ్య స్థిరంగా ఉందా? అవును అయితే, అన్ని సూచనల కోసం బైట్‌ల సంఖ్య ఎంత?

4) x64 మరియు వాటి అర్థాల కోసం సాధారణంగా ఉపయోగించే అసెంబ్లీ భాషా సూచనలను జాబితా చేయండి.

5) ARM 64 కోసం అత్యంత సాధారణంగా ఉపయోగించే అసెంబ్లీ భాషా సూచనలను మరియు వాటి అర్థాలను జాబితా చేయండి.

6) పాత కంప్యూటర్ హార్వర్డ్ ఆర్కిటెక్చర్ యొక్క లేబుల్ చేయబడిన బ్లాక్ రేఖాచిత్రాన్ని గీయండి. ఆధునిక కంప్యూటర్ల కాష్‌లో దాని సూచనలు మరియు డేటా ఫీచర్లు ఎలా ఉపయోగించబడుతున్నాయో వివరించండి.

7) ప్రక్రియ మరియు థ్రెడ్ మధ్య తేడాను గుర్తించండి మరియు చాలా కంప్యూటర్ సిస్టమ్‌లలోని ప్రక్రియలు మరియు థ్రెడ్‌లను నిర్వహించే ప్రక్రియ పేరును ఇవ్వండి.

8) మల్టీప్రాసెసింగ్ అంటే ఏమిటో క్లుప్తంగా వివరించండి.

9) ఎ) x86 386 µP కంప్యూటర్ ఆర్కిటెక్చర్‌కు వర్తించే విధంగా పేజింగ్‌ను వివరించండి.
బి) మొత్తం మెమరీ పరిమాణాన్ని పెంచడానికి ఈ పేజింగ్‌ని ఎలా సవరించవచ్చు?