එය කෙටිකාලීන නොවේ.
මෙම +=
සංකේතය 1970 ගණන්වල සී භාෂාවෙන් දර්ශනය වූ අතර - “ස්මාර්ට් එකලස් කිරීමේ” සී අදහස සමඟ පැහැදිලිවම වෙනස් යන්ත්ර උපදෙස් හා ඇඩ්රස් ක්රමයට අනුරූප වේ:
" i=i+1
", "i+=1
"සහ" ++i
" වැනි දේවල් වියුක්ත මට්ටමින් එකම බලපෑමක් ඇති කළද, ප්රොසෙසරයේ වැඩ කිරීමේ වෙනත් ක්රමයකට අඩු මට්ටමින් අනුරූප වේ.
විශේෂයෙන් එම ප්රකාශන තුන, i
විචල්යය CPU ලේඛනයක ගබඩා කර ඇති මතක ලිපිනයෙහි ඇතැයි උපකල්පනය කරමු (අපි එය නම් කරමු D
- එය "int වෙත දර්ශකයක්" ලෙස සිතමු) සහ ප්රොසෙසරයේ ALU පරාමිතියක් ගෙන එහි ප්රති result ලයක් ලබා දෙයි "සමුච්චය" (අපි එය A ලෙස හඳුන්වමු - එය int ලෙස සිතමු).
මෙම අවහිරතා සමඟ (එම කාල පරිච්ඡේදයේ සිට සියලුම මයික්රොප්රොසෙසර වල ඉතා සුලභ වේ), පරිවර්තනය බොහෝ විට සිදුවනු ඇත
;i = i+1;
MOV A,(D); //Move in A the content of the memory whose address is in D
ADD A, 1; //The addition of an inlined constant
MOV (D) A; //Move the result back to i (this is the '=' of the expression)
;i+=1;
ADD (D),1; //Add an inlined constant to a memory address stored value
;++i;
INC (D); //Just "tick" a memory located counter
එය කළ හැකි පළමු ක්රමය අශෝභන ය, නමුත් නියත ( ADD A, B
හෝ ADD A, (D+x)
) වෙනුවට විචල්යයන් සමඟ ක්රියා කරන විට හෝ වඩාත් සංකීර්ණ ප්රකාශන පරිවර්තනය කිරීමේදී එය වඩාත් සාමාන්ය වේ (ඒවා සියල්ලම තොගයක් තුළ අඩු ප්රමුඛතා ක්රියාකාරිත්වයේ තම්බා, ඉහළ ප්රමුඛතාවය අමතන්න, පොප් සියලු තර්ක ඉවත් කරන තුරු නැවත නැවත කරන්න).
දෙවැන්න "රාජ්ය යන්ත්රය" ට වඩා සාමාන්ය ය: අපි තවදුරටත් "ප්රකාශනයක් ඇගයීමට ලක් නොකරමු", නමුත් "අගයක් ක්රියාත්මක කිරීම": අපි තවමත් ALU භාවිතා කරමු, නමුත් පරාමිතිය ප්රතිස්ථාපනය කිරීමට ඉඩ දී ඇති ප්රති around ලය වීම වටා අගයන් චලනය කිරීමෙන් වළකින්න. වඩාත් සංකීර්ණ ප්රකාශනයක් අවශ්ය වන විට මෙවැනි උපදෙස් භාවිතා i = 3*i + i-2
කළ නොහැක : i
වැඩි වාර ගණනක් අවශ්ය බැවින් ක්රියාත්මක කළ නොහැක .
තෙවන-වඩාත් සරල- “එකතු කිරීම” පිළිබඳ අදහස පවා නොසලකයි, නමුත් කවුන්ටරයක් සඳහා වඩාත් “ප්රාථමික” (පරිගණකමය අර්ථයෙන්) පරිපථයක් භාවිතා කරයි. රෙජිස්ටරයක් කවුන්ටරයක් බවට පත් කිරීම සඳහා නැවත සකස් කිරීම සඳහා අවශ්ය වන ඒකාබද්ධ ජාලය කුඩා වන අතර එම නිසා පූර්ණ එකතු කරන්නකුට වඩා වේගවත් බැවින් උපදෙස් කෙටි වේ, වේගයෙන් පටවා වහාම ක්රියාත්මක වේ.
සමකාලීන සම්පාදකයින් සමඟ (මේ වන විට සී වෙත යොමු වන්න), සම්පාදක ප්රශස්තිකරණය සක්රීය කරමින්, පහසුව මත පදනම්ව ලිපි හුවමාරු කර ගත හැකි නමුත් අර්ථකථනයේ සංකල්පීය වෙනසක් තවමත් පවතී.
x += 5
මාධ්යයන්
- X විසින් හඳුනාගත් ස්ථානය සොයා ගන්න
- එයට 5 ක් එකතු කරන්න
නමුත් x = x + 5
අදහස් කරන්නේ:
- X + 5 තක්සේරු කරන්න
- X විසින් හඳුනාගත් ස්ථානය සොයා ගන්න
- X සමුච්චය තුළට පිටපත් කරන්න
- සමුච්චය වෙත 5 ක් එකතු කරන්න
- ප්රති result ලය x හි ගබඩා කරන්න
- X විසින් හඳුනාගත් ස්ථානය සොයා ගන්න
- සමුච්චය එයට පිටපත් කරන්න
ඇත්ත වශයෙන්ම, ප්රශස්තිකරණය කළ හැකිය
- "x සොයා ගැනීම" කිසිදු අතුරු ආබාධයක් නොමැති නම්, "සොයා ගැනීම" දෙක එක් වරක් කළ හැකිය (සහ x දර්ශක ලේඛනයේ ගබඩා කර ඇති ලිපිනයක් බවට පත්වේ)
- එකතු කිරීම සඳහා අයදුම් කරන්නේ නම් පිටපත් දෙකක් elided කළ හැකි
&x
ද accumulator වෙනුවට
එමඟින් ප්රශස්තකරණය කළ කේතය එක හා සමපාත x += 5
වේ.
නමුත් මෙය කළ හැක්කේ "x සොයා ගැනීම" අතුරු ආබාධ නොමැති නම් පමණි
*(x()) = *(x()) + 5;
හා
*(x()) += 5;
x()
අතුරු ආබාධ (පිළිගැනීම x()
යනු අමුතු දේවල් කිරීම සහ නැවත පැමිණීම int*
) දෙවරක් හෝ එක් වරක් නිපදවන බැවින් අර්ථ නිරූපණයෙන් වෙනස් වේ.
අතර ඇති සමානතාවය x = x + y
හා x += y
ඒ නිසා සෘජු l- අගයකට අදාළ වන +=
හා =
අදාළ වන විශේෂිත අවස්ථාව නිසාය .
පයිතන් වෙත යාමට, එය සී වෙතින් වාක්ය ඛණ්ඩය උරුම කර ගත් නමුත්, පරිවර්ථනය කරන ලද භාෂාවලින් ක්රියාත්මක කිරීමට පෙර පරිවර්තනයක් / ප්රශස්තිකරණයක් නොමැති හෙයින්, දේවල් එතරම් සමීපව සම්බන්ධ නොවේ (අඩු විග්රහ කිරීමේ පියවරක් ඇති බැවින්). කෙසේ වෙතත්, පරිවර්තකයෙකුට ප්රකාශන වර්ග තුන සඳහා විවිධ ක්රියාත්මක කිරීමේ ක්රියාකාරකම් වෙත යොමු විය හැකි අතර, ප්රකාශනය සෑදූ ආකාරය සහ ඇගයීමේ සන්දර්භය මත පදනම්ව විවිධ යන්ත්ර කේතවල වාසිය ලබා ගනී.
වැඩි විස්තර වලට කැමති කවුද ...
සෑම CPU එකකටම ALU (අංක ගණිත-තාර්කික ඒකකය) ඇත, එනම් එහි සාරය අනුව, උපදෙස් වල දෘෂ්ටි කෝණය මත පදනම්ව රෙජිස්ටර් සහ / හෝ මතකයට ආදාන සහ ප්රතිදානය "ප්ලග්" කර ඇති ඒකාබද්ධ ජාලයකි.
ද්විමය මෙහෙයුම් සාමාන්යයෙන් ක්රියාත්මක කරනු ලබන්නේ “කොහේ හරි” ආදානයක් සහිත සමුච්චකාරක ලේඛනයේ විකරණකාරකයක් ලෙසය, එහිදී කොතැනක හෝ විය හැකිය - උපදෙස් ප්රවාහය තුළම (ප්රකාශිත අන්තර්ගතයට සාමාන්යය: ADD A 5) - වෙනත් ලේඛනයක් තුළ (ප්රකාශන ගණනය කිරීම සඳහා සාමාන්ය තාවකාලික: උදා: ADD AB) - මතකය තුළ, ලේඛනයක් විසින් දෙන ලද ලිපිනයක (දත්ත ලබා ගැනීමේ සාමාන්යය: උදා: ADD A (H)) - H, මේ අවස්ථාවේ දී, විරූපණය වන දර්ශකයක් මෙන් ක්රියා කරයි.
මෙම ව්යාජ කේතය සමඟ, x += 5
වේ
ADD (X) 5
අතර x = x+5
කියන්නේ
MOVE A (X)
ADD A 5
MOVE (X) A
එනම්, x + 5 තාවකාලිකව ලබා දෙන අතර එය පසුව පවරා ඇත. x += 5
x මත කෙලින්ම ක්රියාත්මක වේ.
සත්ය ක්රියාත්මක කිරීම ප්රොසෙසරයේ නියම උපදෙස් මාලාව මත රඳා පවතී: ADD (.) c
ඔප් කේතයක් නොමැති නම් , පළමු කේතය දෙවැන්න බවට පත්වේ: නැත.
එවැනි ඔප් කේතයක් තිබේ නම් සහ ප්රශස්තිකරණය සක්රීය කර තිබේ නම්, දෙවන ප්රකාශනය, ප්රතිලෝම චලනයන් ඉවත් කර රෙජිස්ටර් ඔප්කෝඩ් සකස් කිරීමෙන් පසුව පළමු වැන්න බවට පත්වේ.
x += 5
වඩා කාර්යක්ෂම සීඑල්ආර් නැණවත්දx = x + 5
? නැතහොත් එය ඔබ යෝජනා කරන පරිදි සැබවින්ම සින්ටැක්ටික් සීනි ද?