कई इंटेल/AMD x86 निर्देश "modrm" प्रारूप में उपलब्ध हैं को संदर्भित करता है - वे दो ऑपरेंड, है जिनमें से एक एक रजिस्टर होना चाहिए, जिसमें से दूसरा एक रजिस्टर हो सकता है, या एक स्मृति संदर्भ, जिसका पता निर्देश एन्कोडिंग के मॉडर बाइट द्वारा निर्धारित किया जाता है, और संभवतः निर्देश के बाद के बाइट्स द्वारा, जैसे कि सिब (स्केल इंडेक्स बाइट) , और तत्काल निरंतर/स्मृति ऑफ़सेट। और एक संभावित सेगमेंट उपसर्ग बाइट द्वारा भी।
आम तौर पर इन, रेग, पंजीकरण/मेम निर्देश दिए गए हैं प्रपत्र
rsrcdst += rsrc
or
rsrcdst += Memory[ ... addressessing mode ...]
लेकिन 86 विधानसभा कोड का अलग opcodes/रेग, रेग और रेग, इन निर्देशों का मेम रूपों के लिए अनुदेश स्मृति सहायकों नहीं है। चाहे एक ऑपरेंड एक रजिस्टर या स्मृति स्थान है, असेंबलर में, असेंबली सिंटैक्स द्वारा इंगित किया गया है।
इस मामले में, अपने विधानसभा कोड
MOVSX ECX, बाइट PTR डी एस है: [EDX]
अनुदेश opcode MOVSX है।
गंतव्य ऑपरेंड ईसीएक्स पंजीकृत है।
स्रोत ऑपरेंड "BYTE PTR DS: [EDX]" है। यह एक स्मृति संदर्भ कई चीजों से संकेतित है: (1) "[ईडीएक्स]" के चारों ओर वर्ग ब्रैकेट्स - स्क्वायर ब्रैकेट मेमोरी के लिए एक लघुरूप हैं [...पता ...]। (2) "डीएस:" उपसर्ग, जो इंगित करता है कि यह डेटा सेगमेंट में है। रजिस्टर ऑपरेंड में ऐसा सेगमेंट उपसर्ग नहीं है। (3) "BYTE पीटीआर" - जो कहता है "डीएस: [ईडीएक्स] 'द्वारा निर्दिष्ट स्मृति पता ले लो, और इसे स्मृति में 8-बिट बाइट संदर्भित करने के रूप में व्याख्या करें"।
मुझे लगता है कि क्या आप वास्तव में चाहते हैं
MOVSX ECX,DL
"DL" 32-बिट का कम 8 बिट रजिस्टर EDX के लिए एक नाम है। अर्थात। डीएल = EDX.bits [7: 0]। दुर्भाग्य से, 86 अस्सेम्ब्लेर्स आमतौर पर डॉन टी की तरह वाक्य रचना स्वीकार "EDX.bits [7: 0]" (जब तक मैं उन्हें लिखा था), आप उप रजिस्टरों की ऐतिहासिक नाम जानना है तो:
AL = EAX.bits[7:0]
AH = EAX.bits[15:8]
AX = EAX.bits[15:0]
EAX = 32 bit register that "covers" all of the above
और इतने चालू: बीएल, सीएल, डीएल, डीआई, ...