യന്ത്രഭാഷ

കമ്പ്യൂട്ടറിന് നേരിട്ട് മനസ്സിലാക്കുവാൻ സാധിക്കുന്ന പ്രോഗ്രാമിങ് ഭാഷയാണ് യന്ത്രതല ഭാഷ (machine language). അസ്സെംബ്ലി ഭാഷയിലും ഉന്നത തല ഭാഷയിലും എഴുതുന്ന പ്രോഗ്രാമുകൾ യന്ത്രഭാഷയിലേക്ക്‌ മാറ്റിയാലേ കമ്പ്യൂട്ടറിന് പ്രവത്തിപ്പിക്കാൻ പറ്റൂ. യന്ത്ര തല ഭാഷയും അസ്സെംബ്ലി ഭാഷയും ഓരോരോ കമ്പ്യൂട്ടർ ആർക്കിടെക്ചറിനും വ്യത്യസ്തമാണ്. അതായത്‌ ഒരു കമ്പ്യൂട്ടറിനായി ഉണ്ടാക്കുന്ന യന്ത്രഭാഷാ പ്രോഗ്രാമുകൾ മറ്റൊരു കമ്പ്യൂട്ടർ ശ്രേണിയിൽ പ്രവർത്തിക്കണമെന്നില്ല. മിക്ക കമ്പ്യൂട്ടറുകൾക്കും, പ്രോഗ്രാമുകൾ പ്രവർത്തിപ്പിക്കുന്നതിനായി കമ്പ്യൂട്ടർ റീഡ് ചെയ്യുകയും പിന്തുടരുകയും ചെയ്യുന്ന ബൈനറി നമ്പറുകളുടെ (0, 1) ഒരു ശ്രേണിയാണിത്.

ബിറ്റുകൾ അഥവാ ദ്വയാങ്കസംഖ്യകളുടെ ശ്രേണി ആയാണ് യന്ത്രഭാഷാ നിർദ്ദേശങ്ങൾ നൽകുന്നത്‌. മെഷീൻ കോഡ് എന്നത് കർശന വ്യവസ്ഥയുള്ള സംഖ്യാപരമായ ഭാഷയാണ്, അത് കഴിയുന്നത്ര വേഗത്തിൽ പ്രവർത്തിക്കാൻ രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നു, ഇത് ഒരു കംപൈൽ ചെയ്‌തതോ അസംബിൾ ചെയ്‌തതോ ആയ കമ്പ്യൂട്ടർ പ്രോഗ്രാമിന്റെ ഏറ്റവും താഴ്ന്ന നിലയിലുള്ള പ്രാതിനിധ്യം അല്ലെങ്കിൽ പ്രിമിറ്റീവും ഹാർഡ് വെയറിനെ ആശ്രയിക്കുന്ന പ്രോഗ്രാമിംഗ് ഭാഷയായി കണക്കാക്കാം. മെഷീൻ കോഡിൽ പ്രോഗ്രാമുകൾ നേരിട്ട് എഴുതാൻ കഴിയുമെങ്കിലും, വ്യക്തിഗത ബിറ്റുകൾ കൈകാര്യം ചെയ്യുന്നതും സംഖ്യാ വിലാസങ്ങളും സ്ഥിരാങ്കങ്ങളും സ്വമേധയാ കണക്കാക്കുന്നതും മടുപ്പിക്കുന്നതും പിശകുകൾ പറ്റാൻ സാധ്യതയുള്ളതുമാണ്. ഇക്കാരണത്താൽ, ആധുനിക സന്ദർഭങ്ങളിൽ ഇത്തരം പ്രോഗ്രാമുകൾ വളരെ അപൂർവമായി മാത്രമേ മെഷീൻ കോഡിൽ നേരിട്ട് എഴുതിയിട്ടുള്ളൂ, എന്നാൽ താഴ്ന്ന നിലയിലുള്ള ഡീബഗ്ഗിംഗ്, പ്രോഗ്രാം പാച്ചിംഗ് (പ്രത്യേകിച്ച് അസംബ്ലർ സോഴ്സ് ലഭ്യമല്ലാത്തപ്പോൾ), അസംബ്ലി ഭാഷ ഡിസ്അസംബ്ലിംഗ് എന്നിവയ്ക്കായി ചെയ്യുന്നു. കമ്പ്യൂട്ടറിൻ്റെ സിപിയുവിന്  നേരിട്ട് നടപ്പിലാക്കാൻ കഴിയുന്ന ലളിതമായ നിർദ്ദേശങ്ങളുടെ ഒരു പരമ്പരയാണ് മെഷീൻ കോഡ് പ്രോഗ്രാം. ഈ നിർദ്ദേശങ്ങളിൽ ചില ഡാറ്റയും ഉൾപ്പെടുത്താം.

ഇന്നത്തെ ഭൂരിഭാഗം പ്രായോഗിക പ്രോഗ്രാമുകളും ഉയർന്ന തലത്തിലുള്ള ഭാഷകളിലോ അസംബ്ലി ഭാഷയിലോ ആണ് എഴുതിയിരിക്കുന്നത്. കംപൈലറുകൾ, അസംബ്ലറുകൾ, ലിങ്കറുകൾ തുടങ്ങിയ യൂട്ടിലിറ്റികൾ ഉപയോഗിച്ച് സോഴ്സ് കോഡ് എക്സിക്യൂട്ടബിൾ മെഷീൻ കോഡിലേക്ക് വിവർത്തനം ചെയ്യപ്പെടുന്നു, മെഷീൻ കോഡിലേക്ക് വിവർത്തനം ചെയ്യപ്പെടാത്ത, ഇന്റർപ്രെട്ടർ പ്രോഗ്രാമുകൾ ഒഴികെ, സോഴ്‌സ് കോഡിന്റെ നിർദ്ദേശങ്ങൾ നടപ്പിലാക്കുന്ന ഒരു എക്‌സിക്യൂട്ടർ അല്ലെങ്കിൽ പ്രൊസസറായി കാണാവുന്ന ഇന്റർപ്രെട്ടർ, സാധാരണയായി നേരിട്ട് എക്‌സിക്യൂട്ടബിൾ മെഷീൻ കോഡ് (അസംബ്ലിയിൽ നിന്നോ ഉയർന്ന തലത്തിലുള്ള ഭാഷാ സോഴ്‌സ് കോഡിൽ നിന്നോ സൃഷ്ടിച്ചത്) ആയി മാറ്റുന്നു. ഓരോ മെഷീൻ കോഡും സിപിയുവിനോട് ഡാറ്റ ലോഡുചെയ്യുകയോ സംഭരിക്കുകയോ ചെയ്യാൻ നിർദ്ദേശിക്കുന്നു, പ്രോഗ്രാമിൻ്റെ മറ്റൊരു ഭാഗത്തേക്ക് നീങ്ങുക, അല്ലെങ്കിൽ ഒരു കണക്കുകൂട്ടൽ നടത്തുക എന്നിങ്ങനെയുള്ള ഒരു പ്രത്യേക ജോലി ചെയ്യാൻ പറയുന്നു. സിപിയു രജിസ്റ്ററുകളിലോ മെമ്മറിയിലോ സംഭരിച്ചിരിക്കുന്ന ഡാറ്റ കൈകാര്യം ചെയ്യുന്നത് ഈ ടാസ്‌ക്കുകളിൽ ഉൾപ്പെടുന്നു.

ആദ്യകാല സിപിയുകൾക്ക് അവരുടേതായ യുണീക് മെഷീൻ കോഡ് ഉണ്ടായിരുന്നു, ഓരോ പുതിയ സിപിയു പതിപ്പിനും വ്യത്യസ്ത നിർദ്ദേശങ്ങൾ ഉണ്ടായിരിക്കാം. ഇത് പലപ്പോഴും പഴയ സിപിയുകൾക്കായി എഴുതിയ പ്രോഗ്രാമുകൾ പുതിയവയിൽ പ്രവർത്തിക്കില്ല എന്നാണ് അർത്ഥമാക്കുന്നത്. ഇൻസ്ട്രക്ഷൻ സെറ്റ് ആർക്കിടെക്ചർ (ISA) ഒരു സിപിയു നിർദ്ദേശങ്ങൾ എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്നും മെമ്മറിയിൽ എങ്ങനെ സംഭരിക്കുന്നുവെന്നും നിർവചിക്കുന്ന ഒരു ഡിസൈനാണ്, എന്നാൽ സിപിയു എങ്ങനെ നിർമ്മിക്കപ്പെടുന്നുവെന്ന് ഇത് വ്യക്തമാക്കുന്നില്ല. ഐഎസ്എ ഒരു സ്റ്റാൻഡേർഡായി വർത്തിക്കുന്നു, ഒരേ കുടുംബത്തിലെ വ്യത്യസ്ത സിപിയുകളിൽ ഒരേ മെഷീൻ കോഡ് പ്രവർത്തിപ്പിക്കാൻ അനുവദിക്കുന്നു.

മെഷീൻ കോഡ് എന്നത് നിർവചനം അനുസരിച്ച് പ്രോഗ്രാമർക്ക് ദൃശ്യമാകുന്ന പ്രോഗ്രാമിംഗ് വിശദാംശങ്ങളുടെ ഏറ്റവും നിമ്ന തലത്തിലുള്ളതിനെയാണ്, എന്നാൽ ആന്തരികമായി പല പ്രൊസസറുകളും മൈക്രോകോഡ് ഉപയോഗിക്കുന്നു അല്ലെങ്കിൽ മെഷീൻ കോഡ് നിർദ്ദേശങ്ങൾ ഒപ്റ്റിമൈസ് ചെയ്ത് മൈക്രോ ഓപ്പുകളുടെ ശ്രേണികളാക്കി മാറ്റുന്നു. ഇത് സാധാരണയായി ഒരു മെഷീൻ കോഡായി കണക്കാക്കില്ല.
ഇൻസ്ട്രക്ഷൻ സെറ്റ്
ഓരോ പ്രോസസറിനും പ്രൊസസർ കുടുംബത്തിനും അതിന്റേതായ ഇൻസ്ട്രക്ഷൻ സെറ്റ് ഉണ്ട്. ഈ നിർദ്ദേശങ്ങൾ പ്രോസസറോട് എന്തുചെയ്യണമെന്ന് പറയുന്ന സംഖ്യകളുടെ അല്ലെങ്കിൽ പ്രതീകങ്ങളുടെ നിർദ്ദിഷ്ട പാറ്റേണുകൾ കൊണ്ട് നിർമ്മിച്ച ലളിതമായ കമാൻഡുകളാണ്. ഒരേ അടിസ്ഥാന രൂപകല്പന ഉപയോഗിക്കുന്ന ഒരു തരം പ്രൊസസറിന് മാത്രമുള്ളതാണ് ഇൻസ്ട്രക്ഷൻ സെറ്റ്. ഒരേ കുടുംബത്തിലെ പുതിയ പ്രോസസ്സറുകൾ പലപ്പോഴും പഴയ നിർദ്ദേശങ്ങൾ നിലനിർത്തുകയും പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിനോ പുതിയ ഫീച്ചറുകൾ ചേർക്കുന്നതിനോ പുതിയവ ചേർക്കുന്നു. ചിലപ്പോൾ, ഒരു പുതിയ പ്രോസസർ ഡിസൈൻ പുതിയ ഫീച്ചറുകൾക്കായി ചില നിർദ്ദേശങ്ങൾ മാറ്റുകയോ നീക്കം ചെയ്യുകയോ ചെയ്യും, ഇത് പഴയ പ്രോഗ്രാമുകൾ പൊരുത്തപ്പെടാത്തതാക്കും. പ്രൊസസറുകൾ കൂടുതലും അനുയോജ്യമാണെങ്കിലും, ചില നിർദ്ദേശങ്ങൾ അവ കൈകാര്യം ചെയ്യുന്ന വിധത്തിൽ ചെറിയ വ്യത്യാസങ്ങൾ ഉണ്ടാകാം. മെമ്മറി എങ്ങനെ സജ്ജീകരിച്ചിരിക്കുന്നു, ഓപ്പറേറ്റിംഗ് സിസ്റ്റം അല്ലെങ്കിൽ കണക്റ്റുചെയ്‌ത ഉപകരണങ്ങൾ എന്നിവ പോലെയുള്ള മറ്റ് ഘടകങ്ങളും വ്യത്യാസപ്പെടാം. ഈ വ്യത്യാസങ്ങൾ കാരണം, ഒരേ തരത്തിലുള്ള പ്രോസസ്സർ ഉപയോഗിച്ചാലും ഒരേ പ്രോഗ്രാം വ്യത്യസ്ത സിസ്റ്റങ്ങളിൽ പ്രവർത്തിക്കില്ല.

പ്രോസസറിനുള്ള നിർദ്ദേശങ്ങൾ അവ എങ്ങനെ രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നു എന്നതിനെ ആശ്രയിച്ച് ഹ്രസ്വമോ ദീർഘമോ ആകാം. ഓരോ നിർദ്ദേശവും പ്രോസസറോട് നമ്പറുകൾ ചേർക്കുന്നതോ പ്രോഗ്രാമിൻ്റെ മറ്റൊരു ഭാഗത്തേക്ക് നീങ്ങുന്നതുപോലെ എന്ത് നടപടിയാണ് സ്വീകരിക്കേണ്ടതെന്ന് പറയുന്നു. നിർദ്ദേശങ്ങളിൽ ഓപ്‌കോഡ് എന്നൊരു ഭാഗം ഉണ്ട്, അത് ഏത് തരത്തിലുള്ള പ്രവർത്തനമാണ് ചെയ്യേണ്ടതെന്ന് പറയുന്നു. അവ ഉപയോഗിക്കേണ്ട ഡാറ്റയെ കുറിച്ചുള്ള വിശദാംശങ്ങളും ആ ഡാറ്റ എവിടെ കണ്ടെത്താം അല്ലെങ്കിൽ യഥാർത്ഥ ഡാറ്റയെപ്പോലും ഉൾപ്പെടുത്തിയേക്കാം.

അവലംബം
വിഭാഗം:പ്രോഗ്രാമിങ് ഭാഷകൾ