पृष्ठभूमि: मुझे Unitech HT630 के लिए डेटा संग्रह प्रोग्राम लिखने का काम सौंपा गया है, जो एक मालिकाना डॉस ऑपरेटिंग सिस्टम चलाता है जो कुछ प्रतिबंधों के बावजूद 16-बिट एमएस डॉस के लिए संकलित निष्पादन योग्य चला सकता है। मैं डिजिटल मंगल सी/सी ++ कंपाइलर का उपयोग कर रहा हूं, जो बहुत अच्छी तरह से काम कर रहा है।सी में इनलाइन रूपों के इन दो रूपों के बीच क्या अंतर है?
कुछ चीजों के लिए मैं मानक सी पुस्तकालयों का उपयोग कर सकता हूं, लेकिन यूनिट की स्क्रीन पर ड्राइंग जैसी अन्य चीजों को असेंबली कोड की आवश्यकता होती है। डिवाइस के दस्तावेज़ीकरण में दिए गए असेंबली उदाहरण सी/सी ++ में इनलाइन असेंबली कोड का उपयोग करने के लिए सिखाए जाने से अलग हैं। संदर्भ के लिए, नीचे दिए गए उदाहरणों में BYTE
टाइप unsigned char
है। उदाहरण के कोड की
नमूना मैं दिया गया था:
#include <dos.h>
/* Set the state of a pixel */
void LCD_setpixel(BYTE x, BYTE y, BYTE status) {
if(status > 1 || x > 63 || y > 127) {
/* out of range, return */
return;
}
/* good data, set the pixel */
union REGS regs;
regs.h.ah = 0x41;
regs.h.al = status;
regs.h.dh = x;
regs.h.dl = y;
int86(0x10, ®s, ®s);
}
कैसे मैं हमेशा इनलाइन विधानसभा का उपयोग करने के लिए सिखाया गया था:
/* Set the state of a pixel */
void LCD_setpixel(BYTE x, BYTE y, BYTE status) {
if(status > 1 || x > 63 || y > 127) {
/* out of range, return */
return;
}
/* good data, set the pixel */
asm {
mov AH, 41H
mov AL, status
mov DH, x
mov DL, y
int 10H
}
}
दोनों रूपों काम करने के लिए लगता है, मैं एक समस्या का सामना करना पड़ा नहीं किया है अभी तक दृष्टिकोण के साथ। क्या डॉस प्रोग्रामिंग के लिए एक फॉर्म दूसरे से बेहतर माना जाता है? क्या int86
फ़ंक्शन मेरे लिए कुछ संभालता है कि मैं अपने उदाहरण को अपने दूसरे असेंबली कोड में दूसरे उदाहरण में नहीं रख रहा हूं?
किसी भी मदद के लिए अग्रिम धन्यवाद।
शीर्षक भ्रामक/गलत है। पहले संस्करण में कोई इनलाइन एएसएम नहीं है, सिस्टम कॉल के आस-पास एक फंक्शन-कॉल रैपर है। (या एक कंपाइलर 'int86()' को आंतरिक के रूप में कार्यान्वित कर सकता है और दाएं एएसएम को रेखांकित कर सकता है)। –