← सभी पाठ

छोटे प्रोग्राम बनाएँ · 30 में पाठ 30 · लगभग 20 मिनट

आपका अपना छोटा ऑपरेटिंग सिस्टम

कतार के काम सेवाओं को भेजें और परिणाम दर्ज करें।

01 / समझाएँ

विचार समझें

ऑपरेटिंग सिस्टम संसाधनों का समन्वय करता और प्रोग्रामों को सेवाएँ देता है। अंतिम प्रोजेक्ट जानबूझकर छोटा वितरक है, पूरा आधुनिक OS नहीं: वह काम की कतार पढ़ता है, सेवा चुनता है, बुलाता है और परिणाम दर्ज करता है।

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

02 / आज़माएँ

होते हुए देखें

दो सेवा परिणाम 8 और 9 हैं। चुनौती कतार, चयन शाखाएँ और तीसरी सेवा जोड़ती है।

LOAD 4
CALL double
STORE 64
PRINT
LOAD 3
CALL square
STORE 65
PRINT
HALT
double: MUL 2
RETURN
square: MUL R0
RETURN

एक समय में एक निर्देश के लिए एक कदम लें। उदाहरण बदलकर फिर चला सकते हैं।

03 / चुनौती

इसे काम करने दें

N (0–3), फिर N (क्रिया, मान) जोड़े पढ़ें। क्रिया 0 दुगना, 1 वर्ग और 2 एक जोड़े। CALL सबरूटीन से चयन करें। हर पूरा परिणाम छापें और उसकी बाइट काम के क्रम में पते 64, 65, … पर रखें।

जाँचक संपादक के वर्तमान प्रोग्राम को हर 4 मामले के लिए नई मशीन में चलाता है। वह इनपुट और मेमोरी खुद देता है; प्रयोगशाला का वर्तमान आउटपुट और मेमोरी परिणाम तय नहीं करते।

INPUT
COPY R0 R3
LOAD 64 R2
LOOP R3
INPUT
COPY R0 R4
INPUT
COPY R0 R1
#
RETURN
HALT
double: MUL 2
RETURN
square: MUL R0
RETURN
increment: ADD 1
RETURN
संकेत चाहिए?

CMP के लिए क्रिया कोड लोड करने से पहले काम का मान बचाएँ। चुनी सेवा बुलाने के तुरंत पहले मान बहाल करें।

हल किया समाधान दिखाएँ

प्रोग्राम पढ़ें, हर निर्देश का असर अनुमान करें, फिर प्रयोगशाला में एक-एक कदम चलाएँ।

INPUT
COPY R0 R3
LOAD 64 R2
LOOP R3
INPUT
COPY R0 R4
INPUT
COPY R0 R1
LOAD R4
CMP 0
JUMP_IF_ZERO doubleJob
CMP 1
JUMP_IF_ZERO squareJob
LOAD R1
CALL increment
JUMP finish
doubleJob: LOAD R1
CALL double
JUMP finish
squareJob: LOAD R1
CALL square
finish: STORE R2
PRINT
LOAD R2
ADD 1
COPY R0 R2
RETURN
HALT
double: MUL 2
RETURN
square: MUL R0
RETURN
increment: ADD 1
RETURN

इमोजी CPU प्रयोगशाला

तैयार · 0 चक्र

इमोजी प्रोग्राम

LOAD, ADD या दूसरा निर्देश नाम लिखकर Space दबाएँ ताकि इमोजी जुड़े। Ctrl/⌘ + Enter चलाता/रोकता है; Escape रोकता है; Ctrl/⌘ + ] इंडेंट करता है। Tab फोकस बदलता है। लेबल कोलन लेते हैं। जंप शून्य-आधारित निर्देश पते लेते हैं।

निर्देश मानचित्र और ब्रेकपॉइंट (0)

ब्रेकपॉइंट निर्देश से पहले रोकते हैं। चलाएँ रुके ब्रेकपॉइंट के पार एक बार बढ़ता है; एक कदम सीधे निर्देश चलाता है। स्रोत बदलने से पुराने ब्रेकपॉइंट और मशीन स्थिति साफ़ होते हैं।

    CPU रजिस्टर

    R0
    0
    R1
    0
    R2
    0
    R3
    0
    R4
    0
    R5
    0
    R6
    0
    R7
    0
    प्रोग्राम काउंटर (PC)
    0
    स्टैक संकेतक (SP)
    255
    फ्लैग
    शून्य: निष्क्रिय · ऋणात्मक: निष्क्रिय · ओवरफ़्लो: निष्क्रिय
    विलंब अनुरोध
    0 ms
    स्टैक और लूप फ़्रेम

    SP = 255 − डेटा गहराई − कॉल गहराई। स्टैक मेमोरी से अलग है।

    डेटा स्टैक (नीचे → ऊपर)

    खाली

    कॉल वापसी पते (नीचे → ऊपर)

    खाली

    लूप फ़्रेम

    खाली

    आउटपुट और इनपुट

    आउटपुट देखने के लिए PRINT चलाएँ।

    कतार का इनपुट: खाली

    मेमोरी · 256 बाइट · 0 गैर-शून्य

    हर खाना पता:मान दिखाता है। R = इस कदम में पढ़ा; W = इस कदम में लिखा। जाँचने या निष्पादन से पहले मान रखने के लिए खाना चुनें। तीर कुंजियों से चलें, पंक्ति के लिए Home/End और पूरी मेमोरी के लिए Ctrl/⌘ + Home/End लें।

    मेमोरी मान रखने से पहले रीसेट करें। संग्रहित मान 0–255 में लपेटते हैं।
    निष्पादन रिकॉर्ड · 0 प्रविष्टियाँ

    हाल की प्रविष्टियाँ नीचे हैं। अलग पूर्ण पहले/बाद की स्थिति के लिए कोई भी शून्य-आधारित क्रमांक जाँचें।

    अपनी चुनौती जाँचें

    जब चाहें जाँच सकते हैं। पूर्णता दर्ज करने के लिए हर मामला पास हो।

    प्रगति केवल localStorage लेती है। इस ब्राउज़र में रहती है और सर्वर पर नहीं जाती।