जब कोई अन्य निर्देश वहां रखा जा सकता है, तो एक एनओपी को एक देरी स्लॉट में इस्तेमाल किया जा सकता है।
lw v0,4(v1)
jr v0
MIPS में, यह एक बग होगा क्योंकि उस समय jr रजिस्टर v0 को पढ़ रहा था रजिस्टर v0 को पिछले निर्देश से अभी तक मूल्य के साथ लोड नहीं किया गया है।
इसे ठीक करने का तरीका होगा:
lw v0,4(v1)
nop
jr v0
nop
यह लोड वर्ड के बाद घातक स्लॉट्स को भरता है और जप रजिस्टर निर्देशों को एक एनओपी के साथ भरता है ताकि जम्प रजिस्टर कमांड निष्पादित होने से पहले लोड वर्ड इंस्ट्रक्शन पूरा हो जाए।
आगे पढ़ने - देरी स्लॉट्स के स्पार्क भरने पर थोड़ा । उस दस्तावेज़ से:
देरी स्लॉट में क्या डाला जा सकता है?
- कुछ उपयोगी निर्देश जिसे निष्पादित किया जाना चाहिए चाहे आप शाखा करें या नहीं।
- कुछ निर्देश जो केवल तब काम करते हैं जब आप शाखा करते हैं (या जब आप शाखा नहीं करते हैं), लेकिन दूसरे मामले में निष्पादित होने पर कोई नुकसान नहीं करता है।
- जब बाकी सब विफल हो जाता है, तो एक एनओपी निर्देश
देरी स्लॉट में क्या नहीं डाला जाना चाहिए?
- कुछ भी जो सीसी को निर्धारित करता है कि शाखा का निर्णय निर्भर करता है। ब्रांच इंस्ट्रक्शन इस बात का निर्णय करता है कि ब्रांच को सही है या नहीं, लेकिन यह वास्तव में ब्रांच को देरी के निर्देश के बाद तक नहीं करता है। (केवल शाखा में देरी हुई है, निर्णय नहीं।)
- एक और शाखा निर्देश। (यदि आप ऐसा करते हैं तो क्या होता है यह भी परिभाषित नहीं किया गया है! परिणाम अप्रत्याशित है!)
- एक "सेट" निर्देश। यह वास्तव में दो निर्देश हैं, एक नहीं, और इसका केवल आधा विलंब स्लॉट में होगा। (असेंबलर आपको इस बारे में चेतावनी देगा।)
देरी स्लॉट में डालने के लिए तीसरे विकल्प पर ध्यान दें। बग जो आपने देखा था, संभवत: कोई व्यक्ति उन चीजों में से एक को भर रहा है जो देरी स्लॉट में नहीं डालनी चाहिए। उस स्थान पर एक झपकी लगाना तो बग को ठीक कर देगा।
नोट: प्रश्न को फिर से पढ़ने के बाद, यह x86 के लिए था, जिसमें देरी स्लॉट्स नहीं हैं (इसके बजाय पाइपलाइन स्टाल करते हैं)। तो यह बग का कारण / समाधान नहीं होगा। RISC सिस्टम पर, इसका उत्तर हो सकता है।