கணினிக்கு உகந்த மொழியில் இரண்டே சொற்கள்.

Saturday, August 16, 2014


கணினியின் அனைத்து செயல்பாடுகளுக்கும்  அடிப்படை இரண்டே எண்கள் 0-ம் 1-ம் ஆகும். கணினியில் பயனுரும், எண்ணென்ப ஏனை எழுத்தென்ப, மற்றும் பார்க்கும் படமென்ப, கேட்கும் ஒலியென்பவை அனைத்தும் இந்த இரண்டு எண்களை மட்டுமே கொண்டு செயல்படுகின்றன.

கணினியின் ஆதாரமான மைக்ரோ புராசசரை 1984ல் ஆல்பர்ட் பால் மால்வினோ எழுதிய ‘டிஜிட்டல் கம்ப்யூட்டர் எலெக்ட்ரானிக்ஸ்’புத்தகத்தின் மூலமாகக்கற்றுக்கொண்டேன். அதில் ஒரு சுவிச்சை தட்டி இருந்தால் 1 - தட்டாமல் இருந்தால் 0 என்று சிறுபிள்ளைக்கு பாடம் நடத்துவதுபோல் துவங்கி,இடையில் உதிரிப்பாகங்களைக் கொண்டு செய்த மிக எளியக் கணினி ஒன்றின் வடிவமைப்பைக் கொடுத்து இருந்தார். அதற்கு ’இயன்ற அளவு எளிய’ என்ற பொருளில்  SAP (Simple As Possible) என்று பெயர்.

அதை ஒருவர் செய்து இயக்குவதை கீழே காணலாம். அதைப் பார்க்கும் முன் கணினி இயங்கும் முறையைப்பற்றி சிறு விளக்கம்:
கணினி செய்யவேண்டிய கட்டளைகளை முதலில் ஓரிடத்தில் பதிவு செய்யவேண்டும். அதன் பின்னர்தான் பதிந்த கட்டளைகளை செயல்படுத்த அதைப் பணிக்க முடியும்.

இந்தக் கணினியில் மொத்தம் 16 இடங்கள் உள்ளன. அவற்றை A0, A1, A2, A3 ஆகிய நான்கு சுவிச்சுகளை வைத்து நான்கு இலக்க இரும (binary) எண்களால் குறிக்கிறோம். எல்லா சுவிச்சுகளும் தட்டி இருந்தால் (மேல் நோக்கி) இரும எண்  1111 = தசம எண் 15ஆம் இடத்தைக் குறிக்கும். எல்லா சுவிச்சுகளும் கீழே இருந்தால் இடம் 0.

ஒவ்வொரு இடத்திலும், ஒரு எட்டு இலக்க இரும எண்ணைப் பதிவு செய்ய முடியும். வேறொரு முறையில் சொல்வதானால் இந்த கணினியின் கொள்ளளவு 16 வரிசை 8 புள்ளிகள், அவ்வளவே. அந்த எட்டு இலக்க இரும எண்கள் 0 முதல் 255 வரை ஆகும். அவற்றை முறையே 0000 0000ம், 1111 1111ம் குறிக்கும். இந்த எண்களை பதிய எட்டு சுவிச்சுகள் D0 - D7 உள்ளன.

இந்தக் கணினியின் நிரல் மொழி, எடு, கூட்டு, கழி என்ற வெகுசில கட்டளைகளை மட்டுமே கொண்டுள்ளது. அந்தக் கட்டளைகளும் எட்டு இலக்கங்களால் 0ம் 1ம் மட்டுமே கொண்டு குறிக்கப்படுகின்றன. இப்படிக் குறிப்பது கடினமாகையால், அந்த கட்டளைகளுக்கு நிகரான ஆங்கிலச் சொல்லின் சுறுக்கத்தை மனனச்சொல்லாக (mnemonic) பயன் படுத்துகிறோம்.

எட்டு இலக்கங்களுள் மேல் நான்கு இலக்கங்கள் (D4-D7)கட்டளையைக் குறிக்கவும், கீழ் நான்கு இலக்கங்கள் (D0-D3) எடுத்துக்கொள்ளவேண்டிய எண்கள் இருக்கும் இடத்தைக் குறிக்கவும் பயன்படுத்தப்படுகின்றன.

குறியீடு - கட்டளை
0000 - எடு LDA
0001 - கூட்டு ADD
0010 - கழி SUB
1110 - வெளியிடு OUT
0111 - நில் HLT

 எடு, கூட்டு, கழி ஆகியக் கட்டளைகள் எடுத்துக்கொள்ளவேண்டிய எண்கள் இருக்கும் இடத்தைச் சொல்ல கீழ் நான்கு இலக்கங்களை பயன் படுத்துகின்றன. மற்றக்கட்டளைகள் அந்த இலக்கங்களைப் பொருட்படுத்துவதில்லை.

உ.ம்:
0000 1010 - என்பது இடம் 1010 (10 தசம)ல்  உள்ள எண்ணை எடுத்துக்கொள் என்றக் கட்டளையாகும்.
0001 1011 - என்பது இடம் 1011 (11 தசம)ல் உள்ள எண்ணை முன்பு எடுத்துக்கொண்டுள்ள எண்ணுடன் கூட்டு என்றக் கட்டளையாகும்.

இந்தப் படத்தில் கீழ்க்காணும் நிரலை கணினியில் நிறுவி ஓட்டுவதைப் பார்க்கலாம்.

இடம் - மனனம் - குறியீடு - எண் இருப்பிடம் ; விளக்கம்
 0 0000 - LDA - 0000 - 1010 ; 65ஐ எடு
 1 0001 - ADD - 0001 - 1011 ; 47ஐ கூட்டு
 2 0010 - SUB - 0010 - 1100 ; 24ஐ கழி
 3 0011 - ADD - 0001 - 1101 ; 3ஐ கூட்டு
 4 0100 - ADD - 0001 - 1110 ; 16ஐ கூட்டு
 5 0101 - ADD - 0001 - 1111 ; 7ஐ கூட்டு
 6 0110 - OUT - 1110 - இல்லை; விடையை காண்பி
 7 0111 - HLT - 1111         ; நில்

எண் இருப்பிடம் - எண் (இரும) - தசம
10 1010 - 0100 0001 - 65
11 1011 - 0010 1111 - 47
12 1100 - 0001 1000 - 24
13 1101 - 0000 0011 - 3
14 1110 - 0001 0000 - 16
15 1111 - 0000 0111 - 7

விடை: 65+47-24+3+16+7 = 114(தசம) = 01110010(இரும)




இந்த விளக்கங்கள் முழுமையாகப் புரியாவிட்டாலும், கணினியின் கட்டளைகள் எளியவை என்றும் அவைகளைக்குறிக்க எண்களே பயன்படுகின்றன என்பதும் மட்டுமாவது புரியும் என்று நம்புகிறேன்.

முதலில் நிரலிகள் இப்படி மனனக்குறியீடுகளில் எழுதப்பட்டு, அவற்றை சுவிச்சுகள் மூலமோ, 0ம் 1ம் குறிக்க அட்டைகளில் துளையிட்டு, அந்த அட்டைகளை  செலுத்தியோ கணினியில் நிறுவப்பட்டன. பின்பு மனனக்குறியீடுகளில் நேரடியாக தட்டச்சப்பட்டு, அதை எண்களாக கணினிமூலமாகவே மாற்றியபின் ஓட வைக்கப்பட்டன. இப்படி மனனக்குறியீடில் எழுதும் மொழி ‘அசெம்ப்ளி’ (assembly) மொழி என்று காரணப் பெயர் பெற்றது.

அசெம்ப்ளி ஓவ்வொருவகைக் கணினி கட்டமைப்புக்கு ஏற்றார்ப்போல் மாறுபடும். உதாரணமாக இன்டெல் நிறுவனத்தின் 8085 மைக்ரோ புராசசரால் ஆனக் கணினியின் மனனக்குறியீடுகள் 8, 16 மற்றும் 24 இரும இலக்கங்கள் கொண்டவை. இதனால் ஒரு வகை கணினிக்கு அசெம்ப்ளியில் எழுதும் நிரல் மற்றொன்றில் வேலை செய்யாது.

பின்னர் நிரல்கள் பேச்சு மொழி சொற்களால் ஆன நிரல்மொழிகளில் எழுதப்பட்டு அம்மொழிகளில் இருந்து கணினியின் கட்டளைகளாக மாற்றியபின் ஓடுமாறு செய்யப்பட்டது. பொதுவாக இம்மொழிகளில் எழுதப்பட்ட ஒரு நிரலைப் பலவகைக் கணினிகளில் ஓட்ட முடியும். இத்தகைய நிரல் மொழிகளில் முதன்மையான 20 மொழிகள், மொத்ததில் 70 சதவீத நிரல்களை எழுதப் பயன்படுத்தப்படுகின்றன. இவற்றுள் ’சி’ முதலிடமும் (16%), ’ஜாவா’ இரண்டாமிடமும் (15%) வகிக்கின்றன. பயன்பாட்டு விகிதங்கள் வரிசையில் முதல் 50 மொழிகள் இங்கே அட்டவணையாக்கப்பட்டுள்ளன.

இப்படி பேச்சு மொழி சொற்களில் எழுதப்படும் நிரல் மொழிகளும், கட்டமைப்பு மொழிகள் (structural), பொருள்  சார்ந்த மொழிகள்(object oriented), வினை சார்ந்த மொழிகள் (functional) என்று படிப்படியாக முன்னேற்றம் அடைந்துள்ளன. கடந்த இருபது வருடங்களாக சி++, ஜாவா போன்ற பொருள் சார்ந்த மொழிகள் பெரும்பான்மையாக புழங்கப்பட்டன.

இப்போது ஸ்காலா போன்ற வினை சார்ந்த மொழிகள் புகழ்பெற்று வருகின்றன. என் கணிப்பில் அடுத்த பத்தாண்டு காலங்களுக்கு வினை சார்ந்த மொழிகள் பெருமளவில் பயன்படுத்தப்படும். மதவாதிகள் அவ்வப்போது பெருமையுடன் விளங்கும் கண்டுபிடிப்புக்களைத் தம்மதங்கள் ஆதிகாலம் தொட்டு அறிந்திருந்தன என்று பரப்புரை செய்வதில் வல்லவர்கள். அதைத்தொட்டே சமசுக்கிருதம் பொருள் சார்ந்த நிரல் மொழிபோன்றது என்ற  மொட்டைத்தலைக்கும் முழங்காலுக்கும் முடிச்சு போடும் விளக்கங்கள் தரப்படுகின்றன. இனிமேல் அது வினை சார்ந்த மொழியாகும் என்று வியாக்கியானம் செய்யவேண்டி இருக்கும்.

எது எப்படி அயினும், எல்லா நிரல் மொழிகளும் , கணினிக்கு உகந்த குறியீடாக மாறும்போது, அதில் உள்ளவை  இரண்டே சொற்கள்தான், அவை உண்டு(1), இல்லை(0).