അസെംബ്ലി ഭാഷ

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

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

അസംബ്ലർ (നോ: അസംബ്ലർ) എന്ന സോഫ്റ്റ്‌വെയറാണ് അസംബ്ളി ഭാഷാ കോഡുകളെ മെഷീൻ ഭാഷയിലേക്ക് വിവർത്തനം ചെയ്യുന്നത്. നേരിട്ടുള്ള ഹാർഡ് വെയർ ക്രിയകൾക്കാണ് ഇന്ന് പ്രധാനമായും അസംബ്ളി ഭാഷ ഉപയോഗിക്കുന്നത്. ഡിവൈസ് ഡ്രൈവറുകളിലും എംബഡഡ് സംവിധാനങ്ങ ളിലും റിയൽ ടൈം സംവിധാനങ്ങളിലും അസംബ്ലി ഭാഷ ഉപയോഗിക്കാറുണ്ട്. 

കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകൾ നിർമ്മിക്കാൻ, അസ്സെംബ്ലി ഭാഷ, മുൻ കാലങ്ങളിൽ വ്യാപകമായി ഉപയോഗിക്കപ്പെട്ടിരുന്നു. എന്നാൽ കൂടുതൽ സരളമായ ഉന്നത തല ഭാഷകളുടെ ആവിർഭാവത്തോടു കൂടി ഈ ഭാഷയുടെ ഉപയോഗം കമ്പ്യൂട്ടർ ഹാർഡ്‌വെയറിനെ നേരിട്ട്‌ നിയന്ത്രിക്കേണ്ടുന്ന പ്രോഗ്രാമുകളുടെ നിർമ്മാണത്തിൽ മാത്രമായി ഒതുങ്ങി. ഉന്നത തല ഭാഷകളേക്കാൾ വേഗത്തിൽ ഓടുമെന്നതാണ് അസെംബ്ലി ഭാഷയിലെഴുതപ്പെട്ടിട്ടുള്ള പ്രോഗ്രാമുകളുടെ ഗുണം. സി പോലുള്ള ഉന്നത തല ഭാഷകൾ അസെംബ്ലിയിലെഴുതിയ പ്രോഗ്രാമുകൾ ഉൾപ്പെടുത്താൻ സ്വന്തമായ വഴികൾ നൽകുന്നുണ്ട്.

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

അസംബ്ലി മെഷീൻ കോഡ് നിർദ്ദേശങ്ങളെ ആശ്രയിച്ചിരിക്കുന്നതിനാൽ, ഓരോ അസംബ്ലി ഭാഷയും കമ്പ്യൂട്ടർ ആർക്കിടെക്ചറിന് അനുയോജ്യമായ രീതിലുള്ളതാണ്. (NB. System calls often vary, e.g. for MVS vs. VSE vs. VM/CMS; the binary/executable formats for different operating systems may also vary.)

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

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

ഇന്ന്, ഉയർന്ന തലത്തിലുള്ള ഭാഷയിൽ നടപ്പിലാക്കിയ വലിയ സിസ്റ്റങ്ങൾക്കുള്ളിൽ ചെറിയ അളവിലുള്ള അസംബ്ലി ഭാഷാ കോഡ്, പ്രകടന കാരണങ്ങളാൽ അല്ലെങ്കിൽ ഉയർന്ന തലത്തിലുള്ള ഭാഷ പിന്തുണയ്‌ക്കാത്ത തലത്തിൽ ഹാർഡ്‌വെയറുമായി നേരിട്ട് സംവദിക്കുന്നതിനായി ഉപയോഗിക്കുന്നു. ഉദാഹരണത്തിന്, ലിനക്സ് കേർണൽ സോഴ്സ് കോഡിന്റെ 4.9 പതിപ്പിന്റെ 2% ത്തിൽ താഴെ മാത്രമേ അസംബ്ലിയിൽ എഴുതിയിട്ടുള്ളൂ; 97% ൽ കൂടുതൽ എഴുതിയിരിക്കുന്നത് സിയിലാണ്.
അസംബ്ലി ഭാഷായുടെ വാക്യഘടന
അസംബ്ലി ഭാഷ പ്രതിനിധീകരിക്കാൻ നിമോണിക്സ്(mnemonic) ഉപയോഗിക്കുന്നു, ഉദാ., ഓരോ ലോ-ലെവൽ മെഷീൻ ഇൻസ്ട്രക്ഷൻ അല്ലെങ്കിൽ ഒപ്‌കോഡ്, ഓരോ ഡയറക്‌ടീവിനും, സാധാരണയായി ഓരോ ആർക്കിടെക്ചറൽ രജിസ്‌റ്റർ, ഫ്ലാഗ് മുതലായവ ഉണ്ടാകും. ചില നിമോണിക്സുകൾ സ്വയം നിർമ്മിക്കുകയും ചിലത് ഉപയോക്താവ് തന്നെ നിർവചിക്കുകയും ചെയ്‌തേക്കാം. ഒരു സമ്പൂർണ്ണ നിർദ്ദേശം നൽകുന്നതിന് പല പ്രവർത്തനങ്ങൾക്കും ഒന്നോ അതിലധികമോ ഓപ്പറാൻസ്(operands) ആവശ്യമാണ്. മിക്ക അസംബ്ലേഴ്സും പ്രോഗ്രാമുകൾക്കും മെമ്മറി ലൊക്കേഷനുകൾക്കുമായി സ്ഥിരാങ്കങ്ങൾ, രജിസ്റ്ററുകൾ, ലേബലുകൾ എന്നിവ അനുവദിക്കുന്നു, കൂടാതെ ഓപ്പറണ്ടുകൾക്കുള്ള എക്സ്പ്രഷനുകൾ കണക്കാക്കാനും കഴിയും. അങ്ങനെ, പ്രോഗ്രാമർമാർ മടുപ്പിക്കുന്ന ആവർത്തന കണക്കുകൂട്ടലുകളിൽ നിന്ന് സ്വതന്ത്രരാകുന്നു, കൂടാതെ അസംബ്ലർ പ്രോഗ്രാമുകൾ മെഷീൻ കോഡിനേക്കാൾ മികച്ച രീതിയിൽ വായിക്കാൻ കഴിയുന്നവയാണ്. ആർക്കിടെക്ചറിനെ ആശ്രയിച്ച്, ഈ ഘടകങ്ങളെ നിർദ്ദിഷ്ട നിർദ്ദേശങ്ങൾക്കോ ​​ഓഫ്സെറ്റുകളോ മറ്റ് ഡാറ്റയോ നിശ്ചിത അഡ്രസ്സുകളോ ഉപയോഗിച്ച് അഡ്രസ്സ് മോഡുകൾക്കായി സംയോജിപ്പിക്കാൻ കഴിയും. പല അസംബ്ലറുകളും പ്രോഗ്രാം വികസനം സുഗമമാക്കുന്നതിനും അസംബ്ലി പ്രക്രിയ നിയന്ത്രിക്കുന്നതിനും ഡീബഗ്ഗിംഗിനെ സഹായിക്കുന്നതിനും അധിക സംവിധാനങ്ങൾ വാഗ്ദാനം ചെയ്യുന്നു.
പുറത്തേക്കുള്ള കണ്ണികൾ
ഉദാഹരണങ്ങൾ

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