केवल रजिस्टरों पूर्णांक का उपयोग कर कोडांतरक स्तर के कार्यक्रम के लिए सी कार्यक्रम से नाव मूल्य पासिंग?

वोट
0

मेरी कक्षा के लिए हम एक सरल एएसएम कार्यक्रम (सी और एटी एंड टी x86-64 के साथ) लिख रहे हैं कि प्रिंट सब एक पूर्णांक या नाव के टुकड़े। मैं पूर्णांक भाग काम कर ठीक किया है। नाव भाग के लिए मेरी प्रोफेसर हमें निर्देश दिया है केवल पूर्णांक रजिस्टरों का उपयोग कर नाव मूल्य पारित करने के लिए। नहीं भी यकीन है कि क्यों हम करने के लिए उपयोग नाव रजिस्टरों अनुमति नहीं है। भले ही, किसी को भी कैसे इस बारे में जाने के लिए पर विचारों है?

02/12/2019 को 21:50
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
1

मेरे प्रोफेसर हमें निर्देश दिया है केवल पूर्णांक रजिस्टरों का उपयोग कर नाव मूल्य पारित करने के लिए।

एक साधारण दृष्टिकोण कॉपी करने के लिए है floatका उपयोग करते हुए एक पूर्णांक मेंmemcpy()

float f = ...;
assert(sizeof f == sizeof(uint32_t));

uint32_t u;
memcpy(&u, &f, sizeof u);
foo(u);

एक और एक का उपयोग करने के लिए है union। शायद एक का उपयोग कर परिसर शाब्दिक

void foo (uint32_t);

int main() {
  float f;
  assert(sizeof f == sizeof(uint32_t));

  //  v----------- compound literal -----------v
  foo((union { float f; uint32_t u; }) { .f = f}.u);
  //   ^------ union object ------- ^
}

दोनों की आवश्यकता है कि पूर्णांक प्रकार का इस्तेमाल किया और floatएक ही आकार के होते हैं।

अन्य मुद्दों दो का सही endian बीमा, अभी तक बहुत सामान्य की endians शामिल floatऔर पूर्णांक से मेल खाएगी।

07/12/2019 को 23:37
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more