के साथ एकल-परिशुद्धता फ्लोट को मुद्रित करने के लिए मैं x86_64 असेंबली में एक फ़्लोटिंग पॉइंट नंबर मुद्रित करने का प्रयास कर रहा हूं लेकिन यह केवल मान को शून्य के रूप में प्रिंट करता है।printf
इसके बारे में कुछ प्रश्न पहले से ही हैं। you set the number of vector registers you're using in %al सुनिश्चित करके एक हल किया गया। एक और दिखाया कि you need to have a stack alignment of 16 bytes। लेकिन, मैं उन दोनों चीजों को कर रहा हूं और अभी भी सही आउटपुट नहीं प्राप्त कर रहा हूं।
# prints a floating point value
.section .rodata
.fmt: .string "num: %f\n"
.num: .float 123.4
.section .text
.global main
.type main, @function
main:
subq $8, %rsp # 16-byte alignment
# print my number
movss .num, %xmm0 # load float value
movq $.fmt, %rdi # load format string
movb $1, %al # use 1 vector register
call printf
# exit
addq $8, %rsp # undo alignment
movq $0, %rax # return 0
ret
यह मेरे लिए आश्चर्यजनक है कि वर्षों से सी ++ लिखने और कई बार प्रिंटफ का उपयोग करने के बावजूद ... मुझे यह कभी नहीं पता था। – cgmb
@cgmb: हाँ, यह स्पष्ट नहीं है। मैं भूल जाता हूं, लेकिन सी में एक var-args फ़ंक्शन को 'फ्लोट' पास करना भी संभव नहीं होगा। पदोन्नति नियम 'डबल' में रूपांतरण निर्दिष्ट करते हैं। मैं उम्मीद करता हूं कि यह संभव था, कम से कम जीएनयू सी के लिए एक प्रारूप विनिर्देशक होगा। ('% एचएफ' या कुछ की तरह)।मेरे लिए, मैं वास्तव में केवल इस सीमा में एएसएम देखने से चिपक गया, क्योंकि अन्यथा संकलक हमेशा आपके लिए रूपांतरण करता है। (इसके अलावा, वास्तव में '% एक' हेक्स-शैली स्वरूपण के साथ 'फ्लोट' मुद्रित करना चाहते हैं) –