2014-10-17 9 views
7

मैं गेमबॉय एमुलेटर पर काम कर रहा हूं, और मैंने देखा है कि कुछ ओपकोड मौजूद हैं जो LD A, A, LD B, B, आदि और AND A जैसे किसी भी मान को कभी भी नहीं बदलेंगे। सबसे पहले स्पष्ट रूप से कुछ भी नहीं बदलते क्योंकि वे रजिस्टरों के मूल्य को उसी रजिस्टरों में लोड करते हैं, और AND की तुलना A रजिस्टर से की जा रही है, AND A हमेशा A लौटाएगा। क्या इन परिचालनों के लिए कोई उद्देश्य है, या अनिवार्य रूप से प्रत्येक चक्र के बाद NOP जैसा ही है?गेमबॉय (z80) ऑपोड उद्देश्य

+5

मुझे लगता है कि वे उसी कारण से मौजूद हैं क्योंकि आप x86 में 'mov eax, eax' लिख सकते हैं: कुछ एन्कोडिंग का उपयोग करने के लिए एन्कोडिंग स्पेस को जटिल बनाने के लायक नहीं था। (मैं गेम बॉय या जेड 80 के साथ पर्याप्त परिचित नहीं हूं कि क्या इन निर्देशों में कोई छुपा माइक्रोआर्कैक्चरल साइड इफेक्ट्स है, क्षमा करें।) –

+2

यह 8008 प्रोसेसर, 1 9 70 में वापस चला गया। सरलता महत्वपूर्ण थी, इसमें केवल 3500 ट्रांजिस्टर थे। बाद में 8080 और जेड 80 ने निर्देश सेट डिज़ाइन की प्रतिलिपि बनाई। उनके लिए कोई उद्देश्य नहीं, केवल निर्देश डिकोडर तर्क को सरल रखना है। –

उत्तर

10

Jeffrey Bosboom और Hans Passant के रूप में उनकी टिप्पणी पर कहा, कारण सादगी है। अधिक विशेष रूप से हार्डवेयर सादगी।

LD r,r' निर्देश गंतव्य रजिस्टर (r') की सामग्री को गंतव्य रजिस्टर (r) पर कॉपी करें। LD r,r' opcodes इस फार्म का पालन करें:

 ------------------------------- 
BIT | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
     ------------------------------- 
OPCODE | 0 | 1 |  r  |  r' | 
     ------------------------------- 

गंतव्य और स्रोत रजिस्टरों इन मूल्यों को ग्रहण कर सकते हैं:

----------- 
| BIT | REG | 
----------- 
| 111 | A | 
----------- 
| 000 | B | 
----------- 
| 001 | C | 
----------- 
| 010 | D | 
----------- 
| 011 | E | 
----------- 
| 100 | H | 
----------- 
| 101 | L | 
----------- 

आदेश इन निर्देशों का हार्डवेयर में हम सिर्फ एक बहुसंकेतक कि बिट्स 0-2 प्राप्त करता चयन करने की आवश्यकता लागू करने के लिए स्रोत रजिस्टर और एक अन्य मल्टीप्लेक्सर जो गंतव्य रजिस्टर का चयन करने के लिए बिट्स 3-5 प्राप्त करता है।

यदि आप यह सत्यापित करना चाहते हैं कि बिट्स 0-2 और बिट्स 3-5 एक ही रजिस्टर पर इंगित कर रहे हैं तो आपको सीपीयू में और तर्क जोड़ना होगा। और जैसा कि हम सभी जानते हैं, ressources 80 के दशक में अधिक सीमित थे: पी

कृपया ध्यान दें कि लोडिंग निर्देश ऐसे LD A,A, LD B,B, LD C,C, LD D,D, LD E,E, LD H,H, और LD L,L व्यवहार NOP की तरह के रूप में। हालांकि AND A और OR ANOP की तरह व्यवहार नहीं करते हैं, क्योंकि वे ध्वज रजिस्टर को प्रभावित करते हैं, और उनका निष्पादन आंतरिक मशीन स्थिति को बदल सकता है।

+3

एक सॉफ्टवेयर परिप्रेक्ष्य से काम करना, हार्डवेयर को अनदेखा करना आसान है जो मूल प्रणाली पर होना चाहिए। बस मैं क्या देख रहा था, धन्यवाद। – zchbrntmr

+0

असल में (कम से कम Z80 पर, गेमबॉय का सीपीयू Z80 नहीं है, शायद Z80 या 8080 केवल ... Z80 सुविधाओं में से कई गायब हैं) एलडी, एलडी (एचएल), (एचएल) संयोजन के साथ एकमात्र अपवाद (एचएल) नहीं है अस्तित्व में है और इसका मतलब है एचएएलटी (इसलिए एक पूरी तरह से अलग बात)। लेकिन (एचएल) संदर्भ वैसे भी थोड़ा सा विशेष है, भले ही यह सामान्य एलडी आर 1, आर 2 ब्लॉक ओएस ऑपोड्स में से एक है। – LGB

6

LD A,A और AND A जैसे निर्देश NOP एस हो सकते हैं लेकिन वे प्रोसेसर झंडे को भी बदल सकते हैं और एक रजिस्टर के मूल्य का परीक्षण करने के लिए उपयोग किए जा सकते हैं।

ऐसे साइड इफेक्ट्स के लिए निर्देश सेट दस्तावेज़ों को ध्यान से जांचना सुनिश्चित करें।

+0

'और ए 'शून्य की तुलना करने के लिए बेवकूफ तरीका है यदि स्मृति सेवा करता है; परिणामस्वरूप दो और कम चक्रों की बजाय यह एक बाइट है। – Tommy

+0

'एलडी आर, आर '* नहीं * झंडे को बदलता है, हालांकि। – usr2564301

2

वहाँ वास्तव में AND A (और साथ ही OR A) में इस प्रयोजन के अनुदेश है - यह झंडा Z सेट किए जाने पर A शून्य है और नहीं तो साफ करता है। इसलिए AND A और OR A दोनों इस उद्देश्य के लिए अक्सर उपयोग किए जाते हैं।

+1

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

संबंधित मुद्दे