मैं डॉसबॉक्स एमुलेटर का उपयोग कर x86 के लिए असेंबली सीख रहा हूं। मैं गुणा करने की कोशिश कर रहा हूँ। मुझे नहीं लगता कि यह कैसे काम करता है। जब मैं निम्नलिखित कोड लिखता हूं:क्या x86 असेंबली में mul के साथ तत्काल गुणा करना संभव है?
mov al, 3
mul 2
मुझे एक त्रुटि मिलती है। हालांकि, संदर्भ मैं उपयोग कर रहा हूँ, यह गुणन में कहते हैं, यह मान लिया गया कुल्हाड़ी हमेशा जगह धारक है, इसलिए, अगर मैं लिखना:
mul, 2
यह 2. द्वारा al
मूल्य गुणा लेकिन यह मेरे साथ काम नहीं करता है ।
जब मैं निम्न प्रयास करें:
mov al, 3
mul al,2
int 3
मैं कुल्हाड़ी में परिणाम 9 मिलता है। स्पष्टीकरण के लिए यह तस्वीर देखें:
एक और प्रश्न: क्या मैं सीधे स्मृति स्थान का उपयोग कर गुणा कर सकता हूं? उदाहरण:
mov si,100
mul [si],5
आपके दूसरे कोड स्निपेट में टिप्पणी गलत है। 'Imul ax के बाद, 2' उत्पाद एएक्स में है (डीएक्स: एएक्स में नहीं)। –
यह भी ध्यान दें कि 'imul'- तत्काल एक 3-ऑपरेंड निर्देश है। तो आप इसे गैर-विनाशकारी रूप से उपयोग कर सकते हैं, जैसे 'imul cx, si, 1234'।यानी जब डीएसटी =: अधिकांश अस्सेम्ब्लेर्स आप लिखते हैं 'imul cx, 1234'' imul cx, cx, 1234', 'vaddps ymm0, ymm1' बजाय' vaddps ymm0, ymm0, ymm1' लिखने के समान के लिए एक छोटी हाथ के रूप में करते हैं src1। –