मुझे पता है कि हर निर्देश में ऑपकोड होते हैं।
मुझे mov , उप निर्देशों के लिए opcodes मिल सकते हैं।
लेकिन चर और उसके प्रकारों के लिए ओपकोड क्या है।
हम एक चर और स्थिरांक को परिभाषित करने के लिए कोडांतरक निर्देशों का उपयोग करते हैं?
x86 opcodes में उनका प्रतिनिधित्व कैसे किया जाता है?

एनएसएम असेंबलर x86:

segment .bss 
largest resb 2  ; reserves two bytes for largest
segment .data number1 DW 12345 ; defines a constant number1

मैंने इस https://defuse.ca/online-x86-aassembler.htm# को ऑनलाइन आजमाया। ऑपोड कन्वर्टर के लिए असेंबली असेंबली। लेकिन जब मैंने एक चर को परिभाषित करने के लिए NASM कोड का उपयोग किया तो यह त्रुटि दिखाता है!

-3
Naveen prakash 20 नवम्बर 2017, 16:01
प्रत्येक असेंबलर (प्रोग्राम जो असेंबली भाषा पढ़ता है) अपनी असेंबली भाषा को परिभाषित करता है, इसलिए आपको यह देखना होगा कि एक विशेष असेंबलर अपने वाक्यविन्यास के लिए क्या उपयोग करता है .... मैनुअल पढ़कर ... या गुगलिंग।
 – 
old_timer
20 नवम्बर 2017, 16:03
2
DW और resb "सच" असेंबली निर्देश नहीं हैं, उनके पास कोई संगत मशीन निर्देश या "ऑपकोड" नहीं है। वे छद्म निर्देश हैं जिन्हें असेंबलर प्रोग्राम द्वारा आंतरिक रूप से नियंत्रित किया जाता है। मेरा सुझाव है कि आप असेंबलरों के बारे में कुछ और शोध करें और वे कैसे काम करते हैं।
 – 
Some programmer dude
20 नवम्बर 2017, 16:04

2 जवाब

चर के लिए कोई ऑपोड नहीं है। मशीन कोड में भी कोई चर नहीं हैं।

सीपीयू और मेमोरी है। मेमोरी में कुछ मान (बाइट्स) होते हैं।

सीपीयू में cs:ip निर्देश सूचक है, स्मृति पते की ओर इशारा करते हुए, निष्पादित करने के लिए अगला निर्देश कहां है, इसलिए यह उस पते से बाइट (ओं) को पढ़ेगा, और उन्हें ओपकोड के रूप में व्याख्या करेगा, और इसे एक निर्देश के रूप में निष्पादित करें।

चाहे आपके पास मेमोरी में संग्रहीत डेटा हो या मशीन कोड कोई फर्क नहीं पड़ता, दोनों बाइट मान हैं।

मेमोरी "डेटा" या "वेरिएबल" का हिस्सा चलने वाले कोड द्वारा बनाई गई तार्किक व्याख्या है, यह कोड है जो स्मृति के कुछ हिस्से को केवल "डेटा/चर" और स्मृति के अन्य भाग को "कोड" के रूप में उपयोग करता है (या अंततः दोनों एक ही समय में, जैसे इस DOS 51B लंबे COM कोड में यूनान का ध्वज खींच रहा है स्क्रीन, जहां XLAT निर्देश कोड ऑपकोड का उपयोग ब्लू/व्हाइट स्ट्रिप्स कॉन्फ़िगरेशन के लिए स्रोत डेटा के रूप में भी कर रहा है)।

चाहे आप अपने स्रोत में लिखें:

x:
    add     al,al

या

x:
    db 0x00, 0xC0

कोई फर्क नहीं पड़ता, परिणामी मशीन कोड समान है (दोनों ही मामलों में सीपीयू add al,al निष्पादित करेगा जब उस मेमोरी को निर्देश के रूप में निष्पादित किया जाएगा, और mov ax,[x] ax को { पर सेट करेगा। 0xC000 दोनों मामलों में, जब "चर" के रूप में उपयोग किया जाता है।

आप स्वयं को देखने के लिए कोडांतरक (-l <listing_file_name> कमांड लाइन विकल्प nasm) से लिस्टिंग फ़ाइल की जांच करना चाह सकते हैं, यह बताने का कोई तरीका नहीं है कि कौन से बाइट कोड हैं और कौन से डेटा हैं।

3
Ped7g 20 नवम्बर 2017, 16:26
धन्यवाद! लेकिन उच्च स्तरीय प्रोग्रामिंग भाषाओं में हम बहुत सारे चर घोषित करते हैं। जब इसे मशीनी भाषा में परिवर्तित किया जाता है, यदि कोई चर नहीं है, तो यह सभी डेटा का ट्रैक कैसे रखेगा?
 – 
Naveen prakash
20 नवम्बर 2017, 16:34
संकलक कोड उत्पन्न करता है जो स्थिर/चर के रूप में काम कर रहे स्मृति के कुछ टुकड़े के तार्किक-निर्माण को बनाता है। कुछ मामलों में, जैसे उन्नत डेटा प्रकार/वर्ग (std::map) यह बहुत सारे कोड हो सकते हैं। यदि इस तरह के कोड में कुछ बग है, तो यह भ्रम को तोड़ देगा और आपको रनटाइम के दौरान अजीब व्यवहार मिलेगा, इसलिए कंपाइलर्स को "सही" कोड बनाने में बहुत अच्छा होना चाहिए (उच्च स्तरीय भाषा परिभाषा के दृष्टिकोण से, उदाहरण के लिए C++ में अमूर्त मशीन की परिभाषा, जिसे भाषा संशोधित कर रही है और संकलक विशेष मंच के लिए इस सार मशीन को लागू करता है)।
 – 
Ped7g
20 नवम्बर 2017, 16:39
आमतौर पर विशेष प्रकार के चर के लिए ऐसा कोड आंतरिक रूप से इनपुट "पॉइंटर" या "रेफरेंस" (तकनीकी रूप से मेमोरी एड्रेस) के रूप में लेता है, जो इस तरह के चर के विशेष उदाहरण के लिए आरक्षित मेमोरी के पहले बाइट को चिह्नित करता है। अर्थात। C++ में int i = 123; मूल्य को स्टोर करने के लिए 4 बाइट्स मेमोरी आरक्षित कर सकता है 123 (हालांकि कंपाइलर भी मान को केवल रजिस्टर में रखने का निर्णय ले सकता है, बिना मेमोरी को रिजर्व किए), और फिर कोड ++i; उस मेमोरी में मान बढ़ाएंगे। ऐसे मामले में आरक्षण + पॉइंटर को कंपाइलर द्वारा काफी हार्डकोडेड तरीके से उत्सर्जित किया जा सकता है, जैसे कि "i" निश्चित स्थानीय स्टैक स्थिति में है।
 – 
Ped7g
20 नवम्बर 2017, 16:42

segment, resb, या dw जैसे असेंबलर निर्देश निर्देश नहीं हैं और ऑपकोड के अनुरूप नहीं हैं। इसलिए वे निर्देश के बजाय निर्देश हैं। मोटे तौर पर, निर्देश दो प्रकार के होते हैं:

  • एक तरह का निर्देश असेंबलर को कॉन्फ़िगर करता है। उदाहरण के लिए, segment निर्देश असेंबलर को आपके द्वारा प्रदान किए गए अनुभाग में असेंबली जारी रखने के लिए कॉन्फ़िगर करता है।
  • एक अन्य प्रकार का निर्देश डेटा उत्सर्जित करता है। उदाहरण के लिए, dw निर्देश दिए गए डेटा को ऑब्जेक्ट फ़ाइल में उत्सर्जित करता है। इसका उपयोग आपके प्रोग्राम के उपयोग के लिए मनमाने ढंग से डेटा को स्मृति में रखने के लिए किया जा सकता है।
1
fuz 20 नवम्बर 2017, 16:08