मैं सी में असेंबली के लिए नया हूं, और मुझे नहीं पता कि इस त्रुटि को कैसे ठीक किया जाए। मैं एक समारोह बना रहा हूं जिसका मतलब है कि एक फाइल लिखना है। मेरे पास क्या है:जब मैं रजिस्टरों का नाम देता हूं तो क्यों असंभव बाधाएं होती हैं?
ssize_t mywrite(int fd, const void *buf, size_t count) {
// return write(fd, buf, count);
ssize_t var;
__asm__("movl $4,%%eax\n\t" // Write
"movl %1,%%ebx\n\t"
"movl %2,%%ecx\n\t"
"movl %3,%%edx\n\t"
"int $0x80\n\t" // System call
"movl %%eax,%0"
:"=r"(var)
:"r"(fd),"r"(buf),"r"(count)
:"%eax","%ebx","%ecx","%edx"
);
return var;
}
मेरा एएसएम लिखने के समान ही है (एफडी, बफ, गिनती); जब मैं इसे संकलित करता हूं, तो मुझे "एएसएम 'ऑपरेंड में असंभव बाधाएं मिलती हैं"। हालांकि, यदि चर का नाम नहीं है और सीधे स्टैक से मान प्राप्त करें, तो मुझे कोई त्रुटि नहीं मिलती है। इधर, कोड
__asm__("movl $4,%%eax\n\t"
"movl 8(%%ebp),%%ebx\n\t"
"movl 12(%%ebp),%%ecx\n\t"
"movl 16(%%ebp),%%edx\n\t"
"int $0x80\n\t"
"movl %%eax,%0"
:"=r"(var)
:
:"%eax","%ebx","%ecx","%edx"
);
मैं दूसरी कोड का उपयोग कर सकता है ऑप्टिकल फाइबर केबल, लेकिन मैं इसे अनुकूलन 2. साथ संकलित तो% ईबीपी बात नहीं करेंगे, जहां मैं यह करने की जरूरत की जरूरत है। मैंने "आर" के बजाय "ए", "बी", "सी" और "डी" का उपयोग करने की कोशिश की, लेकिन कोई सफलता नहीं। कोई भी मदद कर सकता है? धन्यवाद: डी
क्या आप किसी भी मौके से 64 बिट मोड में संकलित कर रहे हैं? – fuz