19. स्टैक: अंत में रखा, पहले निकला
डेटा स्टैक में मान बचाएँ और उलटे क्रम में लौटाएँ।
यह पाठ खोलें →
1. अनुमान और निष्पादन क्रम
प्रयोग प्रोग्राम चलाने से पहले आउटपुट अनुमान करें और पहले तीन चलाए निर्देशों का क्रम लिखें। आवश्यक रजिस्टर, फ्लैग या मेमोरी दर्ज करें। फिर एक-एक कदम चलाकर मिलाएँ।
LOAD 11
PUSH
LOAD 22
PUSH
POP
PRINT
POP
PRINT
HALT
इनपुट कतार में रखें: कोई नहीं
मेमोरी शुरू करें: शुरू में सभी बाइट शून्य
प्रयोग अनुमान कुंजी
आउटपुट: 22, 11
2. बनाएँ और जाँचें
दो पूर्णांक पढ़ें, दोनों डेटा स्टैक पर बचाएँ और फिर उलटे क्रम में छापें। निश्चित मानों के बजाय PUSH और POP उपयोग करें।
ज़रूरी निर्देश प्रकार: INPUT, PUSH, POP
चुनौती समाधान उदाहरण
INPUT
PUSH
INPUT
PUSH
POP
PRINT
POP
PRINT
HALT
वास्तविक जाँच मामले
मामला 1
- इनपुट
3, 8- शुरुआती मेमोरी
शुरू में सभी बाइट शून्य- अपेक्षित आउटपुट
8, 3
मामला 2
- इनपुट
-4, 0- शुरुआती मेमोरी
शुरू में सभी बाइट शून्य- अपेक्षित आउटपुट
0, -4
मामला 3
- इनपुट
9, 9- शुरुआती मेमोरी
शुरू में सभी बाइट शून्य- अपेक्षित आउटपुट
9, 9
3. मशीन समझाएँ
दूसरा दिया मान पहले क्यों छपता है?
तर्क और शिक्षण टिप्पणी
PUSH/POP में अंत में रखा पहले निकलता है; 3,8 से 8,3; कॉल फ़्रेम डेटा नहीं हैं।
20. सबरूटीन को बुलाना
कोड फिर उपयोग करें और CALL के बाद वाले निर्देश पर लौटें।
यह पाठ खोलें →
1. अनुमान और निष्पादन क्रम
प्रयोग प्रोग्राम चलाने से पहले आउटपुट अनुमान करें और पहले तीन चलाए निर्देशों का क्रम लिखें। आवश्यक रजिस्टर, फ्लैग या मेमोरी दर्ज करें। फिर एक-एक कदम चलाकर मिलाएँ।
LOAD 3
CALL square
PRINT
LOAD 4
CALL square
PRINT
HALT
square: MUL R0
RETURN
इनपुट कतार में रखें: कोई नहीं
मेमोरी शुरू करें: शुरू में सभी बाइट शून्य
प्रयोग अनुमान कुंजी
आउटपुट: 9, 16
2. बनाएँ और जाँचें
दो पूर्णांक पढ़ें। प्रत्येक के लिए वही वर्ग निकालने वाली सबरूटीन बुलाएँ और इनपुट के क्रम में दोनों वर्ग छापें।
ज़रूरी निर्देश प्रकार: INPUT, CALL, MUL, RETURN
चुनौती समाधान उदाहरण
INPUT
CALL square
PRINT
INPUT
CALL square
PRINT
HALT
square: MUL R0
RETURN
वास्तविक जाँच मामले
मामला 1
- इनपुट
3, 4- शुरुआती मेमोरी
शुरू में सभी बाइट शून्य- अपेक्षित आउटपुट
9, 16
मामला 2
- इनपुट
-2, 5- शुरुआती मेमोरी
शुरू में सभी बाइट शून्य- अपेक्षित आउटपुट
4, 25
मामला 3
- इनपुट
0, 8- शुरुआती मेमोरी
शुरू में सभी बाइट शून्य- अपेक्षित आउटपुट
0, 64
3. मशीन समझाएँ
एक ही कोड की दो कॉल अलग जगह क्यों लौटती हैं?
तर्क और शिक्षण टिप्पणी
हर CALL अपना PC+1 अलग फ़्रेम में बचाता है; फ़ंक्शन साझा है पर आगे का स्थान अलग।
21. बुलाने वाले की स्थिति बचाना
फ़ंक्शन को अस्थायी जगह चाहिए तो बचाने और बहाल करने की सहमति अपनाएँ।
यह पाठ खोलें →
1. अनुमान और निष्पादन क्रम
प्रयोग प्रोग्राम चलाने से पहले आउटपुट अनुमान करें और पहले तीन चलाए निर्देशों का क्रम लिखें। आवश्यक रजिस्टर, फ्लैग या मेमोरी दर्ज करें। फिर एक-एक कदम चलाकर मिलाएँ।
LOAD 1 R1
LOOP 3
LOAD R1
CALL double
PRINT
LOAD R1
ADD 1
COPY R0 R1
RETURN
HALT
double: MUL 2
RETURN
इनपुट कतार में रखें: कोई नहीं
मेमोरी शुरू करें: शुरू में सभी बाइट शून्य
प्रयोग अनुमान कुंजी
आउटपुट: 2, 4, 6
2. बनाएँ और जाँचें
पहला बचाया मान R1 में और फिर फ़ंक्शन का मान पढ़ें। ऐसा सहायक बुलाएँ जो R1 का अस्थायी उपयोग करते हुए मान + 1 लौटाए। पहले परिणाम, फिर सुरक्षित पहला मान छापें। R1 बचाने के लिए PUSH और POP उपयोग करें।
ज़रूरी निर्देश प्रकार: INPUT, PUSH, POP, CALL, RETURN
चुनौती समाधान उदाहरण
INPUT
COPY R0 R1
INPUT
CALL helper
PRINT
LOAD R1
PRINT
HALT
helper: COPY R0 R2
LOAD R1
PUSH
LOAD 99 R1
LOAD R2
ADD 1
COPY R0 R2
POP
COPY R0 R1
LOAD R2
RETURN
वास्तविक जाँच मामले
मामला 1
- इनपुट
12, 3- शुरुआती मेमोरी
शुरू में सभी बाइट शून्य- अपेक्षित आउटपुट
4, 12- अपेक्षित अंतिम रजिस्टर
R1: 12
मामला 2
- इनपुट
-8, 0- शुरुआती मेमोरी
शुरू में सभी बाइट शून्य- अपेक्षित आउटपुट
1, -8- अपेक्षित अंतिम रजिस्टर
R1: -8
मामला 3
- इनपुट
7, -5- शुरुआती मेमोरी
शुरू में सभी बाइट शून्य- अपेक्षित आउटपुट
-4, 7- अपेक्षित अंतिम रजिस्टर
R1: 7
3. मशीन समझाएँ
कौन-सी बची स्थिति बुलाने वाले की है, फ़ंक्शन परिणाम की नहीं?
तर्क और शिक्षण टिप्पणी
संरक्षण सहमति R1 बताती है; उसे बचाएँ/लौटाएँ, परिणाम R0 में दें और अलग कॉल फ़्रेम न बदलें।