विधानसभा, लाइन द्वारा लाइन (कोड, शामिल नहीं क्योंकि आप इसे छवि के रूप में तैनात) करता है:
foo:
return_value (eax) = y; // !!!
temporary_edx = b; // x86 can't compare memory with memory, so "b" goes to register
set_flags_by(a-b); // cmp does subtraction and discards result, except flags
"jump less to return" // so when a < b => return y (see first line)
return_value (eax) = x;
return
ताकि सी कोड एक ही बात करते हैं बनाने के लिए, आप की जरूरत:
if (a >= b) { return x; } else { return y; }
Btw, देखना कितना आसान है फ्लिप करने के लिए है:
if (a < b) { return y; } else { return x; }
तो वहाँ jl
अनुवाद करने के लिए कोई मतलब नहीं है सी में "कम" में, आपको प्रत्येक शाखा को ट्रैक करना होगा, वास्तव में क्या होता है, और गणना की प्रत्येक शाखा को सही सी-साइड गणना के लिए ढूंढें, और फिर दोनों पक्षों पर समान गणना प्राप्त करने के लिए सी में स्थिति बनाएं " , इसलिए यह कार्य असेंबली को "अनुवाद" करने के बारे में नहीं है, लेकिन एएसएम तर्क को समझने के बारे में + इसे वापस सी में पुनः लिखना है।ऐसा लगता है कि आप पूरी तरह से इस बिंदु को याद करते हैं और उम्मीद करते हैं कि आप कुछ सरल "मिलान पैटर्न" अनुवाद से दूर हो सकते हैं, जबकि आपको इसे पूरी तरह से बाहर करना होगा।
फाउ किस प्रोसेसर प्रकार इस असेंबली भाषा है? मोटोरोला 68000? – Codor
'<' and '> =' एक दूसरे के विचलन हैं। पूर्व ('<') के साथ शायद कम या तेज़ निर्देश हैं, इसलिए यह एक अनुकूलन समस्या है। –
यह x86 असेंबली इंटेल है? – user2584325