पर असेंबली में आउटपुटिंग पूर्णांक यह शुद्ध असेंबली (यानी कोई पुस्तकालय या सी को कॉल) में किया जाना चाहिए।लिनक्स
मैं समस्या का सार समझता हूं: किसी को पूर्णांक को 10 से विभाजित करने की आवश्यकता होती है, एक अंकों को शेष ASCII में परिवर्तित करना होता है, आउटपुट होता है और फिर प्रक्रिया को दोहराया जाता है।
लेकिन किसी कारण से, यह अभी काम नहीं कर रहा है। मैं x86 पर NASM का उपयोग कर रहा हूँ।
यहाँ है कि मैं क्या किया है है के लिए अब (नहीं उत्पादन कुछ भी करता है, लेकिन किसी भी कोडांतरक त्रुटियों या तो फेंक नहीं है):
; integer to output is stored in eax
mov ecx, 10 ; for base 10
loop:
div ecx ;EAX contains the quotient, EDX the remainder
; Do something to EDX to convert it to ASCII, not sure if this is correct
add edx, '0'
push eax ;We'll be playing with EAX to output EDX, save EAX to the stack
mov eax, 4 ; sys_write
mov ebx, 1 ; to STDOUT
mov ecx, edx
mov edx, 1
int 0x80
pop eax ;restore EAX
cmp eax, 0 ;If EAX is 0, our job is done
jnz loop
इस एक (यानी, this के समान सवालों की एक संख्या हैं और this), लेकिन मैं कार्यान्वयन में खो गया हूँ। This question (डॉस के लिए) भी सहायक था, लेकिन मैं अभी भी उलझन में हूं।
मुझे यहां कुछ याद आना चाहिए। विचार?
मुझे इस कोड में कहीं भी '10' नहीं दिखाई देता है, जो दशमलव अंकों को मुद्रित करने के लिए आवश्यक होगा। (आपको '10' के साथ बार-बार 'div' और' mod' की आवश्यकता है, अंकों को संग्रहित करें, उन्हें उलट दें, और उन्हें आउटपुट करें या पहले 'बड़े अंत' से जाएं, और' 100,000,000' से विभाजित करें, फिर '10,000,000' , आदि - लेकिन यह स्टोर-एंड-रिवर्स विधि से कम जटिल नहीं हो सकता है।) – sarnold
@ कर्नाल्ड शीर्ष पर एक पंक्ति शामिल करना भूल गए। इसे जोड़ने के लिए मेरे प्रश्न को संपादित किया। –
बढ़िया! अद्यतन के लिए धन्यवाद। – sarnold