पहली बात यह है कि शायद आप ट्रिपिंग है ऊपर है कि डी संकलक के opcodes की समर्थित सूची outb
शामिल नहीं है, के रूप में सी समारोह आपके द्वारा दी गई द्वारा निर्दिष्ट है। कुछ खोदने के बाद, मुझे पता चला है कि outb
सामान्य ओपोड out
के लिए एक और विशिष्ट नाम है। outb
इंगित करता है कि opcode के लिए पहला तर्क एक बाइट रजिस्टर में रखी जाएगी (जैसा कि outw
और outl
है, जो क्रमश: एक शब्द और एक डबल शब्द का एक पहला तर्क आकार से संकेत मिलता है के खिलाफ), तथापि, डी संकलक opcode का उपयोग करता है सभी परिचालनों के लिए out
, और निर्धारित करता है कि आपके द्वारा निर्दिष्ट तर्क के आकार के आधार पर कौन सा विशिष्ट ऑपोड लिखना है।
कि रास्ते से बाहर के साथ
, ऐसा करने के लिए अगली बात डी वाक्य रचना करने के लिए जीसीसी वाक्य रचना कन्वर्ट करने के लिए है। जीसीसी-इनलाइन-विधानसभा-विधिपत्र के अनुसार, कोड आपके द्वारा दी गई बढ़ाया विधानसभा सिंटैक्स का उपयोग करता:
asm (assembler template
: output operands /* optional */
: input operands /* optional */
: list of clobbered registers /* optional */
);
अपने टेम्पलेट को देखते हुए, समारोह एक विधानसभा अनुदेश (outb
) दो तर्कों, निर्दिष्ट करता है पहले किया जा रहा है एक बाइट (%b0
) और दूसरा शब्द या लघु पूर्णांक (%w0
) है।
इनपुट तर्क सूची के बारे में मुश्किल बिट श्रृंखला है कि आपके समारोह मापदंडों में से प्रत्येक के उपसर्ग है। हाउटो के अनुसार, इन्हें बाधा कहा जाता है। वे अनिवार्य रूप से नियम हैं कि जीसीसी को प्रदत्त असेंबली निर्देशों के तर्क के रूप में मानकों का उपयोग करने में पालन करना होगा।"a"
value
पैरामीटर पर लागू होता है इंगित करता है कि परिवर्तनीय की सामग्री को eax
, ax
, या al
में चर के आकार के आधार पर रखा जाना चाहिए। port
परिवर्तनीय, "Nd"
पर बाधा, पहले इंगित करती है कि मान 0-255 की सीमा में है, और दूसरा, मान को edx
, dx
, या dl
पर फिर से दर्ज किया जाना चाहिए, फिर से आकार के आधार पर चर।
डी कंपाइलर असेंबली ब्लॉक में चर के साथ जितना अधिक सहायता प्रदान नहीं करता है, जीसीसी करता है; डी के इनलाइन असेंबलर में, आपको विशेष रूप से उचित रजिस्टरों में पैरामीटर के मानों को स्थानांतरित करने की आवश्यकता होगी। outb
के लिए, ये पंजीयक dx
और al
हैं। D के इनलाइन विधानसभा वाक्य रचना के बाद, आप चर ले जाएँ और इस प्रकार out
opcode कॉल कर सकते हैं:
asm
{
MOV AL, value;
MOV DX, port;
OUT DX, AL;
}
ध्यान दें कि, क्योंकि जीसीसी एटी & टी कोडांतरक सिंटैक्स का उपयोग करता है, और डी इंटेल कोडांतरक वाक्य रचना, के आदेश का उपयोग करता है OUT
पर प्रदान किए गए तर्क उलट दिए गए हैं।