क्या यह विधानसभा भाषा है?


70

बचपन में मैं MK-61 सोवियत कैलकुलेटर पर प्रोग्राम करता था । इसमें चार ऑपरेटिंग रजिस्टर (एक्स, वाई, जेड, टी) और 15 स्टोरेज रजिस्टर थे। एक प्रोग्राम में 105 चरण हो सकते हैं।

जैसा कि मैंने इसे याद किया है, इसकी आज्ञाएँ थीं:

  • स्वैप X और Y रजिस्टर
  • शिफ्ट रजिस्टर (Z से T, Y से Z, X से Y)
  • भंडारण रजिस्टर (1..15) से एक्स की प्रतिलिपि बनाएँ
  • एक्स से स्टोरेज रजिस्टर की कॉपी (1..15)
  • यदि X <0 है तो प्रोग्राम स्टेप ## पर जाएं
  • X और Y मानों का उपयोग करके ऑपरेशन (+, -, *, /) करें और परिणाम को X में डालें

क्या यह कमांड असेंबली भाषा सेट है? क्या मेरे पास इस उपकरण का उपयोग करके विधानसभा भाषाओं का एक मूल विचार है?

युक्ति

यह पता चला है कि इसे "कीस्ट्रोक प्रोग्रामिंग" कहा जाता है ।

मजेदार तथ्य: एक समान कैलकुलेटर (यह एक, लेकिन ऊर्जा स्वतंत्र स्मृति के साथ) के रूप में 1988 में अंतरिक्ष मिशन प्रक्षेपवक्र गणना के लिए बैक-अप हार्डवेयर के रूप में उपयोग किया गया था। :-)


अच्छा! - वह तस्वीर यादें वापस लाती है। मैं अभी भी कहीं-कहीं तहखाने में अपना MK-52 मिला :)
DXM

यह एचपी 65 के एक सोवियत क्लोन की तरह दिखता है। इसे रिवर्स पोलिश नोटेशन में प्रोग्राम किया जा सकता है जो एक स्टैक पर पुश और पुल करता है। RPN ऑपरेटर्स को केवल मेमोरी में रिकॉर्ड किया जाता है, और इसकी व्याख्या एक 4004 सीपीयू के बराबर होती है। 4004 ROM में कोड संभवतः 4004 कोडांतरक से संकलित किया गया था, लेकिन कीस्ट्रोक वास्तव में स्प्रेडशीट मैक्रोज़ की तरह अधिक हैं।
मेरेडिथ गरीब

जवाबों:


13

यह असेंबली लैंग्वेज नहीं है, यह एक मशीन लैंग्वेज है।

मशीन भाषा कुछ भी है कि भौतिक रूप से मशीन के लिए कुछ का मतलब है। पॉकेट कंप्यूटर के मामले में, यह कुंजी प्रेस है, मशीन में संख्याओं में एन्कोडेड। आप इस इलेक्ट्रॉनिका MK61 मशीन के बारे में अधिक जानकारी नहीं देते हैं , इसलिए मैं TI-57 का उदाहरण दूंगा : मशीन की भाषा ने दसियों में कॉलम के रूप में दी गई कुंजी की संख्या और इकाइयों में लाइन का उपयोग किया। इसलिए उदाहरण के लिए, एक प्रोग्राम जो मेमोरी 8 बढ़ाएगा वह होगा:

33 8  57 1 58 23

यह मशीन भाषा है: यह मशीन द्वारा सीधे व्याख्या की गई है।

विधानसभा भाषा मानव पठनीय पाठ होगी:

RCL 8 
+
1
=
STO 8

इस पाठ को मशीन कोड के अनुक्रम में बदलने के लिए, आपको एक कोडांतरक की आवश्यकता होगी , जो एक प्रोग्राम हो सकता है, या एक मानव जो उस पाठ को संख्याओं के अनुक्रम में अनुवाद करेगा।

भ्रम अक्सर होता है, क्योंकि अक्सर विधानसभा भाषा से मशीन भाषा में काफी प्रत्यक्ष अनुवाद होता है, लेकिन यह हमेशा पूरी तरह से प्रत्यक्ष अनुवाद नहीं होता है: मैक्रो असेंबलर्स में शक्तिशाली मैक्रोज़ होते हैं जो कोडांतरक में बहुत काम कर सकते हैं और एक उत्पन्न कर सकते हैं एक विधानसभा निर्देश से बहुत सारी मशीन भाषा निर्देश। प्रतीकात्मक पतों के मात्र अनुवाद में शाखा निर्देशों के ऑप-कोड को बदलना शामिल हो सकता है (उदाहरण के लिए, जब छोटे रिश्तेदार पते से लंबे रिश्तेदार या पूर्ण पते पर स्विच करना), तो यह हमेशा उतना प्रत्यक्ष नहीं होता जितना आप सोचते हैं।


36

मैं कहूंगा कि आपके प्रश्न के दोनों भागों का उत्तर नहीं है: इस कैलकुलेटर के कमांड असेंबली भाषा की तरह नहीं हैं, और इस कैलकुलेटर की प्रोग्रामिंग असेंबली भाषा में प्रोग्रामिंग से अलग है।

इस कैलकुलेटर को "भाषा" के रूप में क्रमबद्ध किया जाता है, लेकिन यह निम्न स्तर का है, जो प्रोग्रामर के रूप में आपको दिखाई नहीं देता है। मैं थोड़ा अनुमान लगा रहा हूं, लेकिन आपके विवरण से, और कीबोर्ड को देखने से (और इसकी तुलना 1970 के दशक के अंत और 1980 के दशक की शुरुआत से हेवलेट पैकर्ड या टेक्सास इंस्ट्रूमेंट्स से मिलते-जुलते कैलकुलेटर की तुलना में) मैं कहूंगा कि प्रत्येक प्रोग्राम "स्टेप" "न केवल" ऐड "या" स्वैप एक्सएंडवाई "जैसे एक सरल ऑपरेशन हो सकता है, बल्कि त्रिकोणमिति, घातांक, लघुगणक आदि जैसे अधिक जटिल संचालन भी हो सकते हैं। इन चरणों में से प्रत्येक को संभवतः आंतरिक माइक्रोकोडेड रूटीन के रूप में लागू किया जाता है। उस माइक्रोकोड को शायद असेंबली भाषा में प्रोग्राम किया गया है, लेकिन मुझे नहीं लगता '

जैसा कि दूसरों ने वर्णन किया है, विधानसभा भाषा आमतौर पर बहुत करीब है (यदि 1: 1 नहीं है) अंतर्निहित मशीन की सुविधाओं के साथ पत्राचार। मैं कहूंगा कि असेंबली लैंग्वेज प्रोग्रामिंग में निम्नलिखित विशेषताएं शामिल हैं जो संभवतः इस कैलकुलेटर की प्रोग्रामिंग में मौजूद नहीं हैं।

  • संचालन में निचले स्तर के स्तर के संचालन शामिल हैं जैसे कि बिटवाइज़ और, या, एक्सओआर, शिफ्टिंग; पूर्णांक और (हो सकता है) फ्लोटिंग पॉइंट अंकगणित, विभिन्न प्रकार के डेटा साइज़ पर (जैसे सिंगल या डबल प्रिसिजन); विभिन्न आकारों (बाइट, हाफ वर्ड, इत्यादि) का लोड / स्टोर।

  • उच्च स्तर के संचालन (ट्रिगर, लॉगरिथम) आमतौर पर उप-कॉल होते हैं, निर्देश नहीं। कुछ अपवाद हैं, जैसे DEC VAX जिसमें एक बहुपद-मूल्यांकन निर्देश था। [संपादित करें: ओपी ने बताया कि x87 में भी ट्रिगर कार्य हैं।]

  • मशीन की एड्रेसिंग स्कीम सामने आती है। यदि पता स्थान खंडित है, तो आपको एक आधार पते को एक रजिस्टर में लोड करना होगा और फिर उस रजिस्टर के सापेक्ष कोड या डेटा को संबोधित करना होगा। यहां तक ​​कि एक फ्लैट पते की जगह के साथ, आप पते और पते के अंकगणित से अवगत हैं। आमतौर पर असेम्बलर्स प्रोग्रामर्स को पतों को निरूपित करने के लिए लेबल का उपयोग करने की अनुमति देंगे। लेकिन अगर कोई पता अलग सेगमेंट में है, तो इससे पहले कि आप इसे प्राप्त कर सकें, आपको एक सेगमेंट रजिस्टर लोड करना पड़ सकता है।

  • मेमोरी संरेखण उजागर है। उदाहरण के लिए, कई मशीनों पर एक 4-बाइट शब्द केवल 4 बाइट्स के गुणकों से लोड या संग्रहीत किया जा सकता है।

  • डेटा प्रतिनिधित्व उजागर है। आमतौर पर असेंबलर्स हेक्स, ऑक्टल, दशमलव, फ्लोटिंग पॉइंट और कभी-कभी कैरेक्टर डेटा में संख्यात्मक डेटा को निर्दिष्ट करने का कोई तरीका प्रदान करते हैं।

  • रजिस्टरों का विशेषज्ञता उजागर हुआ है। कुछ आर्किटेक्चर कुछ रजिस्टरों में पूर्णांक और पते के संचालन की अनुमति देते हैं, लेकिन केवल दूसरों में फ्लोटिंग बिंदु या कुछ रजिस्टरों के सापेक्ष केवल पते की अनुमति देते हैं। कभी-कभी विशेष पंजीकृत होते हैं जैसे कि स्थिति या स्थिति बिट्स जिन्हें संबोधित या अंकगणित के लिए उपयोग नहीं किया जा सकता है।

  • सबरूटीन कॉलिंग कन्वेंशन उजागर होते हैं। तर्क और रिटर्न मान रजिस्टर में पारित किए जा सकते हैं, या स्टैक से पॉपअप और पुश किया जा सकता है। (यह स्टैक आमतौर पर मेमोरी का एक क्षेत्र होता है जिसे एक विशेष स्टैक पॉइंटर रजिस्टर द्वारा संबोधित किया जाता है, एक्सवायजेड और टी। की तरह एक निश्चित सेट नहीं)

  • आपको ओएस के साथ बातचीत करने के बारे में सचेत रहने की आवश्यकता हो सकती है, या यदि एक नहीं है, तो निम्न-स्तरीय हार्डवेयर सुविधाओं से कैसे निपटें। ओएस के साथ आपको तर्कों को रजिस्टर (या स्टैक) में लोड करना होगा और कर्नेल में फंसाना होगा। ओएस के बिना आपको संभवतः इंटरप्ट और टाइमर से निपटना होगा।

असेंबली प्रोग्रामिंग की मेरी याद यह है कि यह बहुत, बहुत दर्दनाक है। मुझे लगता है कि तुलना द्वारा यह कैलकुलेटर प्रोग्रामिंग आसान और मजेदार है। (माफ़ करना।)


1
नीले प्रतीकों - 1) ठीक है, यह कुछ बिटवाइज़ आपरेशन, XOR, नहीं किया है और, या , , और ИНВकीबोर्ड पर (जो INV का मतलब है)। 2) मैंने सोचा था कि साइन, कोसाइन आदि इस संदर्भ के अनुसार निर्देश हैं । x86 प्रोसेसर के लिए Ref.x86asm.net/coder32.html । लेकिन निश्चित रूप से मैं आपसे सहमत हूं कि कोडांतरक बहुत अधिक जटिल है।
डिफॉल्ट

यदि आप उस वीएमएस इंस्ट्रक्शन सेट ऑपरेशन के लिए रिफरेन्स चाहते हैं - deathrow.vistech.net/… । कुछ अन्य मजेदार बिट्स esolangs.org/wiki/…

25

हाँ, यह निश्चित रूप से मेरे लिए एक विधानसभा भाषा की तरह लगता है।

यह कहना है या नहीं है कि वास्तव में मुश्किल है है , बस वर्णन से विधानसभा क्योंकि परिभाषा - जिसका आदेशों को मैप 1 एक भाषा: -, मशीन कोड का ही एक ज्ञान के बिना निर्धारित करने के लिए कठिन है अपने लक्ष्य मंच की मशीन कोड के साथ 1 लेकिन यह उस तरह से आवाज करता है जैसे एएसएम अन्य प्लेटफार्मों पर काम करता है।


11

यह निश्चित रूप से एक विधानसभा भाषा के कुछ करीबी समानताएं हैं, लेकिन मैं यह तर्क देने जा रहा हूं कि यह वास्तव में ऐसा नहीं है।

एक असेंबली भाषा में, ऑपरेशन ज्यादातर सीपीयू निर्देशों के लिए 1-टू -1 मैप करते हैं। कुछ अपवाद हैं, जैसे मैक्रोज़ और छद्म ऑप्स (जैसे, कहते हैं, एक CLEAR निर्देश जो वास्तव में XORs को अपने साथ पंजीकृत करता है); वास्तविक बिंदु यह है कि एक असेंबली प्रोग्राम बिल्कुल उत्पन्न होने वाले सीपीयू निर्देशों को निर्धारित करता है। (यह एक विधानसभा भाषा और सी जैसी उच्च-स्तरीय भाषा के बीच का मूल अंतर है; उत्तरार्द्ध में, कार्यक्रम व्यवहार निर्दिष्ट करते हैं )।

कैलकुलेटर में निस्संदेह एक सीपीयू है, लेकिन मुझे संदेह है कि व्यक्तिगत सीपीयू निर्देश एक्स, वाई, जेड और टी "रजिस्टरों" को संदर्भित करता है, xyया sin(या ПРГ, जो भी इसका मतलब है) जैसे उच्च-स्तरीय संचालन करता है।

इसके बजाय, मुझे यकीन है कि सबरूटीन कॉल के रूप में कई या अधिकांश दृश्य संचालन किए जाते हैं। और निष्पादित किए गए प्रत्येक ऑपरेशन के लिए, परिणाम प्रदर्शित करने के लिए एक महत्वपूर्ण मात्रा में अतिरिक्त कार्य करना होगा।

आप एक उच्च स्तरीय आभासी मशीन के लिए एक असेंबली भाषा के रूप में दृश्यमान संचालन के बारे में सोच सकते हैं, लेकिन उस वर्चुअल मशीन को वास्तविक सीपीयू पर चलने वाले दुभाषिया की तरह कुछ के माध्यम से कार्यान्वित किया जाता है।

फिर भी, मैं कहूंगा कि आपके प्रश्न के दूसरे भाग का उत्तर:

क्या मेरे पास इस उपकरण का उपयोग करने वाली विधानसभा भाषाओं का एक मूल विचार है?

हां है।


1
हमारे बॉक्स में AX, BX, CX और DX नहीं हैं, या तो - विधानसभा भाषाओं को प्रतीकात्मक अनुवाद की अनुमति है। मैं इस बात से सहमत हूं कि उच्च स्तर के कार्य निश्चित रूप से असेंबली नहीं हैं, लेकिन ध्यान दें कि उन्होंने जो सूचीबद्ध किया था, उसमें उन्हें शामिल नहीं किया गया था। जबकि मुझे लगता है कि यह असम्भव है कि यह वास्तव में एक असेंबली लैंग्वेज थी (सब कुछ काम करने के लिए एड्रेसिंग मोड के लिए निश्चित लंबाई का होगा) सूचीबद्ध कोई भी कमांड पीसी पर असेंबलर से परे नहीं है।
लोरेन Pechtel

2
"अगर X <0 तो प्रोग्राम स्टेप ## पर जाएं" एक साधारण बीएमआई (शाखा अगर माइनस) विधानसभा निर्देश है।
मौविसील

1
@mouviciel और यहां तक ​​कि अगर मंच सीधे BMIउदाहरण जैसी किसी चीज का समर्थन नहीं करता है , IF ... THEN ...तो आम तौर पर दो निर्देशों के रूप में पढ़ा जाता है: पहली तुलना ( x < 0इस मामले में), फिर उस तुलना के परिणाम के आधार पर एक कार्रवाई (सबसे अधिक संभावना है कि काम करते समय एक छलांग। विधानसभा भाषा में)। इंटेल like० (६ में, कुछ ऐसा है (मान xलेना AX में है) CMP AX, 0 JNL After_IfThen_Block। (JNL जंप नहीं तो कम नहीं; उच्च स्तर की भाषा में, यह कुछ इस तरह पढ़ेगा if not (x < 0) then goto After_IfThen_Block, जो जैसा है वैसा ही होगा if (x >= 0) then {code until there}।)
एक CVn

1
ПРГ(PRG - प्रोग्रामिंग) प्रोग्रामिंग मोड में स्विच करने के लिए सिर्फ एक मेटा कुंजी है, कुछ फ़ंक्शन नहीं।
ओलेग वी। वोल्कोव

1
@mouviciel: मुझे संदेह है कि "अगर X <0 तो प्रोग्राम स्टेप ## पर जाएं" वास्तव में एक सिंगल हार्डवेयर सीपीयू निर्देश के रूप में लागू किया गया है। मैं अनुमान लगाता हूं कि कैलकुलेटर पर दर्ज एक कार्यक्रम सीपीयू निर्देशों के अनुक्रम के रूप में संग्रहीत नहीं है ; बल्कि, इसे उच्च-स्तरीय निर्देशों के अनुक्रम के रूप में संग्रहीत किया जाता है जो कि फर्मवेयर प्रोग्राम द्वारा व्याख्या की जाती हैं । मैंने इस विशेष कैलकुलेटर के साथ कभी काम नहीं किया है, लेकिन मैंने एचपी -48 का उपयोग किया है; उपयोगकर्ता-दृश्य निर्देश सेट शनि सीपीयू के उपयोग से बहुत अलग है जो इसका उपयोग करता है।
कीथ थॉम्पसन

9

यह सही है, पोस्ट कोड टुकड़ा असेंबली भाषा की तरह दिखता है । इस कोड का उचित रूपांतरण संस्करण को परिभाषित करेगा।

संपादित करें: इस डिवाइस के लिए कुछ विशिष्ट भाषा है, लेकिन यह असेंबली नहीं है।

यह यूएसएसआर निर्मित कैलकुलेटर की तरह भी दिखता है। क्या यह गोल बैटरी / कॉर्ड पर चलता है?


3
सही है, यह 80 के दशक के मध्य से यूक्रेन में सोविएट में उत्पादित किया गया था। मैंने 1991 में एक बनाया है। इसमें 3 एए बैटरी के लिए और 220 वी एडप्टर के लिए दोनों स्लॉट हैं।
23

1
यह वास्तव में मेरे लिए उदासीन है। मुझे यह ब्रांड नाम "एलेक्ट्रोनिका" :) याद है
ईएल यूसुबोव

3

मैं तर्क देता हूं कि आप एक बेसिक विधानसभा भाषा हाइब्रिड के करीब हैं, लेकिन यह वास्तव में अंतर्निहित सीपीयू और वास्तुकला पर निर्भर करता है। अगर आपके पास बोलने के लिए कोई सही रैम नहीं है, तो सीधे मेमोरी एक्सेस की आवश्यकता नहीं है। एफपीयू के बिना फ्लोटिंग पॉइंट ऑपरेशंस की भी आवश्यकता नहीं है।

मुझे लगता है कि एक साधारण परीक्षण फ्लोटिंग पॉइंट नंबर और पूर्णांक पर एक अतिरिक्त ऑपरेशन होगा। अधिकांश उच्च स्तरीय प्रोग्रामिंग भाषाएं ADD 2.5, 7 को स्वीकार करेंगी और 9.5 पर लौटेंगी। असेंबली लैंग्वेज हालांकि आउटपुट को निर्देश के आधार पर और बाइनरी में अंतर्निहित संख्या प्रतिनिधित्व के आधार पर भिन्न करती हैं। अधिकांश विधानसभा भाषाओं को फ़्लोटिंग पॉइंट बनाम पूर्णांक संचालन का उपयोग करने के आधार पर एक अलग निर्देश की आवश्यकता होती है। इसका अपवाद किसी प्रकार का निश्चित बिंदु प्रारूप हो सकता है।


यह बस सभी नंबरों को फ्लोट के रूप में मान सकता है और एक तर्क 7.0 पर विचार कर सकता है।
ओलेग वी। वोल्कोव

@ ओलेगवी.व्ल्कोव शायद, लेकिन फिर आपको केवल दो फ़्लोटिंग पॉइंट नंबर लेने की आवश्यकता है, जिसका योग का कोई सही प्रतिनिधित्व नहीं है। इसके अलावा, आप घटाव में रद्द करने की त्रुटियों के लिए शिकार कर सकते हैं।
पीटर स्मिथ

3

रिवर्स पोलिश नोटेशन (RPN) कैलकुलेटर क्लासिक थे। नहीं, हालांकि रजिस्टर पदनाम विधानसभा भाषा की तरह लगता है, यह नहीं था। स्टैक पर बीजीय प्रारूप से अनुवाद करके गणना की गई थी। उपयोग किए गए नंबरों को स्टैक में धकेल दिया गया था और ऑपरेशन पिछले स्टैक किए गए मानों के बगल में पिछले स्टैक पर किए गए थे।

आप मानों को स्थानांतरित करने के लिए स्टैक को "घुमा" सकते हैं क्योंकि प्रदर्शित मूल्य एक स्टैक सदस्य था। लगभग जटिल गणना करने के लिए परिणामों को आवश्यक रूप से स्वैप या स्टैक किया जा सकता है। यदि आप स्टैक हार्डवेयर और असेंबली लैंग्वेज को समझते हैं, तो यह कैलकुलेटर सीखने के लिए तुच्छ था क्योंकि इसका प्रतिमान सबसे समान था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.