4 වන කොටස: QFTASM සහ කොගෝල්
ගෘහ නිර්මාණ දළ විශ්ලේෂණය
කෙටියෙන් කිවහොත්, අපගේ පරිගණකයේ බිට් 16 අසමමුහුර්ත RISC හාවඩ් ගෘහ නිර්මාණ ශිල්පයක් ඇත. අතින් ප්රොසෙසරයක් තැනීමේදී RISC ( අඩු කරන ලද පරිගණක කට්ටල ) ගෘහ නිර්මාණ ශිල්පය ප්රායෝගිකව අවශ්යතාවයකි. අපගේ නඩුවේදී, මෙයින් අදහස් කරන්නේ ඔප්කෝඩ් ගණන කුඩා වන අතර වඩා වැදගත් වන්නේ සියලු උපදෙස් ඉතා සමාන ආකාරයකින් සකසන බවයි.
යොමු කිරීම සඳහා, වයර් වර්ල්ඩ් පරිගණකය ප්රවාහනය-අවුලුවන ගෘහ නිර්මාණ ශිල්පයක් භාවිතා කළ අතර, එහි එකම උපදෙස් වූ MOV
අතර ගණනය කිරීම් සිදු කරනු ලැබුවේ විශේෂ ලේඛණ ලිවීම / කියවීමෙනි. මෙම ආදර්ශය ඉතා පහසුවෙන් ක්රියාත්මක කළ හැකි ගෘහ නිර්මාණ ශිල්පයකට මඟ පෑදුවද, ප්රති result ලය දේශසීමා භාවිතා කළ නොහැකි ය: සියලුම ගණිත / තර්කන / කොන්දේසි සහිත මෙහෙයුම් සඳහා උපදෙස් තුනක් අවශ්ය වේ . අපට අවශ්ය වූයේ ඊට වඩා අඩු එසෝටරික් ගෘහ නිර්මාණ ශිල්පයක් නිර්මාණය කිරීමට බව අපට පැහැදිලි විය.
භාවිතාව වැඩි කරන අතරම අපගේ ප්රොසෙසරය සරලව තබා ගැනීම සඳහා, අපි වැදගත් සැලසුම් තීරණ කිහිපයක් ගත්තෙමු:
- ලේඛනයක් නැත. RAM හි සෑම ලිපිනයක්ම එක හා සමානව සලකනු ලබන අතර ඕනෑම මෙහෙයුමක් සඳහා ඕනෑම තර්කයක් ලෙස භාවිතා කළ හැකිය. එක් අතකින්, මෙයින් අදහස් කරන්නේ සියලුම RAM රෙජිස්ටර් ලෙස සැලකිය හැකි බවයි. මෙයින් අදහස් කරන්නේ විශේෂ පැටවුම් / ගබඩා උපදෙස් නොමැති බවයි.
- ඒ හා සමානව, මතක සිතියම්ගත කිරීම. කොටස් වලට ලිවීමට හෝ කියවීමට හැකි සෑම දෙයක්ම ඒකාබද්ධ ලිපින යෝජනා ක්රමයක්. මෙයින් අදහස් කරන්නේ ක්රමලේඛ කවුන්ටරය (PC) ලිපිනය 0 වන අතර, සාමාන්ය උපදෙස් සහ පාලන ප්රවාහ උපදෙස් අතර ඇති එකම වෙනස වන්නේ පාලන ප්රවාහ උපදෙස් ලිපිනය 0 භාවිතා කිරීමයි.
- දත්ත සම්ප්රේෂණයේ දී අනුක්රමික වන අතර සමාන්තරව ගබඩා වේ. අපගේ පරිගණකයේ “ඉලෙක්ට්රෝන” පාදක ස්වභාවය නිසා, අනුක්රමික කුඩා-එන්ඩියන් (අවම වශයෙන් සැලකිය යුතු පළමු බිට්) ආකාරයෙන් දත්ත සම්ප්රේෂණය වන විට එකතු කිරීම හා අඩු කිරීම සැලකිය යුතු ලෙස පහසු කරයි. තවද, අනුක්රමික දත්ත මගින් කාලානුරූපව සැබවින්ම පුළුල් හා අවුල් සහගත දත්ත බස්රථවල අවශ්යතාවය ඉවත් කරයි (දත්ත එකට රැඳී සිටීමට නම්, බස් රථයේ සියලුම “මංතීරු” එකම ගමන් ප්රමාදයක් අත්විඳිය යුතුය).
- හාවඩ් ගෘහ නිර්මාණ ශිල්පය, එනම් වැඩසටහන් මතකය (ROM) සහ දත්ත මතකය (RAM) අතර බෙදීමකි. මෙය ප්රොසෙසරයේ නම්යශීලී බව අඩු කළද, මෙය ප්රමාණ ප්රශස්තිකරණයට උපකාරී වේ: වැඩසටහනේ දිග අපට අවශ්ය RAM ප්රමාණයට වඩා විශාලය, එබැවින් අපට වැඩසටහන ROM වලට බෙදිය හැකි අතර පසුව ROM සම්පීඩනය කෙරෙහි අවධානය යොමු කළ හැකිය. , එය කියවීමට පමණක් වන විට එය වඩාත් පහසු වේ.
- 16-බිට් දත්ත පළල. සම්මත ටෙට්රිස් පුවරුවකට (කුට්ටි 10) වඩා පුළුල් වන දෙකක කුඩාම බලය මෙයයි. මෙය අපට -32768 සිට +32767 දක්වා දත්ත පරාසයක් ලබා දෙන අතර උපරිම වැඩසටහන් දිග 65536 කි. (සෙල්ලම් ප්රොසෙසරයක් කිරීමට අපට අවශ්ය විය හැකි බොහෝ සරල දේ සඳහා 2 ^ 8 = 256 උපදෙස් ප්රමාණවත් නමුත් ටෙට්රිස් නොවේ.)
- අසමමුහුර්ත නිර්මාණය. පරිගණකයේ වේලාව නියම කරන මධ්යම ඔරලෝසුවක් (හෝ, ඒ හා සමානව, ඔරලෝසු කිහිපයක්) තිබෙනවා වෙනුවට, සියලු දත්ත සමඟ “ඔරලෝසු සං signal ාවක්” ඇති අතර එය පරිගණකය වටා ගලා යන විට දත්ත සමඟ සමාන්තරව ගමන් කරයි. සමහර මාර්ග අනෙක් ඒවාට වඩා කෙටි විය හැකි අතර, මෙය මධ්යගතව ඔරලෝසුවක් සහිත සැලසුමක් සඳහා දුෂ්කරතා ඇති කරන අතර, අසමමුහුර්ත සැලසුමකට විචල්ය-කාල මෙහෙයුම් සමඟ පහසුවෙන් කටයුතු කළ හැකිය.
- සියලුම උපදෙස් සමාන ප්රමාණයේ ය. සෑම උපදේශනයකටම ඔපෙන්ඩ් 3 ක් සහිත (අගය අගය ගමනාන්තය) 1 ගෘහ නිර්මාණ ශිල්පයක් ඇති නම්යශීලී විකල්පය බව අපට හැඟුණි. මෙය ද්විමය දත්ත මෙහෙයුම් මෙන්ම කොන්දේසි සහිත චලනයන් ද ඇතුළත් වේ.
- සරල ලිපින මාදිලිය. අරා හෝ පුනරාවර්තනය වැනි දේ සඳහා සහය දැක්වීමට විවිධාකාර ලිපින ක්රම තිබීම ඉතා ප්රයෝජනවත් වේ. සාපේක්ෂව සරල පද්ධතියක් සමඟ වැදගත් ලිපින ක්රම කිහිපයක් ක්රියාත්මක කිරීමට අපට හැකි විය.
අපගේ ගෘහ නිර්මාණ ශිල්පය පිළිබඳ නිදර්ශනයක් දළ විශ්ලේෂණ ලිපියේ අඩංගු වේ.
ක්රියාකාරීත්වය සහ ALU මෙහෙයුම්
මෙතැන් සිට, අපගේ ප්රොසෙසරයට තිබිය යුතු ක්රියාකාරිත්වය තීරණය කිරීම වැදගත් කාරණයක් විය. ක්රියාත්මක කිරීමේ පහසුව මෙන්ම එක් එක් විධානයන්හි බහුකාර්යතාව කෙරෙහි විශේෂ අවධානයක් යොමු කරන ලදී.
කොන්දේසිගත චලනයන්
කොන්දේසි සහිත චලනයන් ඉතා වැදගත් වන අතර කුඩා පරිමාණ සහ මහා පරිමාණ පාලන ප්රවාහයක් ලෙස සේවය කරයි. “කුඩා පරිමාණය” යන්නෙන් විශේෂිත දත්ත චලනයක් ක්රියාත්මක කිරීම පාලනය කිරීමේ හැකියාව අදහස් කරන අතර “මහා පරිමාණ” යන්නෙන් අදහස් කරන්නේ ඕනෑම අත්තනෝමතික කේතයකට පාලන ප්රවාහය මාරු කිරීම සඳහා කොන්දේසි සහිත පැනීමේ මෙහෙයුමක් ලෙසය. විශේෂිත සිතියම්ගත කිරීම් හේතුවෙන් කොන්දේසි සහිත පියවරක් මඟින් සාමාන්ය RAM වෙත දත්ත පිටපත් කර ගමනාන්ත ලිපිනය පළාත් සභාවට පිටපත් කළ හැකිය. ඒ හා සමාන හේතුවක් නිසා කොන්දේසි විරහිත පියවර සහ කොන්දේසි විරහිත පැනීම් යන දෙකම අත්හැරීමට අපි තෝරා ගත්තෙමු: දෙකම සත්යයට තදින් කේත කර ඇති කොන්දේසියක් සහිත කොන්දේසි සහිත පියවරක් ලෙස ක්රියාත්මක කළ හැකිය.
අපි කොන්දේසි සහිත චලනයන් දෙකක් තෝරා ගත්තෙමු: "බිංදුව නොවේ නම් චලනය කරන්න" ( MNZ
) සහ "බිංදුවට වඩා අඩු නම් චලනය කරන්න" ( MLZ
). ක්රියාකාරීව, MNZ
දත්තවල කිසියම් බිට් 1 ක් දැයි පරීක්ෂා කිරීමට සමාන වේMLZ
යන්න පරීක්ෂා කිරීමට සමාන වන අතර, සං bit ා බිට් 1 දැයි පරීක්ෂා කිරීමට සමාන වේ. ඒවා පිළිවෙලින් සමානතා හා සැසඳීම් සඳහා ප්රයෝජනවත් වේ. අපි එවැනි "පියවර නම් ශුන්ය" (අන් අය කෙරෙහි මේ දෙක තෝරා හේතුව MEZ
) හෝ "බිංදුවට වඩා වැඩි නම්, පියවර" ( MGZ
) බවයි MEZ
, හිස් සංඥා සිට සැබෑ සංඥා නිර්මාණය අවශ්ය වනු ඇත අතර, MGZ
එම අඩුවක් අවශ්ය වේ, වඩාත් සංකීර්ණ වෙතියි සං bit ා බිට් 0 වන අතර අවම වශයෙන් තවත් බිට් 1 ක් විය යුතුය.
අංක ගණිතය
ප්රොසෙසරයේ සැලසුම මෙහෙයවීමේදී ඊළඟ වැදගත්ම උපදෙස් වන්නේ මූලික ගණිතමය මෙහෙයුම් ය. මා මුලින් සඳහන් කළ පරිදි, අපි භාවිතා කරන්නේ කුඩා-එන්ඩියන් අනුක්රමික දත්ත, එකතු කිරීමේ / අඩු කිරීමේ මෙහෙයුම් වල පහසුව අනුව එන්ඩියනස් තෝරා ගැනීම තීරණය කරනු ලැබේ. අවම වශයෙන් සැලකිය යුතු බිටු පළමුව පැමිණීමෙන්, අංක ගණිත ඒකකවලට පහසුවෙන් ගෙන යා හැකි බිට් නිරීක්ෂණය කළ හැකිය.
Negative ණ සංඛ්යා සඳහා 2 හි අනුපූරක නිරූපණය භාවිතා කිරීමට අපි තෝරා ගත්තෙමු, මෙය එකතු කිරීම හා අඩු කිරීම වඩාත් ස්ථාවර කරයි. වයර් වර්ල්ඩ් පරිගණකය 1 හි අනුපූරකය භාවිතා කළ බව සඳහන් කිරීම වටී.
එකතු කිරීම සහ අඩු කිරීම යනු අපගේ පරිගණකයේ ස්වදේශීය ගණිත ආධාරකයේ ප්රමාණයයි (පසුව සාකච්ඡා කෙරෙන බිට් මාරුවලට අමතරව). ගුණ කිරීම වැනි වෙනත් මෙහෙයුම් අපගේ ගෘහ නිර්මාණ ශිල්පය විසින් හැසිරවිය නොහැකි තරම් සංකීර්ණ වන අතර ඒවා මෘදුකාංග තුළ ක්රියාත්මක කළ යුතුය.
බිට්වේස් මෙහෙයුම්
අපගේ සකසනය ඇත AND
, OR
සහ XOR
ඔබ බලාපොරොත්තු වන දේ ඉටු වන උපදෙස්. ඇති කරනවාට වඩා NOT
උපදෙස්, අපි "නැහැ-" (ඇති කිරීමට තීරණය කළා ANT
) උපදෙස්. NOT
උපදෙස් සමඟ ඇති දුෂ්කරතාවය නැවතත් එය සං signal ා lack නතාවයෙන් සං signal ා නිර්මාණය කළ යුතු අතර එය සෛලීය ස්වයංක්රීය යන්ත්රයක් සමඟ දුෂ්කර වේ. මෙම ANT
උපදෙස් ප්රතිලාභ 1 පළමු තර්කය ටිකක් 1 වන අතර, එම දෙවැනි තර්කයේ ටිකක් මේ අනුව, 0 වන අතර, නම් පමණක් NOT x
සමාන වේ ANT -1 x
(මෙන්ම XOR -1 x
). තව දුරටත්, ANT
බහුකාර්ය වන අතර එය ආවරණ කිරීමේදී එහි ප්රධාන වාසිය ඇත: ටෙට්රිස් වැඩසටහනේ දී අපි එය ටෙට්රොමිනෝ මකා දැමීමට භාවිතා කරමු.
බිට් මාරුව
බිටු මාරුවීමේ මෙහෙයුම් ALU විසින් හසුරුවන වඩාත් සංකීර්ණ මෙහෙයුම් වේ. ඔවුන් දත්ත යෙදවුම් දෙකක් ගනී: මාරුවීමට අගයක් සහ එය මාරු කිරීමට මුදලක්. ඒවායේ සංකීර්ණත්වය තිබියදීත් (විචල්ය මාරුවීමේ ප්රමාණය හේතුවෙන්), ටෙට්රිස් හා සම්බන්ධ බොහෝ "චිත්රක" මෙහෙයුම් ඇතුළුව බොහෝ වැදගත් කාර්යයන් සඳහා මෙම මෙහෙයුම් ඉතා වැදගත් වේ. කාර්යක්ෂම ගුණ කිරීම / බෙදීම් ඇල්ගොරිතම සඳහා පදනම ලෙස බිට් මාරුව ක්රියා කරයි.
අපගේ ප්රොසෙසරයට බිට් ෂිෆ්ට් මෙහෙයුම් තුනක් ඇත, “ෂිෆ්ට් වම්” ( SL
), “ෂිෆ්ට් දකුණ තාර්කික” ( SRL
) සහ “ෂිෆ්ට් දකුණ ගණිතය” ( SRA
). පළමු බිට් මාරුව දෙක ( SL
සහ SRL
) නව බිටු සියලු ශුන්යයන්ගෙන් පුරවන්න (එයින් අදහස් වන්නේ දකුණට මාරුවූ negative ණ සංඛ්යාවක් තවදුරටත් .ණ නොවන බවයි). මාරුවේ දෙවන තර්කය 0 සිට 15 දක්වා පරාසයකින් පිටත නම්, ප්රති result ලය ඔබ බලාපොරොත්තු වන පරිදි සියලු ශුන්ය වේ. අන්තිම බිට් මාරුව සඳහා,SRA
බිට් මාරුව ආදානයේ ලකුණ ආරක්ෂා කරයි, එබැවින් සත්ය බෙදීමක් ලෙස දෙකකින් ක්රියා කරයි.
උපදෙස් නල මාර්ගගත කිරීම
දැන් ගෘහ නිර්මාණ ශිල්පයේ අමිහිරි තොරතුරු කිහිපයක් ගැන කතා කිරීමට කාලයයි. සෑම CPU චක්රයක්ම පහත පියවර පහකින් සමන්විත වේ:
1. ROM වෙතින් වත්මන් උපදෙස් ලබා ගන්න
පරිගණකයේ වත්මන් අගය ROM වෙතින් අනුරූප උපදෙස් ලබා ගැනීමට භාවිතා කරයි. සෑම උපදෙස් සඳහාම එක් ඔප්කෝඩ් එකක් සහ ඔපෙරන්ඩ් තුනක් ඇත. සෑම මෙහෙයුමක්ම එක් දත්ත වචනයක් සහ එක් ලිපින මාදිලියකින් සමන්විත වේ. මෙම කොටස් ROM වෙතින් කියවන විට එකිනෙකාගෙන් බෙදී යයි.
අද්විතීය කේත 16 ක් සඳහා සහය දැක්වීම සඳහා ඔප්කෝඩ් බිටු 4 ක් වන අතර ඉන් 11 ක් පවරා ඇත:
0000 MNZ Move if Not Zero
0001 MLZ Move if Less than Zero
0010 ADD ADDition
0011 SUB SUBtraction
0100 AND bitwise AND
0101 OR bitwise OR
0110 XOR bitwise eXclusive OR
0111 ANT bitwise And-NoT
1000 SL Shift Left
1001 SRL Shift Right Logical
1010 SRA Shift Right Arithmetic
1011 unassigned
1100 unassigned
1101 unassigned
1110 unassigned
1111 unassigned
2. පෙර උපදෙස්වල ප්රති result ලය (අවශ්ය නම්) RAM වෙත ලියන්න
පෙර උපදෙස්වල තත්වය මත පදනම්ව (කොන්දේසි සහිත පියවරක් සඳහා පළමු තර්කයේ වටිනාකම වැනි), ලිවීමක් සිදු කරනු ලැබේ. ලිවීමේ ලිපිනය තීරණය කරනු ලබන්නේ පෙර උපදෙස්වල තුන්වන ක්රියාකාරිත්වය මගිනි.
ලිවීම සිදු වන්නේ උපදෙස් ලබා ගැනීමෙන් පසුව බව සැලකිල්ලට ගැනීම වැදගත්ය. මෙය ශාඛා ප්රමාදයක් ඇති කිරීමට හේතු වේශාඛා ඉලක්කයේ පළමු උපදෙස් වෙනුවට ශාඛා උපදෙස් (පළාත් සභාවට ලියන ඕනෑම මෙහෙයුමක්) ක්රියාත්මක වූ වහාම .
සමහර අවස්ථා වලදී (කොන්දේසි විරහිතව පැනීම වැනි), ශාඛා ප්රමාද විවරය ප්රශස්තිකරණය කළ හැකිය. වෙනත් අවස්ථාවල දී එය කළ නොහැකි අතර, ශාඛාවකට පසු උපදෙස් හිස්ව තැබිය යුතුය. තවද, මෙම වර්ගයේ ප්රමාද විවරය යන්නෙන් අදහස් වන්නේ ශාඛා ඉලක්කයක් සත්ය ඉලක්කගත උපදෙස් වලට වඩා ලිපිනය 1 ක් අඩු වන අතර එය සිදුවන පළාත් සභා වර්ධක සඳහා ගණනය කළ යුතු බවයි.
කෙටියෙන් කිවහොත්, ඊළඟ උපදෙස් ලබා ගැනීමෙන් පසු පෙර උපදෙස්වල ප්රතිදානය RAM වෙත ලියා ඇති හෙයින්, කොන්දේසි සහිත පැනීම් වලට පසු හිස් උපදෙස් තිබිය යුතුය, එසේ නොමැතිනම් පැනීම සඳහා පරිගණකය නිසි ලෙස යාවත්කාලීන නොවනු ඇත.
3. RAM වෙතින් වත්මන් උපදෙස් තර්ක සඳහා දත්ත කියවන්න
කලින් සඳහන් කළ පරිදි, එක් එක් මෙහෙයුම් තුනෙන් දත්ත වචනයක් සහ ලිපින ක්රමයක් ඇත. දත්ත වචනය බිටු 16 ක් වන අතර පළල RAM ට සමාන වේ. ලිපින මාදිලිය බිටු 2 කි.
බොහෝ තාත්වික ලිපින ක්රම වලට බහු-පියවර ගණනය කිරීම් (ඕෆ්සෙට් එකතු කිරීම වැනි) ඇතුළත් වන බැවින්, ආමන්ත්රණය කිරීමේ මාතයන් මෙවැනි ප්රොසෙසරයක් සඳහා සැලකිය යුතු සංකීර්ණත්වයේ ප්රභවයක් විය හැකිය. ඒ අතරම, ප්රොසෙසරයේ භාවිතයට බහුකාර්ය ලිපින ක්රම වැදගත් කාර්යභාරයක් ඉටු කරයි.
දෘඩ කේත අංක ඔපෙරන්ඩ් ලෙස භාවිතා කිරීම සහ දත්ත ලිපින ඔපෙරන්ඩ් ලෙස භාවිතා කිරීම යන සංකල්ප ඒකාබද්ධ කිරීමට අපි උත්සාහ කළෙමු. මෙය ප්රති-පාදක ලිපින ක්රම නිර්මාණය කිරීමට හේතු විය: ඔපෙරන්ඩ් එකක ලිපින ප්රකාරය හුදෙක් RAM කියවන ලූපයක් වටා දත්ත යැවිය යුතු වාර ගණන නිරූපණය කරයි. මෙය ක්ෂණික, සෘජු, වක්ර සහ ද්වි-වක්ර ඇමතුම් ඇතුළත් වේ.
00 Immediate: A hard-coded value. (no RAM reads)
01 Direct: Read data from this RAM address. (one RAM read)
10 Indirect: Read data from the address given at this address. (two RAM reads)
11 Double-indirect: Read data from the address given at the address given by this address. (three RAM reads)
මෙම විරූපණය සිදු කිරීමෙන් පසුව, උපදෙස් තුනෙහි විවිධ භූමිකාවන් ඇත. පළමු ඔපෙරන්ඩ් සාමාන්යයෙන් ද්විමය ක්රියාකරු සඳහා වන පළමු තර්කය වන අතර වර්තමාන උපදෙස් කොන්දේසි සහිත පියවරක් වන විට තත්වය ලෙසද ක්රියා කරයි. දෙවන ඔපෙරන්ඩ් ද්විමය ක්රියාකරු සඳහා දෙවන තර්කය ලෙස සේවය කරයි. තෙවන මෙහෙයුම උපදෙස්වල ප්රති result ල සඳහා ගමනාන්ත ලිපිනය ලෙස සේවය කරයි.
පළමු උපදෙස් දෙක දත්ත ලෙස සේවය කරන අතර තෙවනුව ලිපිනයක් ලෙස සේවය කරන බැවින්, ඇමතීමේ මාතයන් ඒවා භාවිතා කරන්නේ කුමන ස්ථානය අනුවද යන්නට වඩා වෙනස් අර්ථකථන ඇත. නිදසුනක් ලෙස, ස්ථාවර RAM ලිපිනයකින් දත්ත කියවීමට සෘජු ප්රකාරය භාවිතා කරයි (සිට එක් RAM කියවීමක් අවශ්ය වේ), නමුත් ස්ථාවර RAM ලිපිනයකට දත්ත ලිවීමට ක්ෂණික මාදිලිය භාවිතා කරයි (RAM කියවීම් අවශ්ය නොවන බැවින්).
4. ප්රති .ලය ගණනය කරන්න
ද්විමය මෙහෙයුමක් සිදු කිරීම සඳහා ඔප්කෝඩ් සහ පළමු මෙහෙයුම් දෙක ALU වෙත යවනු ලැබේ. අංක ගණිත, බිට්වේස් සහ මාරුව මෙහෙයුම් සඳහා, මෙයින් අදහස් කරන්නේ අදාළ මෙහෙයුම සිදු කිරීමයි. කොන්දේසි සහිත චලනයන් සඳහා, මෙයින් අදහස් කරන්නේ දෙවන මෙහෙයුම නැවත ලබා දීමයි.
තත්වය ගණනය කිරීම සඳහා ඔප්කෝඩ් සහ පළමු ඔපෙරන්ඩ් භාවිතා වන අතර එමඟින් ප්රති result ලය මතකයට ලිවිය යුතුද නැද්ද යන්න තීරණය වේ. කොන්දේසිගත චලනයන් සම්බන්ධයෙන්, මෙයින් අදහස් කරන්නේ ඔපෙරන්ඩ් හි කිසියම් බිට් එකක් 1 (සඳහා MNZ
) ද යන්න තීරණය කිරීම හෝ සං bit ා බිට් 1 (සඳහා ) ද යන්න තීරණය කිරීමයි MLZ
. ඔප්කෝඩ් එක කොන්දේසිගත පියවරක් නොවේ නම්, ලිවීම සැමවිටම සිදු කරයි (තත්වය සැමවිටම සත්ය වේ).
5. වැඩසටහන් කවුන්ටරය වැඩි කරන්න
අවසාන වශයෙන්, වැඩසටහන් කවුන්ටරය කියවීම, වැඩි කිරීම සහ ලිවීම සිදු කරයි.
උපදෙස් කියවීම සහ උපදෙස් ලිවීම අතර පළාත් සභා වර්ධකයේ පිහිටීම නිසා, මෙයින් අදහස් කරන්නේ පරිගණකය 1 කින් වැඩි කරන උපදෙස් විකල්පයක් නොවන බවයි. පරිගණකය තමාටම පිටපත් කරන උපදෙස් මඟින් ඊළඟ උපදෙස් එකවර දෙවරක් ක්රියාත්මක වේ. එහෙත්, අවවාද කරන්න, පේළි කිහිපයක ඇති උපදෙස් මඟින් ඔබ උපදෙස් නල මාර්ගයට අවධානය යොමු නොකරන්නේ නම්, අසීමිත ලූප ඇතුළු සංකීර්ණ බලපෑම් ඇති කළ හැකිය.
ටෙට්රිස් එක්රැස්වීම සඳහා ගවේෂණය
අපගේ සකසනය සඳහා අපි QFTASM නමින් නව එකලස් කිරීමේ භාෂාවක් නිර්මාණය කළෙමු. මෙම එකලස් කිරීමේ භාෂාව පරිගණකයේ ROM හි යන්ත්ර කේතය සමඟ 1 සිට 1 දක්වා අනුරූප වේ.
ඕනෑම QFTASM වැඩසටහනක් පේළියකට එකක් උපදෙස් මාලාවක් ලෙස ලියා ඇත. සෑම පේළියක්ම මේ ආකාරයට සංයුති කර ඇත:
[line numbering] [opcode] [arg1] [arg2] [arg3]; [optional comment]
ඔප්කෝඩ් ලැයිස්තුව
කලින් සාකච්ඡා කළ පරිදි, පරිගණකයට සහය දක්වන ඔප්කෝඩ් එකොළහක් ඇත, ඒ සෑම එකක්ම ඔපෙරන්ඩ් තුනක් ඇත:
MNZ [test] [value] [dest] – Move if Not Zero; sets [dest] to [value] if [test] is not zero.
MLZ [test] [value] [dest] – Move if Less than Zero; sets [dest] to [value] if [test] is less than zero.
ADD [val1] [val2] [dest] – ADDition; store [val1] + [val2] in [dest].
SUB [val1] [val2] [dest] – SUBtraction; store [val1] - [val2] in [dest].
AND [val1] [val2] [dest] – bitwise AND; store [val1] & [val2] in [dest].
OR [val1] [val2] [dest] – bitwise OR; store [val1] | [val2] in [dest].
XOR [val1] [val2] [dest] – bitwise XOR; store [val1] ^ [val2] in [dest].
ANT [val1] [val2] [dest] – bitwise And-NoT; store [val1] & (![val2]) in [dest].
SL [val1] [val2] [dest] – Shift Left; store [val1] << [val2] in [dest].
SRL [val1] [val2] [dest] – Shift Right Logical; store [val1] >>> [val2] in [dest]. Doesn't preserve sign.
SRA [val1] [val2] [dest] – Shift Right Arithmetic; store [val1] >> [val2] in [dest], while preserving sign.
ඇමතීමේ මාතයන්
සෑම ඔපෙරන්ඩ් එකකම දත්ත වටිනාකමක් සහ ආමන්ත්රණ පියවරක් අඩංගු වේ. දත්ත අගය -32768 සිට 32767 දක්වා වූ දශම සංඛ්යාවක් මගින් විස්තර කෙරේ. ලිපින මාදිලිය දත්ත අගයට එක් අකුරු උපසර්ගයක් මගින් විස්තර කෙරේ.
mode name prefix
0 immediate (none)
1 direct A
2 indirect B
3 double-indirect C
උදාහරණ කේතය
පේළි පහකින් ෆිබොනාච්චි අනුක්රමය:
0. MLZ -1 1 1; initial value
1. MLZ -1 A2 3; start loop, shift data
2. MLZ -1 A1 2; shift data
3. MLZ -1 0 0; end loop
4. ADD A2 A3 1; branch delay slot, compute next term
මෙම කේතය Fibonacci අනුක්රමය ගණනය කරන අතර RAM ලිපිනය 1 සමඟ වර්තමාන පදය අඩංගු වේ. එය 28657 න් පසු ඉක්මනින් පිටාර ගැලේ.
අළු කේතය:
0. MLZ -1 5 1; initial value for RAM address to write to
1. SUB A1 5 2; start loop, determine what binary number to covert to Gray code
2. SRL A2 1 3; shift right by 1
3. XOR A2 A3 A1; XOR and store Gray code in destination address
4. SUB B1 42 4; take the Gray code and subtract 42 (101010)
5. MNZ A4 0 0; if the result is not zero (Gray code != 101010) repeat loop
6. ADD A1 1 1; branch delay slot, increment destination address
මෙම වැඩසටහන අළු කේතය ගණනය කරන අතර 5 වන ලිපිනයේ සිට කේතය සාර්ථක ලිපිනවල ගබඩා කරයි. මෙම වැඩසටහන මඟින් වක්ර ආමන්ත්රණය සහ කොන්දේසි සහිත පැනීම වැනි වැදගත් අංග කිහිපයක් භාවිතා කරයි. ප්රති result ලයක් ලෙස අළු කේතය වූ විට එය නතර වේ 101010
, එය 56 වන ලිපිනයේ 51 ආදානය සඳහා සිදු වේ.
ඔන්ලයින් පරිවර්තකය
එල්'එන්ඩියා ස්ටාර්මන් මෙහි ඉතා ප්රයෝජනවත් සබැඳි පරිවර්තකයෙකු නිර්මාණය කර ඇත . ඔබට කේතය හරහා ගමන් කිරීමට, බ්රේක්පොයින්ට් සැකසීමට, RAM වෙත අත්පොත ලිවීමට සහ RAM දර්ශනයක් ලෙස දෘශ්යමාන කිරීමට හැකිය.
කොගොල්
ගෘහ නිර්මාණ ශිල්පය සහ එකලස් කිරීමේ භාෂාව නිර්වචනය කළ පසු, ව්යාපෘතියේ “මෘදුකාංග” පැත්තේ ඊළඟ පියවර වූයේ ඉහළ මට්ටමේ භාෂාවක් නිර්මාණය කිරීමයි, එය ටෙට්රිස්ට සුදුසු ය. මේ අනුව මම කොගොල් නිර්මාණය කළා . මෙම නම "COBOL" හි ද pun ුවමක් වන අතර "C of Game of Life" යන්නෙහි සංක්ෂිප්තයකි. කොගොල් යනු C ට අපගේ පරිගණකය සැබෑ පරිගණකයකට ලබා දෙන බව සඳහන් කිරීම වටී.
කොගොල් පවතින්නේ එකලස් කිරීමේ භාෂාවට මදක් ඉහළින්ය. සාමාන්යයෙන්, කොගොල් වැඩසටහනක බොහෝ රේඛා එකලස් කිරීමේ එක පේළියකට අනුරූප වේ, නමුත් භාෂාවේ වැදගත් ලක්ෂණ කිහිපයක් තිබේ:
- මූලික ලක්ෂණ අතර නම් කළ හැකි විචල්යයන් සහ පැවරුම් සහිත ක්රියාකරුවන් සහ කියවිය හැකි සින්ටැක්ස් ඇති ක්රියාකරුවන් ඇතුළත් වේ. උදාහරණයක් ලෙස,
ADD A1 A2 3
බවට පත් වෙයි z = x + y;
ලිපින මතට සම්පාදකවරයා සිතියම් විචල්ය.
- වැනි ප්රහාරක නිර්මාණය කරන
if(){}
, while(){}
සහ do{}while();
සම්පාදකවරයා මගින් හසුරුවනු අතු බෙදී එසේ.
- ටෙට්රිස් පුවරුව සඳහා භාවිතා කරන ඒක මාන අරා (දර්ශක අංක ගණිතය සමඟ).
- සබ්ට්රවුටින් සහ ඇමතුම් තොගයක්. කේත විශාල කැබලි අනුපිටපත් කිරීම වැළැක්වීමට සහ පුනරාවර්තනයට සහාය වීමට මේවා ප්රයෝජනවත් වේ.
සම්පාදකයා (මම මුල සිටම ලියා ඇති) ඉතා මූලික / බොළඳ ය, නමුත් කෙටි සම්පාදනය කරන ලද වැඩසටහන් දිගක් ලබා ගැනීම සඳහා භාෂා ව්යුහයන් කිහිපයක් අතින් ප්රශස්ත කිරීමට මම උත්සාහ කර ඇත්තෙමි.
විවිධ භාෂා විශේෂාංග ක්රියාත්මක වන ආකාරය පිළිබඳ කෙටි දළ විශ්ලේෂණ කිහිපයක් මෙන්න:
ටෝකනකරණය
ප්රභව කේතය ටෝකනගත කර ඇත්තේ රේඛීයව (තනි පාස්), ටෝකනයක් තුළ යාබදව සිටීමට අවසර දී ඇති අක්ෂර පිළිබඳ සරල නීති භාවිතා කරයි. වත්මන් ටෝකනයේ අවසාන අක්ෂරයට යාබදව තිබිය නොහැකි අක්ෂරයක් හමු වූ විට, වත්මන් ටෝකනය සම්පුර්ණ යැයි සලකන අතර නව චරිතය නව ටෝකනයක් ආරම්භ කරයි. සමහර අක්ෂර (වැනි {
හෝ ,
) වෙනත් අක්ෂරවලට යාබදව තිබිය නොහැකි අතර එම නිසා ඒවායේ සංකේත වේ. අන් අය (මෙන් >
හෝ =
) පමණක් ඔවුන්ගේ පන්තිය තුල තවත් චරිත යාබදව සඳහා අවසර ඇති අතර, ඒ අනුව වැනි කාර්යභාරය අගයනු ගත හැක >>>
, ==
හෝ >=
වැනි, නමුත් =2
. වයිට්ස්පේස් අක්ෂර ටෝකන අතර මායිමක් බල කරන නමුත් ප්රති result ලයට ඒවා ඇතුළත් නොවේ. ටෝකනකරණය කිරීමට වඩාත්ම දුෂ්කර චරිතය වන්නේ-
මක්නිසාද යත් එය අඩු කිරීම සහ ඒකීය නිෂේධනය යන දෙකම නිරූපණය කළ හැකි නිසා විශේෂ ආවරණයක් අවශ්ය වේ.
විග්රහ කිරීම
විග්රහ කිරීම ද තනි පාස් ආකාරයකින් සිදු කෙරේ. එක් එක් විවිධ භාෂා සැකසුම් හැසිරවීමේ ක්රම සම්පාදකයා සතුව ඇති අතර විවිධ සම්පාදක ක්රම මගින් පරිභෝජනය කරන බැවින් ටෝකන ගෝලීය ටෝකන් ලැයිස්තුවෙන් ඉවත් වේ. සම්පාදකයා කවදාවත් බලාපොරොත්තු නොවන ටෝකනයක් දුටුවහොත් එය සින්ටැක්ස් දෝෂයක් මතු කරයි.
ගෝලීය මතක වෙන් කිරීම
සම්පාදකයා විසින් එක් එක් ගෝලීය විචල්යය (වචනය හෝ අරාව) තමන්ගේම නම් කරන ලද RAM ලිපිනය (es) පවරයි. යතුරුපදය භාවිතයෙන් සියලු විචල්යයන් ප්රකාශ කිරීම අවශ්ය වන අතර my
එමඟින් ඒ සඳහා ඉඩ වෙන් කිරීමට සම්පාදකයා දනී. නම් කරන ලද ගෝලීය විචල්යයන්ට වඩා සිසිල් වන්නේ සීරීම් ලිපින මතක කළමනාකරණයයි. බොහෝ උපදෙස් (විශේෂයෙන් කොන්දේසි සහ බොහෝ අරාව ප්රවේශයන්) අතරමැදි ගණනය කිරීම් ගබඩා කිරීම සඳහා තාවකාලික “සීරීම්” ලිපින අවශ්ය වේ. සම්පාදනය කිරීමේ ක්රියාවලියේදී සම්පාදකයා අවශ්ය පරිදි සීරීම් ලිපින වෙන් කරයි. සම්පාදකයාට තවත් සීරීම් ලිපින අවශ්ය නම්, එය සීරීම් ලිපින ලෙස වැඩි RAM ප්රමාණයක් කැප කරනු ඇත. සෑම සීරීම් ලිපිනයක්ම බොහෝ වාරයක් භාවිතා කරනු ඇතත්, වැඩසටහනකට සීරීම් ලිපින කිහිපයක් පමණක් අවශ්ය බව මම විශ්වාස කරමි.
IF-ELSE
ප්රකාශ
if-else
ප්රකාශ සඳහා වන වාක්ය ඛණ්ඩය සම්මත C ආකෘතියයි:
other code
if (cond) {
first body
} else {
second body
}
other code
QFTASM බවට පරිවර්තනය කළ විට, කේතය මේ ආකාරයට සකසා ඇත:
other code
condition test
conditional jump
first body
unconditional jump
second body (conditional jump target)
other code (unconditional jump target)
පළමු ශරීරය ක්රියාත්මක කරන්නේ නම්, දෙවන සිරුර මඟ හැරේ. පළමු ශරීරය මඟ හැරියහොත්, දෙවන සිරුර ක්රියාත්මක වේ.
එකලස් කිරීමේදී, කොන්දේසි පරීක්ෂණයක් සාමාන්යයෙන් අඩු කිරීමක් පමණක් වන අතර, ප්රති result ලයේ සං sign ාව තීරණය කරනුයේ පැනීම සිදු කරන්නේද නැතහොත් ශරීරය ක්රියාත්මක කරන්නේද යන්නයි. ක MLZ
වැනි අසමානතාවයන් හැසිරවීමට උපදෙස් භාවිතා >
හෝ <=
. ක MNZ
උපදෙස් හැසිරවීම භාවිතා ==
වෙනස (එබැවින් තර්ක සමාන නොවන විට) ශුන්ය නොවේ විට එය ශරීරය පුරා පනී සිට. බහු ප්රකාශන කොන්දේසි දැනට සහය නොදක්වයි.
else
ප්රකාශය මඟ හැරී ඇත්නම් , කොන්දේසි විරහිතව පැනීම ද මඟ හැරී ඇති අතර QFTASM කේතය මේ ආකාරයට පෙනේ:
other code
condition test
conditional jump
body
other code (conditional jump target)
WHILE
ප්රකාශ
while
ප්රකාශ සඳහා වන වාක්ය ඛණ්ඩය ද සම්මත C ආකෘතියයි:
other code
while (cond) {
body
}
other code
QFTASM බවට පරිවර්තනය කළ විට, කේතය මේ ආකාරයට සකසා ඇත:
other code
unconditional jump
body (conditional jump target)
condition test (unconditional jump target)
conditional jump
other code
කොන්දේසි පරීක්ෂා කිරීම සහ කොන්දේසි සහිත පැනීම බ්ලොක් එක අවසානයේ ඇති අතර එයින් අදහස් වන්නේ බ්ලොක් එකෙහි එක් එක් ක්රියාත්මක කිරීමෙන් පසුව ඒවා නැවත ක්රියාත්මක වන බවයි. තත්වය සාවද්ය වූ විට ශරීරය නැවත නොකෙරෙන අතර ලූපය අවසන් වේ. ලූප් ක්රියාත්මක කිරීම ආරම්භයේදී, පාලක ප්රවාහය කොන්දේසි කේතය වෙත ලූප ශරීරය හරහා පනින අතර පළමු වරට තත්වය අසත්ය නම් ශරීරය කිසි විටෙකත් ක්රියාත්මක නොවේ.
ක MLZ
වැනි අසමානතාවයන් හැසිරවීමට උපදෙස් භාවිතා >
හෝ <=
. if
ප්රකාශයන් මෙන් නොව , වෙනසක් ශුන්ය නොවන විට (එම නිසා තර්ක සමාන නොවන විට) එය ශරීරයට පනින බැවින්, MNZ
හැසිරවීමට උපදෙස් භාවිතා කරයි !=
.
DO-WHILE
ප්රකාශ
අතර ඇති එකම වෙනස while
හා do-while
කරන ලෙස ද බව ය do-while
එය සෑම විටම අවම වශයෙන් එක් වරක් ක්රියාත්මක වන නිසා පුඩුවක් ශරීරය මුලින් පුරා ගියේ නැත. do-while
එකලස් කිරීමේ කේත පේළි කිහිපයක් සුරැකීමට මම සාමාන්යයෙන් ප්රකාශ භාවිතා කරමි .
අරා
ඒක මාන අරා ක්රියාත්මක වන්නේ මතකයේ පරස්පර කොටස් ලෙස ය. සියළුම අරා ඒවායේ ප්රකාශය මත පදනම්ව ස්ථාවර දිගකින් යුක්ත වේ. අරා එසේ ප්රකාශ වේ:
my alpha[3]; # empty array
my beta[11] = {3,2,7,8}; # first four elements are pre-loaded with those values
අරාව සඳහා, මෙය හැකි RAM සිතියම්ගත කිරීමක් වන අතර, 15-18 ලිපිනයන් අරාව සඳහා වෙන් කර ඇති ආකාරය පෙන්වයි:
15: alpha
16: alpha[0]
17: alpha[1]
18: alpha[2]
ලේබල් කරන alpha
ලද ලිපිනය පිහිටීම සඳහා දර්ශකයකින් පුරවා ඇත alpha[0]
, එබැවින් මෙම නඩුවේ ලිපිනය 15 හි 16 අගය අඩංගු වේ. alpha
විචල්යය කොගෝල් කේතයේ ඇතුළත භාවිතා කළ හැකිය, සමහර විට ඔබට මෙම අරාව තොගයක් ලෙස භාවිතා කිරීමට අවශ්ය නම් තොග දර්ශකයක් ලෙස විය හැකිය. .
අරාවෙහි මූලද්රව්යයන්ට ප්රවේශ වීම සම්මත array[index]
අංකනය සමඟ සිදු කෙරේ . අගය index
නියතයක් නම්, මෙම සඳහන ස්වයංක්රීයව එම මූලද්රව්යයේ නිරපේක්ෂ ලිපිනය සමඟ පුරවනු ලැබේ. එසේ නොමැතිනම් එය අපේක්ෂිත නිරපේක්ෂ ලිපිනය සොයා ගැනීම සඳහා දර්ශක අංක ගණිතය (එකතු කිරීම) සිදු කරයි. වැනි කූඩු සුචිගත කිරීම ද කළ හැකිය alpha[beta[1]]
.
සබ්ට්රවුටින් සහ ඇමතුම්
සබ්ට්රෝටීන් යනු කේත වල කොටස් වන අතර එය විවිධ සන්දර්භයන්ගෙන් හැඳින්විය හැකිය, කේත අනුපිටපත් කිරීම වළක්වයි සහ පුනරාවර්තන වැඩසටහන් නිර්මාණය කිරීමට ඉඩ දෙයි. ෆයිබොනාච්චි සංඛ්යා උත්පාදනය කිරීම සඳහා පුනරාවර්තන සබ්ට්රවුටින් සහිත වැඩසටහනක් මෙන්න (මූලික වශයෙන් මන්දගාමී ඇල්ගොරිතම):
# recursively calculate the 10th Fibonacci number
call display = fib(10).sum;
sub fib(cur,sum) {
if (cur <= 2) {
sum = 1;
return;
}
cur--;
call sum = fib(cur).sum;
cur--;
call sum += fib(cur).sum;
}
යතුරුපදය සමඟ සබ්ට්රවුටින් එකක් ප්රකාශයට පත් කරන අතර sub
, වැඩසටහන තුළ ඕනෑම තැනක සබ්ට්රවුටින් එකක් තැබිය හැකිය. සෑම සබ්මැරීනයකටම දේශීය විචල්යයන් කිහිපයක් තිබිය හැකි අතර ඒවා එහි තර්ක ලැයිස්තුවේ කොටසක් ලෙස ප්රකාශයට පත් කෙරේ. මෙම තර්ක වලට පෙරනිමි අගයන් ද ලබා දිය හැකිය.
පුනරාවර්තන ඇමතුම් හැසිරවීම සඳහා, සබ්මැරීනයක දේශීය විචල්යයන් තොගයේ ගබඩා කර ඇත. RAM හි අවසාන ස්ථිතික විචල්යය වන්නේ ඇමතුම් සිරස් දර්ශකය වන අතර ඉන් පසුව ඇති සියලුම මතකය ඇමතුම් තොගය ලෙස සේවය කරයි. සබ්ට්රවුටින් එකක් කැඳවූ විට, එය ඇමතුම් තොගයේ නව රාමුවක් නිර්මාණය කළ අතර එයට සියලු දේශීය විචල්යයන් මෙන්ම ආපසු එන (ROM) ලිපිනයද ඇතුළත් වේ. වැඩසටහනේ සෑම සබ්මැරීනයකටම දර්ශකයක් ලෙස සේවය කිරීම සඳහා තනි ස්ථිතික RAM ලිපිනයක් ලබා දී ඇත. මෙම දර්ශකය ඇමතුම් තොගයේ ඇති සබ්ට්රවුටින් හි "වත්මන්" ඇමතුමේ පිහිටීම ලබා දෙයි. දේශීය විචල්යයක් යොමු කිරීම සිදු කරනු ලබන්නේ මෙම ස්ථිතික දර්ශකයේ අගය සහ එම දේශීය විචල්යයේ ලිපිනය ලබා දීම සඳහා ඕෆ්සෙට් භාවිතා කිරීමෙනි. ස්ථිතික දර්ශකයේ පෙර අගය ද ඇමතුම් තොගයේ අඩංගු වේ. මෙහි'
RAM map:
0: pc
1: display
2: scratch0
3: fib
4: scratch1
5: scratch2
6: scratch3
7: call
fib map:
0: return
1: previous_call
2: cur
3: sum
සබ්ට්රවුටින් පිළිබඳ සිත්ගන්නා කරුණක් නම් ඒවා කිසිදු විශේෂිත අගයක් ලබා නොදීමයි. ඒ වෙනුවට, සබ්ට්රවුටින් සිදු කිරීමෙන් පසු සබ්ට්රවුටින්හි සියලුම දේශීය විචල්යයන් කියවිය හැකිය, එබැවින් සබ්ට්රවුටින් ඇමතුමකින් විවිධ දත්ත ලබා ගත හැකිය. මෙය සිදු කරනු ලබන්නේ සබ්ට්රවුටින් හි නිශ්චිත ඇමතුම සඳහා දර්ශකය ගබඩා කිරීමෙනි, එමඟින් (මෑතකදී ඉවත් කරන ලද) සිරස් රාමුව තුළ ඇති ඕනෑම දේශීය විචල්යයන් නැවත ලබා ගැනීමට භාවිතා කළ හැකිය.
උපසිරැසියක් ඇමතීමට විවිධ ක්රම තිබේ, සියල්ලම යතුරුපදය භාවිතා කරයි call
:
call fib(10); # subroutine is executed, no return vaue is stored
call pointer = fib(10); # execute subroutine and return a pointer
display = pointer.sum; # access a local variable and assign it to a global variable
call display = fib(10).sum; # immediately store a return value
call display += fib(10).sum; # other types of assignment operators can also be used with a return value
සබ්ට්රවුටින් ඇමතුමක් සඳහා තර්ක ලෙස ඕනෑම අගයන් ගණනක් ලබා දිය හැකිය. සපයා නොමැති ඕනෑම තර්කයක් එහි පෙරනිමි අගය සමඟ පුරවනු ලැබේ. සපයා නැති සහ පෙරනිමි අගයක් නොමැති තර්කයක් නිෂ්කාශනය නොකෙරේ (උපදෙස් / කාලය ඉතිරි කර ගැනීම සඳහා), එබැවින් සබ්ට්රවුටින් ආරම්භයේදී ඕනෑම අගයක් ලබා ගත හැකිය.
පොයින්ටර්ස් යනු සබ්ට්රවුටින්හි දේශීය විචල්යයන් කිහිපයකට ප්රවේශ වීමේ ක්රමයකි, නමුත් දර්ශකය තාවකාලික පමණක් බව සැලකිල්ලට ගැනීම වැදගත්ය: වෙනත් සබ්ට්රවුටින් ඇමතුමක් ලබා දුන් විට දර්ශකය පෙන්වා දෙන දත්ත විනාශ වේ.
නිදොස් කිරීමේ ලේබල
{...}
කොගොල් වැඩසටහනක ඇති ඕනෑම කේත වාරණයකට පෙර බහු වචන විස්තර ලේබලයක් මඟින් කළ හැකිය. මෙම ලේබලය සම්පාදනය කරන ලද එකලස් කිරීමේ කේතයේ විවරණයක් ලෙස අමුණා ඇති අතර එය නිදොස් කිරීම සඳහා ඉතා ප්රයෝජනවත් විය හැකි බැවින් නිශ්චිත කේත කැබලි සොයා ගැනීම පහසු කරයි.
ශාඛා ප්රමාද තව් ප්රශස්තිකරණය
සම්පාදනය කරන ලද කේතයේ වේගය වැඩි දියුණු කිරීම සඳහා, කොගොල් සම්පාදකයා QFTASM කේතය හරහා අවසාන සමත් වීමක් ලෙස සැබවින්ම මූලික ප්රමාද ස්ලොට් ප්රශස්තිකරණය සිදු කරයි. හිස් ශාඛා ප්රමාදයක් සහිත ඕනෑම කොන්දේසි විරහිත පැනීමකට, පැනීමේ ගමනාන්තයේ පළමු උපදෙස් මගින් ප්රමාද ස්ලට් එක පිරවිය හැකි අතර, ඊළඟ උපදෙස් වෙත යොමු කිරීම සඳහා පැනීමේ ගමනාන්තය එක් අයෙකු විසින් වැඩි කරනු ලැබේ. කොන්දේසි විරහිතව පැනීම සිදු කරන සෑම අවස්ථාවකම මෙය සාමාන්යයෙන් එක් චක්රයක් ඉතිරි කරයි.
කොගොල්හි ටෙට්රිස් කේතය ලිවීම
අවසාන ටෙට්රිස් වැඩසටහන කොගොල් හි ලියා ඇති අතර ප්රභව කේතය මෙහි ඇත. සම්පාදනය කරන ලද QFTASM කේතය මෙහි ඇත. පහසුව සඳහා, මෙහි පර්මාලින්ක් ලබා දී ඇත: QFTASM හි ටෙට්රිස් . එකලස් කිරීමේ කේතය ගොල්ෆ් කිරීම ඉලක්කය වූ බැවින් (කොගොල් කේතය නොවේ), එහි ප්රති ant ලයක් ලෙස කොගෝල් කේතය අසීමිත ය. වැඩසටහනේ බොහෝ කොටස් සාමාන්යයෙන් ස්ථානගත වී ඇත්තේ සබ්ට්රවුටින්වල ය, නමුත් එම සබ්මැරීන ඇත්ත වශයෙන්ම කෙටි වන අතර කේතය අනුපිටපත් කිරීමෙන් උපදෙස් ඉතිරි කර ඇතcall
ප්රකාශ. අවසාන කේතයට ඇත්තේ ප්රධාන කේතයට අමතරව එක් සබ්මැරීනයක් පමණි. මීට අමතරව, බොහෝ අරා ඉවත් කර ප්රතිස්ථාපනය කරන ලද්දේ එක් එක් විචල්යයන්ට සමානව දිගු ලැයිස්තුවක් හෝ වැඩසටහනේ දෘඩ කේත අංක වලින් ය. අවසාන සම්පාදනය කරන ලද QFTASM කේතය උපදෙස් 300 ක් යටතේ ඇත, එය කොගෝල් ප්රභවයට වඩා මඳක් දිගු වුවද.