യന്ത്രഭാഷ
![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/W65C816S_Machine_Code_Monitor.jpeg/220px-W65C816S_Machine_Code_Monitor.jpeg)
കമ്പ്യൂട്ടറിന് നേരിട്ട് മനസ്സിലാക്കുവാൻ സാധിക്കുന്ന പ്രോഗ്രാമിങ് ഭാഷയാണ് യന്ത്രതല ഭാഷ (machine language). അസ്സെംബ്ലി ഭാഷയിലും ഉന്നത തല ഭാഷയിലും എഴുതുന്ന പ്രോഗ്രാമുകൾ യന്ത്രഭാഷയിലേക്ക് മാറ്റിയാലേ കമ്പ്യൂട്ടറിന് പ്രവത്തിപ്പിക്കാൻ പറ്റൂ. യന്ത്ര തല ഭാഷയും അസ്സെംബ്ലി ഭാഷയും ഓരോരോ കമ്പ്യൂട്ടർ ആർക്കിടെക്ചറിനും വ്യത്യസ്തമാണ്. അതായത് ഒരു കമ്പ്യൂട്ടറിനായി ഉണ്ടാക്കുന്ന യന്ത്രഭാഷാ പ്രോഗ്രാമുകൾ മറ്റൊരു കമ്പ്യൂട്ടർ ശ്രേണിയിൽ പ്രവർത്തിക്കണമെന്നില്ല.
ബിറ്റുകൾ അഥവാ ദ്വയാങ്കസംഖ്യകളുടെ ശ്രേണി ആയാണ് യന്ത്രഭാഷാ നിർദ്ദേശങ്ങൾ നൽകുന്നത്. മെഷീൻ കോഡ് എന്നത് കർശന വ്യവസ്ഥയുള്ള സംഖ്യാപരമായ ഭാഷയാണ്, അത് കഴിയുന്നത്ര വേഗത്തിൽ പ്രവർത്തിക്കാൻ രൂപകൽപ്പന ചെയ്തിരിക്കുന്നു, ഇത് ഒരു കംപൈൽ ചെയ്തതോ അസംബിൾ ചെയ്തതോ ആയ കമ്പ്യൂട്ടർ പ്രോഗ്രാമിന്റെ ഏറ്റവും താഴ്ന്ന നിലയിലുള്ള പ്രാതിനിധ്യം അല്ലെങ്കിൽ പ്രിമിറ്റീവും ഹാർഡ് വെയറിനെ ആശ്രയിക്കുന്ന പ്രോഗ്രാമിംഗ് ഭാഷയായി കണക്കാക്കാം. മെഷീൻ കോഡിൽ പ്രോഗ്രാമുകൾ നേരിട്ട് എഴുതാൻ കഴിയുമെങ്കിലും, വ്യക്തിഗത ബിറ്റുകൾ കൈകാര്യം ചെയ്യുന്നതും സംഖ്യാ വിലാസങ്ങളും സ്ഥിരാങ്കങ്ങളും സ്വമേധയാ കണക്കാക്കുന്നതും മടുപ്പിക്കുന്നതും പിശകുകൾ പറ്റാൻ സാധ്യതയുള്ളതുമാണ്. ഇക്കാരണത്താൽ, ആധുനിക സന്ദർഭങ്ങളിൽ ഇത്തരം പ്രോഗ്രാമുകൾ വളരെ അപൂർവമായി മാത്രമേ മെഷീൻ കോഡിൽ നേരിട്ട് എഴുതിയിട്ടുള്ളൂ, എന്നാൽ താഴ്ന്ന നിലയിലുള്ള ഡീബഗ്ഗിംഗ്, പ്രോഗ്രാം പാച്ചിംഗ് (പ്രത്യേകിച്ച് അസംബ്ലർ സോഴ്സ് ലഭ്യമല്ലാത്തപ്പോൾ), അസംബ്ലി ഭാഷ ഡിസ്അസംബ്ലിംഗ് എന്നിവയ്ക്കായി ചെയ്യുന്നു.
ഇന്നത്തെ ഭൂരിഭാഗം പ്രായോഗിക പ്രോഗ്രാമുകളും ഉയർന്ന തലത്തിലുള്ള ഭാഷകളിലോ അസംബ്ലി ഭാഷയിലോ ആണ് എഴുതിയിരിക്കുന്നത്. കംപൈലറുകൾ, അസംബ്ലറുകൾ, ലിങ്കറുകൾ തുടങ്ങിയ യൂട്ടിലിറ്റികൾ ഉപയോഗിച്ച് സോഴ്സ് കോഡ് എക്സിക്യൂട്ടബിൾ മെഷീൻ കോഡിലേക്ക് വിവർത്തനം ചെയ്യപ്പെടുന്നു, മെഷീൻ കോഡിലേക്ക് വിവർത്തനം ചെയ്യപ്പെടാത്ത, ഇന്റർപ്രെട്ടർ പ്രോഗ്രാമുകൾ ഒഴികെ, സോഴ്സ് കോഡിന്റെ നിർദ്ദേശങ്ങൾ നടപ്പിലാക്കുന്ന ഒരു എക്സിക്യൂട്ടർ അല്ലെങ്കിൽ പ്രൊസസറായി കാണാവുന്ന ഇന്റർപ്രെട്ടർ, സാധാരണയായി നേരിട്ട് എക്സിക്യൂട്ടബിൾ മെഷീൻ കോഡ് (അസംബ്ലിയിൽ നിന്നോ ഉയർന്ന തലത്തിലുള്ള ഭാഷാ സോഴ്സ് കോഡിൽ നിന്നോ സൃഷ്ടിച്ചത്) ആയി മാറ്റുന്നു.
മെഷീൻ കോഡ് എന്നത് നിർവചനം അനുസരിച്ച് പ്രോഗ്രാമർക്ക് ദൃശ്യമാകുന്ന പ്രോഗ്രാമിംഗ് വിശദാംശങ്ങളുടെ ഏറ്റവും നിമ്ന തലത്തിലുള്ളതിനെയാണ്, എന്നാൽ ആന്തരികമായി പല പ്രൊസസറുകളും മൈക്രോകോഡ് ഉപയോഗിക്കുന്നു അല്ലെങ്കിൽ മെഷീൻ കോഡ് നിർദ്ദേശങ്ങൾ ഒപ്റ്റിമൈസ് ചെയ്ത് മൈക്രോ ഓപ്പുകളുടെ ശ്രേണികളാക്കി മാറ്റുന്നു. ഇത് സാധാരണയായി ഒരു മെഷീൻ കോഡായി കണക്കാക്കില്ല.
ഇൻസ്ട്രക്ഷൻ സെറ്റ്
[തിരുത്തുക]ഓരോ പ്രോസസറിനും പ്രൊസസർ കുടുംബത്തിനും അതിന്റേതായ ഇൻസ്ട്രക്ഷൻ സെറ്റ് ഉണ്ട്. മെഷീൻ കമാൻഡുകൾക്ക് അനുയോജ്യമായ ബിറ്റുകൾ, അക്കങ്ങൾ അല്ലെങ്കിൽ പ്രതീകങ്ങൾ എന്നിവയുടെ പാറ്റേണുകളാണ് നിർദ്ദേശങ്ങൾ. അതിനാൽ, നിർദ്ദേശങ്ങളുടെ സെറ്റ് ഒരേ ആർക്കിടെക്ചർ ഉപയോഗിക്കുന്ന (മിക്കവാറും) പ്രോസസ്സറുകളുടെ ഒരു ക്ലാസ് പ്രത്യേകമായി തരം തിരിച്ചിരിക്കുന്നു. ഇടയ്ക്കിടെ, ഒരു സസ്സസർ ഡിസൈൻ ചില നിർദ്ദേശ കോഡിന്റെ മീനിംഗ് നിർത്തുകയോ മാറ്റുകയോ ചെയ്യും (സാധാരണയായി ഇത് പുതിയ ആവശ്യങ്ങൾക്ക് ഉതകുന്നതിനാൽ), ഇത് ഒരു പരിധിവരെ കോഡ് അനുയോജ്യതയെ ബാധിക്കുന്നു; അനുയോജ്യമായ പ്രോസസ്സറുകൾ പോലും ചില നിർദ്ദേശങ്ങൾക്ക് അല്പം വ്യത്യസ്തമായ സ്വഭാവം കാണിച്ചേക്കാം, എന്നാൽ ഇത് അപൂർവ്വമായി ഒരു പ്രശ്നമാണ്. മെമ്മറി ക്രമീകരണം, ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങൾ അല്ലെങ്കിൽ പെരിഫറൽ ഉപകരണങ്ങൾ പോലുള്ള മറ്റ് വിശദാംശങ്ങളിലും സിസ്റ്റങ്ങൾ വ്യത്യാസപ്പെട്ടിരിക്കാം. ഒരു പ്രോഗ്രാം സാധാരണയായി അത്തരം ഘടകങ്ങളെ ആശ്രയിക്കുന്നതിനാൽ, ഒരേ തരത്തിലുള്ള പ്രോസസ്സർ ഉപയോഗിക്കുമ്പോൾ പോലും വ്യത്യസ്ത സിസ്റ്റങ്ങളിൽപോലും സാധാരണയായി ഒരേ മെഷീൻ കോഡ് പ്രവർത്തിപ്പിക്കാറില്ല.