नकल निर्देश को आमतौर पर MOV क्यों कहा जाता है?


23

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

दूसरी ओर, अन्य संदर्भों में, "चाल" इस अर्थ में "कॉपी" से अलग है कि स्रोत नष्ट हो गया है (उदाहरण के लिए, यूनिक्स में "एमवी" बनाम "सीपीपी", नॉर्टन कमांडर और क्लोन में मूव [एफ 6] , आदि) ) असेंबलर के "मूव" में सिमेंटिक "कॉपी" है, जो सोर्स वैल्यू को बरकरार रखता है।

मैंने पाया है कि यह आईबीएम 1401 (1959) के बाद से कम से कम शुरू हुआ है , लेकिन, आईबीएम 360 ने इस शब्द का उपयोग केवल इन-स्टोरेज कॉपी करने के लिए किया है, लेकिन रजिस्टरों और स्टोरेज (जो "लोड" और "स्टोर" का उपयोग करते हैं) के बीच संचालन के लिए नहीं । लेकिन इसका अभी भी व्यापक रूप से उपयोग क्यों किया जाता है और इसे "कॉपी" या "स्टोर" से नहीं बदला जाता है?


5
विकिपीडिया कहता है : "इस ऑपरेशन के लिए शब्द चाल है, कड़ाई से बोल रहा है, एक मिथ्या नाम: इसका ऑब्जेक्ट ए से बी तक जाने की भौतिक अवधारणा के साथ बहुत कम है, ए के साथ जगह ए फिर खाली हो जाती है; इसके बजाय एक एमओवी एक प्रति बनाता है। A पर ऑब्जेक्ट की स्थिति और इस प्रक्रिया में B की पुरानी स्थिति को अधिलेखित करता है। यह कुछ अन्य असेंबली भाषाओं में लोड के बजाय लोड , स्टोर या कॉपी जैसे शब्दों का उपयोग करके परिलक्षित होता है । "
उवे कीम

@ युवीकेम हम्म, मैं सवाल से पहले स्पष्टीकरण के लिए गुगली कर चुका हूं लेकिन इस लेख से तंग नहीं आया। वैसे भी यह वर्तमान स्थिति की व्याख्या करता है लेकिन वास्तविक उत्पत्ति के लिए कोई सुराग नहीं देता है ...
Net

2
@gnat का अर्थ था "निर्देश सेट वास्तुकला", आईएसए बस नहीं। मैंने इसे रिजेक्ट कर दिया है।
नेट डेस

@ नेट धन्यवाद! मैं किसी भी तरह से याद कर पाया कि विकिपीडिया पर संवितरण
gnat

1
मुझे संदेह है कि यह पता लगाने का कोई तरीका है कि इसे मूल रूप से "कॉपी" के बजाय "चाल" क्यों कहा गया था, लेकिन अटकलें मजेदार हैं। असेंबली लैंग्वेज के लिए विकिपीडिया पेज पर , यह MOV को "डेटा की एक प्रति ले जाने" के लिए एक ऑपरेशन के रूप में वर्णित करता है, जो एक दिलचस्प व्याख्या है। एक और संभावना यह है कि एमओवी के वास्तविक उपयोगों के संदर्भ में, ऑपरेशन सैद्धांतिक रूप से डेटा की एक गति है; कि हम किसी भी अधिक स्रोत के बारे में परवाह नहीं करते हैं।
बेन ली

जवाबों:


10

कुछ अनुदेश सेटों में, मेमोरी से रजिस्टर लोड करने, मेमोरी में रजिस्टर स्टोर करने या रजिस्टरों के बीच चीजों को स्थानांतरित करने के लिए अलग-अलग निर्देश मौजूद होते हैं। जबकि कुछ असेंबली लैंग्वेज फॉर्म हर चीज के लिए क्रिया "लोड" का उपयोग करते हैं (जैसे कि Zilog का Z80 mnemonics उपयोग ld a,(1234h), ld (1234h),aऔर ld a,b), और कुछ "T" रैंस्फर (उदाहरण के लिए "TX के साथ 6502" स्थानांतरण X से A ") का उपयोग करते हैं, कुछ उपयोग" चाल "करते हैं। उन्हें लोड और स्टोर से अलग करने के लिए रजिस्टर-टू-रजिस्टर संचालन के लिए। यदि किसी के पास 68000 जैसा एक निर्देश प्रारूप है, जो रजिस्टर-टू-रजिस्टर, रजिस्टर-टू-मेमोरी, मेमोरी-टू-रजिस्टर और यहां तक ​​कि मेमोरी-टू-मेमोरी ऑपरेशंस के लिए समान सामान्य अनुदेश फॉर्म का उपयोग करता है, तो क्रिया "चाल" है। शायद विकल्पों में से किसी की तुलना में एक बेहतर सामान्य-उद्देश्य क्रिया।

मुझे 8080 से पहले के मिनीकंप्यूटर या मेनफ्रेम निर्देश सेटों के बारे में कोई जानकारी नहीं है, लेकिन 8080 ने अधिकांश मेमोरी-एक्सेस निर्देशों के लिए "लोड" और "स्टोर" का इस्तेमाल किया और रजिस्टर-टू-रजिस्टर निर्देशों के लिए "mov", लेकिन अधिकांश निर्देश जो संचालित हो सकते थे एक मनमाने ढंग से 8-बिट रजिस्टर "M" पर भी काम कर सकता है, जो HL द्वारा संबोधित स्मृति स्थान था, इसलिए "M" से या "M" से वास्तव में लोड या स्टोर के रूप में व्यवहार करेगा।

"कॉपी" और "चाल" के बीच अंतर के लिए, मुझे संदेह है कि इस तथ्य से बहुत कुछ है कि कोड न तो रजिस्टर बना सकता है और न ही नष्ट कर सकता है; वे बस मौजूद हैं। कोड अनुक्रम के व्यवहार का वर्णन करने में mov bx,ax / mov ax,1234, यह पहला अर्थ कहता है कि पहली अनुदेश प्रतियां bx को कुल्हाड़ी से कहना है, और दूसरा निर्देश मूल्य को नष्ट कर देता है axऔर इसे 1234 के मान से बदल देता है, या क्या यह पहली बार देखने के लिए और अधिक समझ में आता है। निर्देश के रूप में bx से कुल्हाड़ी का मूल्य बढ़ गया है (कुल्हाड़ी में मूल्य "एक परवाह नहीं है"), और दूसरा अनुदेश 1234 के साथ कुल्हाड़ी (जो कि देखभाल नहीं किया गया था) को लोड करता है? कभी-कभी रजिस्टर-ट्रांसफर निर्देश के बाद भी स्रोत रजिस्टर सार्थक होता है, लेकिन चूंकि यह निर्धारित करने के लिए निर्देश सेट में कुछ भी नहीं है कि यह क्या होगा,


मेरे पास आपके उत्तर का समर्थन करने के लिए कोई सबूत नहीं है, लेकिन यह निश्चित रूप से सही लगता है। मेमोरी / कैश में जाने के कारण सीपीयू / स्टोरकोड में लोड / स्टोर ऑपरेशन एक अलग रास्ता लेने जा रहे हैं, लेकिन रजिस्टरों के बीच घूमना एकल-चक्र (अन्य पाइपलाइन चरणों पर इंतजार करने की आवश्यकता नहीं) हो सकता है और इसलिए विभेद करने लायक है। लेकिन यह कदम-बनाम-कॉपी की व्याख्या नहीं करता है ...
JBRWilkinson

माना। उदाहरण के लिए मेमोरी-मैप्ड इनपुट डिवाइस पर विचार करें। स्रोत स्थान को पढ़ना इसे संशोधित कर सकता है - उदाहरण के लिए उस आइटम को छोड़ना जिसे आप हार्डवेयर कतार से पढ़ते हैं, इसे अगली पंक्तिबद्ध आइटम से बदल दें। यह एक प्रति के बजाय एक चाल की तरह लगता है - स्रोत अब उस जानकारी को नहीं रखता है, केवल गंतव्य करता है। और यह व्यवहार CPU द्वारा तय नहीं किया गया है, यह उस मेमोरी-मैप्ड डिवाइस द्वारा तय किया गया है।
स्टीव ३४

असेंबली लैंग्वेजेस में mnemonics का उपयोग होता है जो "CPU-केंद्रित" है। यही है, सब कुछ सीपीयू के रजिस्टरों के दृष्टिकोण से नामित किया गया है। इस प्रकार, "लोड" आमतौर पर एक रजिस्टर में एक मूल्य को कॉपी करता है, जबकि "स्टोर" आमतौर पर एक रजिस्टर से मेमोरी में कॉपी करता है। फिर एक रजिस्टर से दूसरे रजिस्टर में मूल्य की नकल करने के लिए क्या कहेंगे? "हटो" एक स्पष्ट पसंद है। यदि एक ही माइक्रोकोड ऑपरेशन दोनों (68000 में) करता है, तो "मूव" लोड / स्टोर के लिए अधिक सामान्य विकल्प है। "कॉपी" का उपयोग किया जा सकता था, लेकिन यह निरर्थक हो सकता है क्योंकि वास्तव में एक सच्ची "चाल" जैसी कोई चीज नहीं है, जहां स्रोत खाली छोड़ दिया गया है।
DocSalvager

@DocSalvage: यदि 32-बिट रजिस्टर 32 फ़्लॉप फ्लॉप या लैचेज़ का एक निश्चित गुच्छा है जो हमेशा मौजूद रहेगा, "चाल" जरूरी नहीं है। रजिस्टर नामकरण के साथ आर्किटेक्चर में, हालांकि, एक "चाल" ऑपरेंड जो स्रोत को अमान्य भी करेगा, वर्चुअल रजिस्टर को मुक्त करके दक्षता में सुधार कर सकता है। मैंने ऐसा कभी नहीं किया है, लेकिन मैंने ऐसा कोई आर्किटेक्चर नहीं जाना है, जिसे रजिस्टर-रीनेमिंग को ध्यान में रखकर बनाया गया हो।
सुपरकैट

@ सुपर कंप्यूटर: कंप्यूटर हार्डवेयर में, सभी रजिस्टरों और सभी मेमोरी स्थानों में हर समय एक मूल्य होता है। वास्तव में "नल" या "रिक्त" जैसी कोई चीज नहीं है। जब रजिस्टर या मेमोरी सामग्री अमान्य हो, तो हम यह सूचित करने के लिए मनमाने सम्मेलनों का उपयोग करते हैं। बहुत बार, हम "0" को "नल" का संकेत देते हैं, लेकिन हमेशा नहीं। उदाहरण के लिए स्मृति के एक ब्लॉक की "अशक्त" स्थिति किसी अन्य स्थान में संग्रहीत पते को शुरू और समाप्त करने से संकेतित हो सकती है। वहाँ कई अन्य तकनीकों के रूप में अच्छी तरह से कर रहे हैं। अंततः, भाषा की भाषाएं मनमानी हैं, हालांकि हम सबसे व्यापक रूप से समझने वाले विकल्प के लिए प्रयास करते हैं।
डॉकस्वलगर

0

आप निश्चित रूप से सही हैं। सबसे अधिक नहीं अगर एक अनुदेश के सभी उदाहरण वास्तव में एक प्रति है।

कुछ वास्तव में भी एक mov नहीं है यह एक छद्म निर्देश है

add dest=source+zero.

यह भी समझ लें कि एससीआईआई सिंटैक्स मनमाना है, मशीन कोड का मतलब कुछ है और उस प्रोसेसर के लिए परिभाषित और तय किया गया है। यदि प्रोसेसर क्रिएटर / वेंडर सभी को निर्देश सेट (मशीन कोड) को परिभाषित करने के लिए एक सिंटैक्स नहीं बनाता है और उस सिंटैक्स को परिभाषित करने के लिए जो उस उपकरण के साथ काम करता है या चालू करता है, तो उस असेंबली भाषा को मशीन में बदलने के लिए। उनके प्रोसेसर के लिए कोड। आप निश्चित रूप से उदाहरण के लिए ग्नू असेम्बलर में जा सकते हैं (जिसमें अपनी चीज़ करने की प्रवृत्ति है और प्रोसेसर विक्रेताओं के सिंटैक्स का पालन नहीं करना है) और एक कॉपी छद्म निर्देश जोड़ें।

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

मुझे गंभीरता से संदेह है कि हम कभी भी जान पाएंगे कि पहले कौन सा व्यक्ति या टीम इस शब्द के साथ आया था और उन्होंने प्रतिलिपि पर क्यों चुना। क्योंकि हम इसके आदी हो गए हैं इसलिए हम इसे हर नए निर्देश सेट के साथ फिर से उपयोग करते हैं। जैसा कि पहले ही उल्लेख किया गया है कि कुछ निर्देश सेट रजिस्टर आधारित लोड और स्टोर निर्देशों का उपयोग करते हैं जहां एक ऑपरेंड एक रजिस्टर है और दूसरा एक पता है, और केवल रजिस्टर के लिए मामला दर्ज करने के लिए mov है। और अन्य अनुदेश सेट या तो संचालन के लिए रजिस्टर या मेम के लिए mov का उपयोग करते हैं। यद्यपि आप निश्चित रूप से किसी भी / कई ओपन सोर्स असेंबलरों में प्रतिलिपि जोड़ सकते हैं, इसके उपयोग पर कर्षण प्राप्त करना अधिक कठिन होगा। यदि आप कहीं पर काम करते हैं जहाँ आपका मूल सिंटैक्स पर नियंत्रण होता है (एक नया प्रोसेसर बनाने वाले स्थान के लिए काम) जहाँ आप रजिस्टर को रजिस्टर करने के लिए ले जा सकते हैं, तो इसे कॉपी कहा जाता है,


-4

एक निर्देश को बदलने का मतलब है कि पिछड़ी संगतता को तोड़ना। नए सिंटैक्स के साथ एक असेंबलर पुराने सिंटैक्स के साथ लिखे गए कोड को इकट्ठा करने में सक्षम नहीं होगा - जब तक कि कोड उस निर्देश का उपयोग नहीं करता है (और एकमात्र स्थान जहां आप असेंबली कोड देखेंगे जो उपयोग नहीं करता MOVहै सिंटैक्स उदाहरणों में है) अन्य निर्देश दिखाएं ...)

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

तो, हम एक विशाल कोड टूटना के बारे में बात कर रहे हैं, और किस लिए? यह भाषा को और अधिक पठनीय नहीं बनाएगा, क्योंकि कुछ उच्च स्तरीय भाषा के विपरीत, आपको यह बताने का कोई मौका नहीं है कि विधानसभा कोड को विधानसभा जाने बिना क्या होता है, और यदि आप विधानसभा जानते हैं तो आपको पता है कि क्या MOVकरता है।

शून्य लाभ के साथ बड़ी लागत आसानी से बताती है कि निर्देश का नाम क्यों नहीं बदला गया।


3
यह पूछे गए प्रश्न का उत्तर कैसे देता है?
gnat

2
एक प्रश्न चिह्न के साथ समाप्त होने वाला एकमात्र वाक्य है 'लेकिन क्यों इसे अभी भी व्यापक रूप से उपयोग किया जाता है और इसे "कॉपी" या "स्टोर?' 'से नहीं बदला जाता है।
इदं आर्ये

2
यह स्पष्ट नहीं करता है कि स्क्रैच से डिजाइन किए गए अनगिनत ISAs द्वारा (जैसे कि पीछे की ओर से अनुकूलता की कमी के कारण) कई दशकों से निर्देश को क्यों शुरू किया गया है। इसके अलावा, अगर कोई विक्रेता पीछे की संगतता के बावजूद महामारी को बदलना चाहता था, तो वे एक उपनाम प्रदान कर सकते हैं और इसके उपयोग को बढ़ावा दे सकते हैं।

1
"ओपी" किसके लिए खड़ा है? और, मैंने एक वास्तविक स्पष्टीकरण नहीं देखा है।
Net

1
मैं मूल रूप से पोस्ट कर रहा हूँ और मैं एस / 360 में स्मृति कोशिकाओं के बीच नकल राज्य जाएगा नहीं "थोड़ा अलग आपरेशन" लेकिन एक ही नकल की केवल विशेष मामला है। सवाल अभी भी अनसुलझा है।
Net
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.