बेसिक असेंबली लैंग्वेज: Difference between revisions
Line 76: | Line 76: | ||
USING base,reg-1,...,reg-n | USING base,reg-1,...,reg-n | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===मशीन निर्देश ( | ===मशीन निर्देश (मनमोनिक)=== | ||
मशीन | मशीन अनुदेशों के साथ एक-से-एक संबंध होता है। पूर्ण स्मरणीय अनुदेश सेट प्रत्येक अनुदेश सेट के लिए संचालन के सिद्धांत<ref>{{cite manual | ||
| title = IBM System/360 Principles of Operation | | title = IBM System/360 Principles of Operation | ||
| id = A22-6821-0 | | id = A22-6821-0 | ||
Line 85: | Line 85: | ||
| accessdate = Dec 6, 2018 | | accessdate = Dec 6, 2018 | ||
}} | }} | ||
</ref> | </ref> मैनुअल में वर्णित है। उदाहरण: | ||
उदाहरण: | |||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
Line 101: | Line 100: | ||
BE THERE branch if equal to program label 'THERE' | BE THERE branch if equal to program label 'THERE' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
आम तौर पर स्वीकृत | आम तौर पर स्वीकृत मानकों में, हालांकि किसी भी तरह से अनिवार्य नहीं है, इसमें निमोनिक्स के साथ सामान्य-उद्देश्य रजिस्टरों की पहचान शामिल है। कुछ अन्य प्रणालियों, जैसे कि X86 असेंबली लैंग्वेज, के लिए असेंबलरों के विपरीत, रजिस्टर निमोनिक्स आरक्षित प्रतीक नहीं हैं, बल्कि प्रोग्राम में कहीं और EQU स्टेटमेंट के माध्यम से परिभाषित किए जाते हैं। यह असेंबलर भाषा प्रोग्राम की पठनीयता में सुधार करता है और रजिस्टर उपयोग का क्रॉस-रेफरेंस प्रदान करता है। इस प्रकार आमतौर पर आप एक असेंबलर प्रोग्राम में निम्नलिखित देख सकते हैं: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
Line 108: | Line 107: | ||
L R3,ZIGGY | L R3,ZIGGY | ||
</syntaxhighlight> | </syntaxhighlight> | ||
कुछ उल्लेखनीय | कॉल के लिए कुछ उल्लेखनीय अनुदेश निमोनिक्स <code>BALR</code>{{efn|Most uses of '''BALR''' have been replaced by <code title{{=}}"Branch And Save Register">BASR</code> and similar instructions.}} हैं, जो एक रजिस्टर में रिटर्न एड्रेस और कंडीशन कोड को संग्रहीत करते हैं, SVC,{{efn|Many uses of <code title{{=}}"SuperVisor Call">[[Supervisor Call instruction|SVC]]</code> have been replaced by a <code title{{=}}"Program Call">PC</code> instruction.}} DIAG,{{efn|VM repurposes <code title{{=}}"Diagnose">DIAG</code> as an <code title{{=}}"Hypervisor Call">[[Hypervisor|HVC]]</code> instruction.}} और ZAP।<ref name="opl_bobm" /> उत्तरार्द्ध ने छद्म नाम <code>WAMOZART</code> का उपयोग करके एक प्रोग्रामर द्वारा SuperZAP, cf. ''फ्री ऑन-लाइन'' ''कंप्यूटिंग'' शब्दकोश पर सुपरज़ैप उपयोगिता के नाम को प्रेरित किया था।<!-- Couldn't use <code> within {{efn}}. --> | ||
<!-- Couldn't use <code> within {{efn}}. --> | |||
सिस्टम/360 मशीन निर्देश एक, दो, या तीन | सिस्टम/360 मशीन निर्देश एक, दो, या तीन आधे शब्द लंबे (दो से 6 बाइट्स) हैं। मूल रूप से चार अनुदेश प्रारूप थे, जिन्हें ऑपरेशन कोड फ़ील्ड के पहले दो बिट्स द्वारा निर्दिष्ट किया गया था; ज़ेड/आर्किटेक्चर ने अतिरिक्त प्रारूप जोड़े। | ||
===मैक्रोज़ और सशर्त असेंबली=== | ===मैक्रोज़ और सशर्त असेंबली=== | ||
बेसिक | बेसिक असेम्बलर भाषा मैक्रोज़ का समर्थन नहीं करती. बाद के असेंबलर संस्करण प्रोग्रामर को निर्देशों को मैक्रोज़ में एक साथ समूहित करने और उन्हें एक लाइब्रेरी में जोड़ने की अनुमति देते हैं, जिसे बाद में अन्य कार्यक्रमों में लागू किया जा सकता है, आमतौर पर सी और संबंधित भाषाओं में प्रीप्रोसेसर सुविधाओं जैसे मापदंडों के साथ। मैक्रोज़ में सशर्त असेंबलर निर्देश शामिल हो सकते हैं, जैसे कि <code>AIF</code> (एक 'यदि' निर्माण), जिसका उपयोग चुने हुए मापदंडों के अनुसार अलग-अलग कोड उत्पन्न करने के लिए किया जाता है। यह इस असेंबलर की स्थूल सुविधा को बहुत शक्तिशाली बनाता है। जबकि C में मल्टीलाइन मैक्रोज़ एक अपवाद हैं, असेंबलर में मैक्रो परिभाषाएँ आसानी से सैकड़ों पंक्तियाँ हो सकती हैं। | ||
बाद के असेंबलर संस्करण प्रोग्रामर को निर्देशों को मैक्रोज़ में एक साथ समूहित करने और उन्हें लाइब्रेरी में जोड़ने की अनुमति देते हैं, जिसे बाद में अन्य | |||
===[[ऑपरेटिंग सिस्टम]] मैक्रोज़=== | ===[[ऑपरेटिंग सिस्टम]] मैक्रोज़=== | ||
अधिकांश प्रोग्रामों को ऑपरेटिंग सिस्टम से सेवाओं की आवश्यकता होगी, और | अधिकांश प्रोग्रामों को ऑपरेटिंग सिस्टम से सेवाओं की आवश्यकता होगी, और OS उन सेवाओं के अनुरोध के लिए मानक मैक्रोज़ प्रदान करता है। ये [[यूनिक्स]] [[सिस्टम कॉल]] के अनुरूप हैं। उदाहरण के लिए, [[एमवीएस]] (बाद में z/OS) में, स्टोरेज (OBTAIN पैरामीटर के साथ) गतिशील रूप से मेमोरी के एक ब्लॉक को आवंटित करता है, और GET एक फ़ाइल से अगले तार्किक रिकॉर्ड को पुनः प्राप्त करता है। | ||
ये मैक्रोज़ ऑपरेटिंग | ये मैक्रोज़ ऑपरेटिंग सिस्टम पर निर्भर हैं; कई उच्च स्तरीय भाषाओं के विपरीत, आईबीएम मेनफ्रेम असेंबली भाषाएं मेमोरी आवंटित करने, I/O संचालन करने आदि के लिए ऑपरेटिंग-सिस्टम-स्वतंत्र स्टेटमेंट या लाइब्रेरी प्रदान नहीं करती हैं, और विभिन्न IBM मेनफ़्रेम ऑपरेटिंग सिस्टम सिस्टम सेवा स्तर पर संगत नहीं हैं। उदाहरण के लिए, अनुक्रमिक फ़ाइल लिखने को z/OS और z/VSE में अलग-अलग तरीके से कोड किया जाएगा। | ||
==उदाहरण== | ==उदाहरण== | ||
निम्नलिखित अंश दिखाता है कि | निम्नलिखित अंश दिखाता है कि "If SEX = 'M' है, तो पुरुषों में 1 जोड़ें; अन्यथा, महिलाओं में 1 जोड़ें" असेंबलर में कैसे निष्पादित किया जाएगा। | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
Line 140: | Line 138: | ||
FEMALES DC F'0' Counter for FEMALES (initially=0) | FEMALES DC F'0' Counter for FEMALES (initially=0) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
निम्नलिखित सर्वव्यापी [[हैलो वर्ल्ड]] प्रोग्राम है, और आईबीएम ऑपरेटिंग सिस्टम जैसे | निम्नलिखित सर्वव्यापी [[हैलो वर्ल्ड]] प्रोग्राम है, और आईबीएम ऑपरेटिंग सिस्टम जैसे OS/VS1 या MVS के तहत निष्पादित करते हुए, ऑपरेटर के कंसोल पर 'हैलो वर्ल्ड' शब्द प्रदर्शित करेगा: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
Line 176: | Line 174: | ||
CALL 'HELLO' | CALL 'HELLO' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==संस्करण== | ==संस्करण== |
Revision as of 08:24, 9 August 2023
Paradigm | assembly language |
---|---|
Developer | IBM |
पहली प्रस्तुति | 1964 |
ओएस | IBM Basic Programming Support, Basic Operating System/360 |
लाइसेंस | free |
Paradigm | assembly language |
---|---|
Developer | IBM |
पहली प्रस्तुति | 1992 |
Stable release | Version 1 Release 6
|
ओएस | IBM MVS/ESA and successors, VM/ESA and successors, VSE/ESA and successors |
लाइसेंस | proprietary |
वेबसाइट | https://www.ibm.com/products/high-level-assembler-and-toolkit-feature |
Major implementations | |
High Level Assembler |
बेसिक असेंबली लैंग्वेज (BAL) एक अत्यंत प्रतिबंधित असेंबली लैंग्वेज है, जिसे 1964 में पेश किया गया था और इसका उपयोग IBM सिस्टम/360 मेनफ्रेम सिस्टम पर केवल 8 KB मुख्य मेमोरी के साथ किया जाता था, और इनपुट/आउटपुट के लिए केवल एक कार्ड रीडर, एक कार्ड पंच और एक प्रिंटर आईबीएम बेसिक प्रोग्रामिंग सपोर्ट (BPS/360) के भाग के रूप में होता था। BAL के लिए बेसिक असेंबलर बेसिक ऑपरेटिंग सिस्टम/360 (BOS/360) के भाग के रूप में भी उपलब्ध था।
कुछ लोगों ने अन्य असेंबलर भाषाओं को संदर्भित करने के लिए BAL शब्द का उपयोग किया, ठीक उसी तरह जैसे उन्होंने सामान्य उत्पादों को संदर्भित करने के लिए कोडक और ज़ेरॉक्स जैसे ट्रेडमार्क शब्दों का उपयोग किया; यह प्रथा ख़त्म हो गई है.
IBM Z के माध्यम से सिस्टम/360 के लिए अन्य ऑपरेटिंग सिस्टम पर असेंबलर, स्पेरी कॉर्पोरेशन द्वारा बनाए गए UNIVAC सीरीज 90 मेनफ्रेम के लिए, और वर्तमान में फुजित्सु द्वारा बनाए गए BS2000 मेनफ्रेम के लिए, इसके सिंटैक्स को विरासत में मिला और बढ़ाया। नवीनतम व्युत्पन्न भाषा को IBM हाई-लेवल असेंबलर (HLASM) के रूप में जाना जाता है। असेंबलरों के इस परिवार का उपयोग करने वाले प्रोग्रामर उन्हें ALC, (असेंबली भाषा कोडिंग के लिए), या बस "असेंबलर" के रूप में भी संदर्भित करते हैं।
सामान्य विशेषताएँ
चूँकि यह एक असेंबली भाषा है, BAL IBM मेनफ्रेम आर्किटेक्चर के मूल निर्देश सेट का उपयोग करता है, जिसमें System/360, System/370, System/370-XA, ESA/370, ESA/390, और z/आर्किटेक्चर शामिल हैं।
मशीन निर्देशों की सरलता का अर्थ है कि असेंबलर में लिखे गए प्रोग्राम का स्रोत कोड आमतौर पर COBOL या फोरट्रान के समकक्ष प्रोग्राम की तुलना में अधिक लंबा होगा। अतीत में, हाथ से कोडित असेंबलर कार्यक्रमों की गति को अक्सर इस कमी को पूरा करने के लिए महसूस किया जाता था, लेकिन ऑप्टिमाइज़िंग कंपाइलर, मेनफ्रेम के लिए C और अन्य अग्रिमों के आगमन के साथ, असेंबलर ने अपनी बहुत सारी अपील खो दी है। हालाँकि, आईबीएम असेंबलर को अपग्रेड करना जारी रखता है, और इसका उपयोग अभी भी तब किया जाता है जब गति या बहुत अच्छे नियंत्रण की आवश्यकता सर्वोपरि होती है। हालाँकि, BAL के सभी आईबीएम उत्तराधिकारियों में एक परिष्कृत मैक्रो सुविधा शामिल है जो बहुत अधिक कॉम्पैक्ट स्रोत कोड लिखने की अनुमति देती है।
असेंबलर का उपयोग करने का दूसरा कारण यह है कि सभी ऑपरेटिंग सिस्टम फ़ंक्शंस को उच्च-स्तरीय भाषाओं में एक्सेस नहीं किया जा सकता है। मेनफ्रेम ऑपरेटिंग सिस्टम के एप्लिकेशन प्रोग्राम इंटरफ़ेस को असेंबली भाषा "मैक्रो" निर्देशों के एक सेट के रूप में परिभाषित किया गया है, जो आम तौर पर सुपरवाइज़र कॉल (एसवीसी) को आमंत्रित करता है [उदाहरण के लिए, z/OS पर] या ऑपरेटिंग सिस्टम रूटीन को लागू करने के लिए डायग्नोज़ (DIAG) [उदाहरण के लिए, z/VM] निर्देश। असेंबलर सबरूटीन्स के उपयोग द्वारा उच्च-स्तरीय भाषाओं में लिखे गए प्रोग्रामों से ऑपरेटिंग सिस्टम सेवाओं का उपयोग करना संभव है।
असेंबलर स्टेटमेंट फॉर्मेट
असेंबलर भाषा स्टेटमेंट का प्रारूप 80-कॉलम वाले पंच कार्ड के लेआउट को दर्शाता है, हालांकि क्रमिक संस्करणों ने अधिकांश प्रतिबंधों में ढील दी है।
वैकल्पिक स्टेटमेंट लेबल या नाम एक स्ट्रिंग अल्फ़ान्यूमेरिक वर्ण है जो कॉलम 1 से शुरू होता है। पहला वर्ण वर्णानुक्रमिक होना चाहिए। बाद के संस्करणों ने लेबल में उपयोग किए गए कानूनी वर्णों में @, #, $ और _ जोड़े, और आकार को शुरुआती छह से बढ़ाकर आठ वर्णों तक, फिर लगभग असीमित लंबाई तक बढ़ा दिया।
- वैकल्पिक स्टेटमेंट लेबल या नाम एक स्ट्रिंग अल्फ़ान्यूमेरिक वर्ण है जो कॉलम 1 से शुरू होता है। पहला वर्ण वर्णानुक्रमिक होना चाहिए। बाद के संस्करणों ने लेबल में उपयोग किए गए कानूनी वर्णों में @, #, $ और _ जोड़े, और आकार को शुरुआती छह से बढ़ाकर आठ वर्णों तक, फिर लगभग असीमित लंबाई तक बढ़ा दिया।
- ऑपरेशन कोड या निमोनिक कॉलम 1 के दाईं ओर किसी भी कॉलम में शुरू हो सकता है, जिसे स्टेटमेंट लेबल से एक रिक्त स्थान से अलग किया गया है। ऑपरेशन कोड केवल एक मशीन निर्देश होगा (मैक्रोज़ उपलब्ध नहीं थे), जिससे यह आमतौर पर 1, 2, 3, या शायद ही कभी 4 अक्षर बन जाता है। ऑपरेशन कोड को आठ वर्णों तक, फिर बाद में प्रभावी रूप से असीमित लंबाई तक बढ़ाने के लिए बढ़ाया गया था।
- ऑपरेंड फ़ील्ड ऑपरेशन कोड के दाईं ओर किसी भी कॉलम में शुरू हो सकता है, जो ऑपरेशन कोड से कम से कम एक रिक्त स्थान से अलग होता है। वर्ण स्थिरांक को छोड़कर ऑपरेंड में रिक्त स्थान अमान्य हैं। एक या अधिक ऑपरेंड से युक्त ऑपरेंड फ़ील्ड, ऑपरेशन कोड के आधार पर वैकल्पिक है।
- वैकल्पिक टिप्पणियाँ ऑपरेंड फ़ील्ड के दाईं ओर कम से कम एक रिक्त स्थान से अलग दिखाई दे सकती हैं।
- बेसिक असेंबली लैंग्वेज स्टेटमेंट को जारी रखने की अनुमति नहीं देती है। असेंबलर के बाद के संस्करणों में जारी स्टेटमेंट के कॉलम 72 में किसी भी गैर-रिक्त वर्ण की उपस्थिति से निरंतरता का संकेत मिलता है। बेसिक असेंबली लैंग्वेज के लिए आवश्यक है कि कॉलम 72 खाली रहे।
- एक पूर्ण-कार्ड टिप्पणी को कॉलम 1 में तारांकन चिह्न (*) द्वारा दर्शाया गया है।
- कार्ड कॉलम 73-80, जिसे पहचान-अनुक्रम फ़ील्ड कहा जाता है, प्रोग्रामर द्वारा किसी भी उद्देश्य के लिए उपयोग किया जा सकता है, लेकिन आमतौर पर इसमें अव्यवस्थित कार्ड डेक का सहारा लेने के लिए अनुक्रम संख्याएं होती हैं।
बेसिक असेंबली लैंग्वेज कॉलम 25 से शुरू होने वाले स्टेटमेंट के साथ एक वैकल्पिक स्टेटमेंट फॉर्मेट की भी अनुमति देती है, जिससे असेंबल किए गए निर्देश को कॉलम 1 से शुरू होने वाले उसी कार्ड में पंच किया जा सकता है। यह विकल्प असेंबलर के बाद के संस्करणों में जारी नहीं रखा गया था।
निर्देशों के प्रकार
असेंबलर में लिखे गए प्रोग्राम के सोर्स कोड में तीन मुख्य प्रकार के निर्देश पाए जाते हैं।
असेंबलर निर्देश
असेंबलर निर्देश, जिन्हें कभी-कभी अन्य प्रणालियों पर निर्देश, छद्म संचालन या छद्मऑप्स भी कहा जाता है, असेंबलर से कोड जनरेशन प्रक्रिया के दौरान विभिन्न संचालन करने के लिए अनुरोध हैं। उदाहरण के लिए, CSECT
का अर्थ है "यहां कोड का एक अनुभाग शुरू करें"; DC
ऑब्जेक्ट कोड में रखे जाने वाले एक स्थिरांक को परिभाषित करता है।
अधिक महत्वपूर्ण असेंबलर निर्देशों में से एक USING
है, जो S/360 आर्किटेक्चर के संक्षिप्त एड्रेसिंग का समर्थन करता है। यह असेंबलर को यह निर्धारित करने में मार्गदर्शन करता है कि उसे किसी सापेक्ष पते के लिए किस आधार रजिस्टर और ऑफसेट का उपयोग करना चाहिए। BAL में, यह फॉर्म तक ही सीमित था
USING base,reg-1,...,reg-n
मशीन निर्देश (मनमोनिक)
मशीन अनुदेशों के साथ एक-से-एक संबंध होता है। पूर्ण स्मरणीय अनुदेश सेट प्रत्येक अनुदेश सेट के लिए संचालन के सिद्धांत[1] मैनुअल में वर्णित है। उदाहरण:
* This is a comment line
* Load the fullword integer stored at the
* location labeled 'ZIGGY' into general register 3:
L 3,ZIGGY
SLA 4,5 shift the value in general register 4 left by 5 bits
MVC TARGET,SOURCE move characters from location 'SOURCE' to 'TARGET'
AP COUNT,=P'1' add 1 to value in memory location 'COUNT' (packed decimal format)
B NEXT unconditional branch to label 'NEXT'
HERE EQU * This is a label
CLC TARGET,=C'ADDRESS' Compare memory location 'TARGET' to string 'ADDRESS'
BE THERE branch if equal to program label 'THERE'
आम तौर पर स्वीकृत मानकों में, हालांकि किसी भी तरह से अनिवार्य नहीं है, इसमें निमोनिक्स के साथ सामान्य-उद्देश्य रजिस्टरों की पहचान शामिल है। कुछ अन्य प्रणालियों, जैसे कि X86 असेंबली लैंग्वेज, के लिए असेंबलरों के विपरीत, रजिस्टर निमोनिक्स आरक्षित प्रतीक नहीं हैं, बल्कि प्रोग्राम में कहीं और EQU स्टेटमेंट के माध्यम से परिभाषित किए जाते हैं। यह असेंबलर भाषा प्रोग्राम की पठनीयता में सुधार करता है और रजिस्टर उपयोग का क्रॉस-रेफरेंस प्रदान करता है। इस प्रकार आमतौर पर आप एक असेंबलर प्रोग्राम में निम्नलिखित देख सकते हैं:
R3 EQU 3
...
L R3,ZIGGY
कॉल के लिए कुछ उल्लेखनीय अनुदेश निमोनिक्स BALR
[lower-alpha 1] हैं, जो एक रजिस्टर में रिटर्न एड्रेस और कंडीशन कोड को संग्रहीत करते हैं, SVC,[lower-alpha 2] DIAG,[lower-alpha 3] और ZAP।[2] उत्तरार्द्ध ने छद्म नाम WAMOZART
का उपयोग करके एक प्रोग्रामर द्वारा SuperZAP, cf. फ्री ऑन-लाइन कंप्यूटिंग शब्दकोश पर सुपरज़ैप उपयोगिता के नाम को प्रेरित किया था।
सिस्टम/360 मशीन निर्देश एक, दो, या तीन आधे शब्द लंबे (दो से 6 बाइट्स) हैं। मूल रूप से चार अनुदेश प्रारूप थे, जिन्हें ऑपरेशन कोड फ़ील्ड के पहले दो बिट्स द्वारा निर्दिष्ट किया गया था; ज़ेड/आर्किटेक्चर ने अतिरिक्त प्रारूप जोड़े।
मैक्रोज़ और सशर्त असेंबली
बेसिक असेम्बलर भाषा मैक्रोज़ का समर्थन नहीं करती. बाद के असेंबलर संस्करण प्रोग्रामर को निर्देशों को मैक्रोज़ में एक साथ समूहित करने और उन्हें एक लाइब्रेरी में जोड़ने की अनुमति देते हैं, जिसे बाद में अन्य कार्यक्रमों में लागू किया जा सकता है, आमतौर पर सी और संबंधित भाषाओं में प्रीप्रोसेसर सुविधाओं जैसे मापदंडों के साथ। मैक्रोज़ में सशर्त असेंबलर निर्देश शामिल हो सकते हैं, जैसे कि AIF
(एक 'यदि' निर्माण), जिसका उपयोग चुने हुए मापदंडों के अनुसार अलग-अलग कोड उत्पन्न करने के लिए किया जाता है। यह इस असेंबलर की स्थूल सुविधा को बहुत शक्तिशाली बनाता है। जबकि C में मल्टीलाइन मैक्रोज़ एक अपवाद हैं, असेंबलर में मैक्रो परिभाषाएँ आसानी से सैकड़ों पंक्तियाँ हो सकती हैं।
ऑपरेटिंग सिस्टम मैक्रोज़
अधिकांश प्रोग्रामों को ऑपरेटिंग सिस्टम से सेवाओं की आवश्यकता होगी, और OS उन सेवाओं के अनुरोध के लिए मानक मैक्रोज़ प्रदान करता है। ये यूनिक्स सिस्टम कॉल के अनुरूप हैं। उदाहरण के लिए, एमवीएस (बाद में z/OS) में, स्टोरेज (OBTAIN पैरामीटर के साथ) गतिशील रूप से मेमोरी के एक ब्लॉक को आवंटित करता है, और GET एक फ़ाइल से अगले तार्किक रिकॉर्ड को पुनः प्राप्त करता है।
ये मैक्रोज़ ऑपरेटिंग सिस्टम पर निर्भर हैं; कई उच्च स्तरीय भाषाओं के विपरीत, आईबीएम मेनफ्रेम असेंबली भाषाएं मेमोरी आवंटित करने, I/O संचालन करने आदि के लिए ऑपरेटिंग-सिस्टम-स्वतंत्र स्टेटमेंट या लाइब्रेरी प्रदान नहीं करती हैं, और विभिन्न IBM मेनफ़्रेम ऑपरेटिंग सिस्टम सिस्टम सेवा स्तर पर संगत नहीं हैं। उदाहरण के लिए, अनुक्रमिक फ़ाइल लिखने को z/OS और z/VSE में अलग-अलग तरीके से कोड किया जाएगा।
उदाहरण
निम्नलिखित अंश दिखाता है कि "If SEX = 'M' है, तो पुरुषों में 1 जोड़ें; अन्यथा, महिलाओं में 1 जोड़ें" असेंबलर में कैसे निष्पादित किया जाएगा।
CLI SEX,C'M' Male?
BNE IS_FEM If not, branch around
L 7,MALES Load current value of MALES into register 7
LA 7,1(7) add 1
ST 7,MALES store back the result
B GO_ON Finished with this portion
IS_FEM EQU * A label
L 7,FEMALES Load current value in FEMALES into register 7
LA 7,1(7) add 1
ST 7,FEMALES store back the result
GO_ON EQU * - rest of program -
*
MALES DC F'0' Counter for MALES (initially=0)
FEMALES DC F'0' Counter for FEMALES (initially=0)
निम्नलिखित सर्वव्यापी हैलो वर्ल्ड प्रोग्राम है, और आईबीएम ऑपरेटिंग सिस्टम जैसे OS/VS1 या MVS के तहत निष्पादित करते हुए, ऑपरेटर के कंसोल पर 'हैलो वर्ल्ड' शब्द प्रदर्शित करेगा:
HELLO CSECT The name of this program is 'HELLO'
* Register 15 points here on entry from OPSYS or caller.
STM 14,12,12(13) Save registers 14,15, and 0 thru 12 in caller's Save area
LR 12,15 Set up base register with program's entry point address
USING HELLO,12 Tell assembler which register we are using for pgm. base
LA 15,SAVE Now Point at our own save area
ST 15,8(13) Set forward chain
ST 13,4(15) Set back chain
LR 13,15 Set R13 to address of new save area
* -end of housekeeping (similar for most programs) -
WTO 'Hello World' Write To Operator (Operating System macro)
*
L 13,4(13) restore address to caller-provided save area
XC 8(4,13),8(13) Clear forward chain
LM 14,12,12(13) Restore registers as on entry
DROP 12 The opposite of 'USING'
SR 15,15 Set register 15 to 0 so that the return code (R15) is Zero
BR 14 Return to caller
*
SAVE DS 18F Define 18 fullwords to save calling program registers
END HELLO This is the end of the program
WTO
एक असेंबलर मैक्रो है जो एक ऑपरेटिंग सिस्टम कॉल उत्पन्न करता है। रजिस्टरों को सहेजने और बाद में पुनर्स्थापित करने और वापस करने के कारण, यह छोटा प्रोग्राम ऑपरेटिंग सिस्टम कार्य नियंत्रण भाषा (जेसीएल) द्वारा सीधे लागू बैच प्रोग्राम के रूप में प्रयोग योग्य है:
// EXEC PGM=HELLO
या, वैकल्पिक रूप से, इसे ऐसे प्रोग्राम से सबरूटीन के रूप में कॉल किया जा सकता है:
CALL 'HELLO'
संस्करण
आईबीएम सिस्टम/360 मॉडल 20 के लिए असेंबलरों के अपवाद के साथ, आईबीएम असेंबलर काफी हद तक ऊपर-संगत थे। अंतर मुख्य रूप से अनुमत अभिव्यक्तियों की जटिलता और मैक्रो प्रोसेसिंग में थे। OS/360 और उत्तराधिकारी|OS/360 असेंबलरों को मूल रूप से उनकी मेमोरी आवश्यकताओं के अनुसार नामित किया गया था।
7090/7094 सपोर्ट पैकेज असेंबलर
यह क्रॉस-असेंबलर IBM 7090 सिस्टम पर चलता है और इसका उपयोग तब किया गया था जब सिस्टम/360 विकास में था।[3][4]
बेसिक प्रोग्रामिंग सपोर्ट असेंबलर
आईबीएम बेसिक प्रोग्रामिंग सपोर्ट के लिए असेंबलर सच्चा बेसिक असेंबलर है। इसे कार्ड से लोड करने का इरादा था और यह 8 केबी सिस्टम/360 (मॉडल 20 को छोड़कर) पर चलेगा। इसमें मैक्रो निर्देशों या विस्तारित निमोनिक्स के लिए कोई समर्थन नहीं है (जैसे कि शाखा कोड 2 के स्थान पर बीएच, यदि स्थिति कोड 2 उच्च तुलना को इंगित करता है)। यह केवल एक ही नियंत्रण अनुभाग को असेंबल कर सकता है और डमी अनुभागों (संरचना परिभाषाओं) की अनुमति नहीं देता है। कोष्ठक में अभिव्यक्ति की अनुमति नहीं है और अभिव्यक्ति केवल '+', '-' और '*' ऑपरेटरों के साथ तीन शब्दों तक सीमित है।[3]: pp.59–61
बेसिक ऑपरेटिंग सिस्टम असेंबलर
बीओएस/360 के दो असेंबलर संस्करण हैं। दोनों को 16 KB मेमोरी की आवश्यकता होती है, एक टेप रेजिडेंट और दूसरी डिस्क।[5]: pp.7–8
असेम्बलर डी
असेंबलर डी, 16 KB की मेमोरी साइज वाली मशीनों के लिए DOS/360 और उत्तराधिकारी|DOS/360 असेंबलर था। यह दो संस्करणों में आया: न्यूनतम 16 KB मेमोरी वाली मशीनों के लिए 10 KB संस्करण, और 24 KB वाली मशीनों के लिए 14 KB संस्करण। 64 KB या अधिक वाली DOS मशीनों के लिए एक F-लेवल असेंबलर भी उपलब्ध था। डी असेंबलर्स ने उच्च संस्करणों की लगभग सभी सुविधाएँ पेश कीं।[6]: p.7
असेंबलर ई और एफ
असेंबलर ई को न्यूनतम 32 केबी मुख्य स्टोरेज के साथ ओएस/360 सिस्टम पर चलने के लिए डिज़ाइन किया गया था, जबकि असेंबलर को 15 केबी की आवश्यकता होती है।[7]: p.2 असेंबलर एफ 64 KB मेमोरी वाले सिस्टम पर DOS/360 या OS/360 के तहत चल सकता है, असेंबलर को 44 KB की आवश्यकता होती है।[8][9][10] ये असेंबलर OS/360 का एक मानक हिस्सा हैं; जो संस्करण तैयार किया गया था वह सिस्टम जेनरेशन (ओएस)OS) (SYSGEN) में निर्दिष्ट किया गया था।
मॉडल 44 प्रोग्रामिंग सिस्टम असेंबलर
कुछ अपवादों के साथ, आईबीएम सिस्टम/360 मॉडल 44 प्रोग्रामिंग सिस्टम असेंबलर भाषा आईबीएम सिस्टम/360 प्रोग्रामिंग समर्थन में उपलब्ध भाषाओं का एक चयनित उपसमूह है। सबसे महत्वपूर्ण बात यह है कि मॉडल 44 असेंबलर में मैक्रोज़ और निरंतरता कथनों के लिए समर्थन का अभाव था। दूसरी ओर इसमें कई विशेषताएं थीं जो अन्य सिस्टम/360 असेंबलरों में नहीं पाई गईं - विशेष रूप से कार्ड छवि स्रोत डेटासेट को अद्यतन करने के निर्देश, जिसे सामान्य नाम दिया गया, और अंतर्निहित परिभाषा SETA
असेंबलर चर।[11]
असेम्बलर जी
असेंबलर जी, वाटरलू विश्वविद्यालय द्वारा 1970 के दशक में असेंबलर एफ में किए गए संशोधनों का एक सेट है (असेंबलर एफ खुला स्रोत था/है)। संवर्द्धन ज्यादातर इनपुट/आउटपुट के बेहतर संचालन और बेहतर बफरिंग में हैं जो असेंबली को काफी तेज करते हैं।[12] असेंबलर जी कभी भी आईबीएम उत्पाद नहीं था।
असेम्बलर एच
असेंबलर H OS/360 और उसके उत्तराधिकारियों पर चलता है; यह असेंबलर एफ की तुलना में तेज़ और अधिक शक्तिशाली था, लेकिन मैक्रो भाषा पूरी तरह से संगत नहीं थी।
असेंबलर एच संस्करण 2 की घोषणा 1981 में की गई थी और इसमें एएमओडीई और आरएमओडीई निर्देशों सहित विस्तारित आर्किटेक्चर (एक्सए) के लिए समर्थन शामिल है।[13]: p.3–28 इसे 1994 में मार्केटिंग से हटा लिया गया और 1995 में समर्थन समाप्त हो गया। इसकी जगह हाई लेवल असेंबलर ने ले ली।[14]
असेम्बलर XF
असेंबलर एक्सएफ, असेंबलर एफ का अपग्रेड है जिसमें नए सिस्टम/370 आर्किटेक्चर निर्देश शामिल हैं। यह संस्करण OS/VS और DOS/VS सिस्टम के लिए एक सामान्य असेंबलर प्रदान करता है। अन्य परिवर्तनों में अभिव्यक्ति और मैक्रो प्रोसेसिंग पर प्रतिबंधों में ढील देना शामिल है। असेंबलर XF को न्यूनतम 64 KB (वर्चुअल) विभाजन/क्षेत्र आकार की आवश्यकता होती है। अनुशंसित आकार 128 KB है.[15]: p.73
हाई लेवल असेंबलर
हाई लेवल असेंबलर या एचएलएएसएम को जून 1992 में आईबीएम के असेंबलर एच संस्करण 2 के स्थान पर जारी किया गया था।[16][17] यह सिस्टम/370 और सिस्टम/390 के लिए डिफ़ॉल्ट अनुवादक था, और एमवीएस, वीएसई और वीएम ऑपरेटिंग सिस्टम का समर्थन करता था। 2023 तक यह अपने z/OS, z/VSE, z/VM और z/TPF ऑपरेटिंग सिस्टम के लिए z/आर्किटेक्चर [[ मेनफ़्रेम कंप्यूटर ]] कंप्यूटरों के लिए IBM की वर्तमान असेंबली भाषा प्रोग्रामिंग भाषा है। रिलीज़ 6 और बाद में लिनक्स पर भी चलते हैं, और निष्पादन योग्य और लिंक करने योग्य प्रारूप या जीओएफएफ ऑब्जेक्ट फ़ाइलें उत्पन्न करते हैं (इस वातावरण को कभी-कभी आईबीएम जेड पर लिनक्स के रूप में संदर्भित किया जाता है)।[18] आईबीएम में काम करते समय, जॉन रॉबर्ट एहरमन बनाया गया और वह HLASM का प्रमुख डेवलपर था[lower-alpha 4] और उच्च स्तरीय असेंबलर का जनक माना जाता है।[20]
नाम के बावजूद, एचएलएएसएम में अपने आप में उच्च-स्तरीय असेंबलर से जुड़ी कई विशेषताएं नहीं हैं। यह नाम अतिरिक्त मैक्रो भाषा क्षमताओं से आ सकता है, जैसे उपयोगकर्ता-परिभाषित फ़ंक्शन लिखने की क्षमता। असेंबलर ज्यादातर असेंबलर एच और असेंबलर (एक्सएफ) के समान है, जिसमें एसएलएसी (स्टैनफोर्ड लीनियर एक्सेलेरेटर) संशोधन शामिल हैं। जोड़ी गई सुविधाओं में से एक संकेत था CSECT
/DSECT
स्थान काउंटर के लिए, निर्भर[lower-alpha 5] और लेबल किया गया[lower-alpha 6] USING स्टेटमेंट्स, वर्तमान में सक्रिय USING स्टेटमेंट्स की एक सूची, एक संकेत कि क्रॉस-रेफरेंस में एक वेरिएबल पढ़ा या लिखा गया है, और मिश्रित-केस प्रतीक नामों की अनुमति देता है।[21] RSECT
निर्देश (रीड-ओनली कंट्रोल सेक्शन) असेंबलर को प्रति-सेक्शन के आधार पर पुनर्प्रवेश की जांच करने की अनुमति देता है। RSECT
पहले असेंबलर एच में अप्रलेखित और असंगत रूप से कार्यान्वित किया गया था।[22]: p.43
हाई लेवल असेंबलर टूलकिट
हाई लेवल असेंबलर टूलकिट हाई लेवल असेंबलर के लिए एक अलग कीमत वाली संगत है। टूलकिट में शामिल हैं:[23] * संरचित प्रोग्रामिंग मैक्रो (कंप्यूटर विज्ञान) का एक सेट -
- यदि/अन्यथा/समाप्ति
- करें/समाप्त करें
- STRTSRCH/ORELSE/ENDLOOP/ENDSRCH
- कैसेंट्री/केस/एंडकेस
- चुनें/कब/अन्यथा/अंत करें।
- एक जुदा करनेवाला.
- एक प्रोग्राम अंडरस्टैंडिंग टूल (रीइंजीनियरिंग (सॉफ्टवेयर)|री-इंजीनियरिंग सहायता)।
- एक स्रोत एक्सआरईएफ उपयोगिता (क्रॉस-रेफरेंस सुविधा)।
- इंटरएक्टिव डिबग सुविधा।
- उन्नत सुपरसी (स्रोत तुलना उपकरण)।
विशेषीकृत संस्करण
आईबीएम सिस्टम/360 मॉडल 44 पीएस असेंबलर
आईबीएम सिस्टम/360 मॉडल 44 प्रोग्रामिंग सिस्टम असेंबलर एक ऐसी भाषा को संसाधित करता है जो ओएस/360 और डॉस/360 असेंबलर भाषा का एक चयनित उपसमूह है। इसमें स्टोरेज-टू-स्टोरेज (एसएस) निर्देशों या बाइनरी में कनवर्ट करने के लिए कोई समर्थन नहीं है (CVB
), दशमलव में कनवर्ट करें (CVD
), सीधे पढ़ें (RDD
) और सीधे लिखें (WRD
) निर्देश।[24] इसमें मॉडल 44 के लिए अद्वितीय चार निर्देश शामिल हैं: प्राथमिकता मास्क बदलें (CHPM
), लोड पीएसडब्ल्यू स्पेशल (LPSX
), डायरेक्ट वर्ड पढ़ें (RDDW
), और डायरेक्ट वर्ड लिखें (WRDW
). इसमें स्रोत प्रोग्राम को अद्यतन करने के निर्देश भी शामिल हैं, जो अन्य प्रणालियों में उपयोगिता कार्यक्रमों द्वारा किया जाने वाला कार्य है (SKPTO
, REWND
, NUM
, OMIT
और ENDUP
). यह सामान्य और अंतर्निहित रूप से परिभाषित नाम प्रदान करता है &SETA
प्रतीक, लेकिन कुछ प्रतिबंध भी हैं।[24]: pp.53, 73
आईबीएम सिस्टम/360 टीएसएस असेंबलर
TSS/360|सिस्टम/360 मॉडल 67 टाइम शेयरिंग सिस्टम के लिए असेंबलर में अद्वितीय TSS सुविधाओं का समर्थन करने के निर्देशों में कई अंतर हैं। PSECT
ई> निर्देश एक प्रोटोटाइप नियंत्रण अनुभाग उत्पन्न करता है जिसमें प्रोग्राम द्वारा उपयोग किए जाने वाले स्थानांतरण योग्य पता स्थिरांक और परिवर्तनीय डेटा शामिल होता है।[25]: p.143
गैर-आईबीएम असेंबलर
विशेष वातावरण के लिए कई आईबीएम-संगत असेंबलर मौजूद हैं।[26]
- यूनिसिस की यूनिवैक सीरीज 90|यूनिवैक 90/60, 90/70 और 90/80 सीरीज को आईबीएम-फॉर्मेट असेंबलर को स्वीकार करने के लिए डिजाइन किया गया था, क्योंकि मशीन श्रृंखला एस/360 और एस/370 के समान थी।
- फुजित्सु बीएस2000 श्रृंखला को भी यूनिवैक के समान संसाधन से 370 वर्कलाइक के रूप में बनाया गया था, और अभी भी यूरोप के कुछ हिस्सों में उपयोग में है।[27]
- डिग्नस एलएलसी सिस्टम्स/एएसएम एक एचएलएएसएम-संगत असेंबलर है जो मूल रूप से आईबीएम सिस्टम पर या क्रॉस-असेंबलर के रूप में चल सकता है।[28] * डॉन हिगिंस द्वारा लिखित फ्रीवेयर पीसी/370 को बाद में माइक्रो फोकस इंटरनेशनल द्वारा खरीद लिया गया।
- z390 एक असेंबलर और सिस्टम 390 एमुलेटर है जो डॉन हिगिंस द्वारा लिखा गया है और इसे जावा (प्रोग्रामिंग भाषा) में प्रोग्राम किया गया है। यह खुला स्रोत है और http://www.z390.org/ पर उपलब्ध है
- पेन स्टेट यूनिवर्सिटी ने ASSIST (कंप्यूटिंग) नामक एक पैकेज लिखा, जिसमें एक सिस्टम 370 असेंबलर और दुभाषिया शामिल है।
- टैचियन सॉफ्टवेयर एलएलसी टैचियन असेंबलर वर्कबेंच का विपणन करता है जो विंडोज, लिनक्स/x86, S/390 और zSeries, AIX और सोलारिस के लिए लिनक्स पर चलता है।[29]
- जीएनयू असेंबलर (गैस) आईबीएम जेड पर लिनक्स के लिए जीएनयू कंपाइलर संग्रह (जीसीसी) का हिस्सा है। ओएस/390 और आईबीएम जेड पर लिनक्स। इस असेंबलर में एक अद्वितीय सिंटैक्स है जो आईबीएम आर्किटेक्चर के लिए अन्य असेंबलरों के साथ असंगत है।
सामान्य ज्ञान
BAL, ब्रांच एंड लिंक w:nl:Instructieset van IBM 360 का प्रतीक भी है।[2]
यह भी देखें
- आईबीएम सिस्टम/360
- सहायता (कंप्यूटिंग)
- पीसी-आधारित आईबीएम-संगत मेनफ्रेम - संगत मशीनों या वर्चुअल मशीनों की सूची
- डिस्सेबलर - असेंबली की रिवर्स प्रक्रिया, मशीन कोड से असेंबली जैसे स्रोत का पुनर्निर्माण
टिप्पणियाँ
- ↑ Most uses of BALR have been replaced by
BASR
and similar instructions. - ↑ Many uses of
SVC
have been replaced by aPC
instruction. - ↑ VM repurposes
DIAG
as anHVC
instruction. - ↑ HLASM followed a SHARE requirement to incorporate Greg Mushial's enhancements[19] to Assembler H into the supported product.
- ↑ A dependent USING is one that specifies a relocatable expression instead of a list of registers:
USING IHADCB,SYSPRINT ... TM DCBOPTCD,DCBOPTC Test OPTCD in SYSPRINT ...
- ↑ A labelled USING is one that only affects instructions that explicitly refer to it by qualifying an expression with a label:
LA R4,SYSIN LA R5,SYSPRINT IN USING IHADCB,R4 OUT USING IHADCB,R5 ... TM IN.DCBOFLGS,DCBOFTM Test OFLGS in SYSIN ... TM OUT.DCBOPTCD,DCBOPTC Test OPTCD in SYSPRINT ...
संदर्भ
- ↑ IBM System/360 Principles of Operation (PDF). A22-6821-0. Retrieved Dec 6, 2018.
{{cite book}}
:|work=
ignored (help) - ↑ 2.0 2.1 "एचएलएएसएम - सभी ऑपकोड, विस्तारित निमोनिक्स और फ़ंक्शन कोड की सूची, निमोनिक द्वारा क्रमबद्ध". Retrieved January 14, 2013.
- ↑ 3.0 3.1 IBM System/360 Basic Programming Support Basic Assembler Language (PDF). February 1965. C20-6503-0. Retrieved April 5, 2022.
{{cite book}}
:|work=
ignored (help) - ↑ IBM 7090/7094 Support Package for IBM System/360 (PDF). November 1964. C28-6501-2. Retrieved April 5, 2022.
{{cite book}}
:|work=
ignored (help) - ↑ IBM System/360 Basic Operating System Language Specifications Assembler (16K Disk/Tape) (PDF). December 1965. C24-3414-1. Retrieved April 5, 2022.
{{cite book}}
:|work=
ignored (help) - ↑ IBM Corporation (1970). IBM System/360 Disk and Tape Operating Systems Assembler Language (PDF).
- ↑ IBM Corporation (1966). IBM System/360 Operating System Assembler (32K) Program Logic Manual (PDF).
- ↑ IBM Corporation (1968). IBM System/360 Disk Operating System Assembler(F) Program Logic (PDF).
- ↑ IBM Corporation (1971). IBM System/360 Assembler(F) Program Logic (PDF).
- ↑ IBM Corporation (1974). आईबीएम ओएस असेंबलर भाषा (PDF).
- ↑ IBM Corporation (1966). IBM System/360 Model 44 Programming System Assembler Language (PDF). p. 73. Retrieved July 2, 2019.
- ↑ Stanford Linear Accelerator Center. "GENERALIZED IBM SYSTEM 360 SOFTWARE MEASUREMENT (SLAC-PUB-715)" (PDF). Retrieved October 8, 2012.
- ↑ IBM Corporation (1984). MVS/Extended Architecture Conversion Notebook (PDF).
- ↑ IBM Corporation (20 December 1996). "5668-962 IBM Assembler H Version 2 Release 1.0". Retrieved October 8, 2012.
- ↑ IBM Corporation (1973). OS/VS Assembler Programmer's Guide (PDF).
- ↑ IBM Corporation. "आईबीएम हाई लेवल असेंबलर और टूलकिट फ़ीचर - रिलीज़ इतिहास". Retrieved October 21, 2012.
- ↑ IBM Corporation (5 May 1992). "Announcement Letter 292-244: IBM HIGH LEVEL ASSEMBLER/MVS & VM & VSE". Retrieved October 21, 2012.
- ↑ IBM Corporation (2008). zSeries उपयोगकर्ता गाइड पर लिनक्स के लिए उच्च स्तरीय असेंबलर (PDF).
- ↑ Greg Mushial (July 20, 1983), "Module 24: SLAC Enhancements to and Beautifications of the IBM H-Level Assembler for Version 2.8", SLAC VM NOTEBOOK, Stanford Linear Accelerator Center
- ↑ "जॉन आर. एहरमन संग्रह के लिए गाइड". Online Archive of California. X5621.2010. Archived from the original on 2022-10-15. Retrieved 2022-10-15. [1]
- ↑ "IBM HIGH LEVEL ASSEMBLER/MVS & VM & VSE". Announcement letters. IBM Corporation. May 5, 1992. 292-244. Retrieved October 8, 2012.
- ↑ IBM Corporation (1995). IBM High Level Assembler for MVS & VM & VSE Release 2 Presentation Guide (PDF). Archived from the original (PDF) on 2016-01-23.
- ↑ IBM Corporation. "टूलकिट फ़ीचर घटक". Retrieved October 21, 2012.
- ↑ 24.0 24.1 IBM Corporation (1966). IBM System/360 Model 44 Programming System Assembler Language (PDF).
- ↑ IBM Corporation (1976). आईबीएम टाइम शेयरिंग सिस्टम असेंबलर प्रोग्रामर गाइड (PDF).
- ↑ Alcock, David. "Dave's z/Architecture Assembler FAQ". Planet MVS. Retrieved December 15, 2012.
- ↑ Fujitsu ASSEMH manuals available from http://manuals.ts.fujitsu.com/index.php?id=1-2-2926-15435 (Retrieved 2016-02-27)
- ↑ Dignus, LLC. "Systems/ASM". Retrieved December 15, 2012.
- ↑ टैचयोन सॉफ्टवेयर LLC. "टैचयोन सॉफ्टवेयर". Retrieved December 15, 2012.
- Additional references
- Rudd, Anthony. An Illustrated Guide for z/Architecture Assembler Programmers. Create Space (2012).
बाहरी संबंध
- IBM High Level Assembler manual
- A Programmer's Introduction to IBM System/360 Assembler Language (Student Text)
- High Level Assembler for z/OS & z/VM & z/VSE Language Reference
- The Punctilious Programmer: IBM Mainframe Assembler
- Basic IBM Mainframe Assembly Language Programming
- OS/390 Assembler Programming Introduction (archived)
- Web enabled IBM Assembler F compiler for small experiments
- ASSIST – Assembler System for Student Instruction & Systems Teaching