जब मैं इसे विजुअल स्टूडियो में चलाता हूं, तो यह मुझे प्रोजेक्ट को सफलतापूर्वक बनाने देता है।

.data
   val1 DWORD -1

चूंकि DWORD अहस्ताक्षरित है, इसलिए त्रुटि में ऋणात्मक मान परिणाम इनपुट नहीं करना चाहिए?

3
Hashim Amin 21 फरवरी 2019, 12:44

1 उत्तर

सबसे बढ़िया उत्तर

सब कुछ सिर्फ बिट्स का एक पैटर्न है। उदाहरण के लिए (NASM सिंटैक्स - dd का अर्थ है "डेटा डॉर्ड"), ये मान बिट्स के समान पैटर्न हैं:

    dd '4321'               ;Interpreted as ASCII characters
    dd 0x31323334           ;Interpreted as an unsigned hexadecimal number
    dd 825373492            ;Interpreted as a signed decimal number

..और यह कोड भी बिट्स का ठीक वैसा ही पैटर्न है, जिसकी व्याख्या (32-बिट) निर्देशों के रूप में की जाती है:

    xor al,0x33
    xor dh,[ecx]

..और यह कोड अभी भी बिट्स का एक ही पैटर्न है, जिसे 16-बिट निर्देशों के रूप में व्याख्या किया गया है:

    xor al,0x33
    xor dh,[bx+di]

..और यदि आप चाहते हैं कि आप बिट्स के समान पैटर्न को 32-बिट फ्लोटिंग पॉइंट नंबर (2.59315147e-9), या एक निश्चित बिंदु संख्या (जैसे 12594.20001220703125), या बाइनरी कोडेड दशमलव संख्या (4321) के रूप में व्याख्या कर सकते हैं। , या रंग के रूप में (RGBA के लिए "अल्फ़ा के साथ गहरा धूसर"), या ध्वनि के भाग के रूप में, या...

बिट्स का पैटर्न कैसे बनाया जाता है, यह वास्तव में ज्यादा मायने नहीं रखता है। क्या मायने रखता है कि बिट्स के पैटर्न का उपयोग कैसे किया जाता है। उदाहरण के लिए, यदि आप add dword eax,[foo] करते हैं तो jb .somewhere तो शाखा निर्देश शायद इंगित करता है कि यह अहस्ताक्षरित जोड़ था, लेकिन यदि आप add dword eax,[foo] करते हैं तो jl .somewhere तो शाखा निर्देश शायद इंगित करता है कि यह जोड़ पर हस्ताक्षर किया गया था (भले ही अतिरिक्त निर्देश हस्ताक्षरित और अहस्ताक्षरित दोनों के लिए बिल्कुल समान है); लेकिन यदि आप fld dword [foo] करते हैं तो इसका उपयोग 32-बिट फ्लोटिंग पॉइंट मान के रूप में किया जा रहा है, या...

अभी; यदि आप 2 की तारीफ के काम करने के तरीके को देखते हैं तो आप देखेंगे कि (8-बिट पूर्णांक के लिए क्योंकि मैं 32-बिट टाइप करने के लिए बहुत आलसी हूं) दो श्रेणियां हैं:

00000000b to 01111111b = 0 to +127, regardless of signed or unsigned
10000000b to 11111111b = +128 to +255 if unsigned, or -128 to -1 if signed

दूसरे शब्दों में, 32-बिट पूर्णांकों के लिए, 0xFFFFFFFF (अहस्ताक्षरित) बिट्स के समान पैटर्न है जैसे -1 (हस्ताक्षरित); और क्योंकि बिट्स का पैटर्न समान है, इससे कोई फर्क नहीं पड़ता कि आप किस संस्करण का उपयोग करते हैं (कोड पठनीयता को छोड़कर)।

4
Brendan 21 फरवरी 2019, 12:35