2012-06-08 7 views
11

मैं NASM following this tutorial (सेक्शन 4) का उपयोग करके एक अधिक indepth हैलो दुनिया पर काम कर रहा हूँ। यह ट्यूटोरियल अनिवार्य रूप से आपको कमांड लाइन इनपुट को संभालने का तरीका सिखाता है। ऊपर 3 पॉप निर्देश की चर्चा करते हुए error: instruction not supported in 64-bit mode साथ संकलन के दौरानपॉप निर्देश NASM का उपयोग कर 64-बिट मोड में समर्थित नहीं है?

section .text 
     global _start 

_start: 
     pop  ebx  ; arg count 
     pop  ebx  ; arg[0] the program name 
     pop  ebx  ; arg[1-n] the remainder of the args 
         ; must each be indiviually popped 

कोड त्रुटियों आउट:
इस सवाल में कोड का स्निपेट है। Upon viewing the docs ऐसा लगता है कि यह कोड केवल 32-बिट सिस्टम के लिए काम करता है।

क्या 64-बिट pop निर्देश है? क्या किसी के पास pop का उपयोग कर 64 बिट ट्यूटोरियल है जिसे मैं देख सकता हूं?

+3

आपको पता है कि ट्यूटोरियल 32-बिट के लिए है? मेरा मानना ​​है कि आप आउटपुट प्रारूप को 'elf32' के बजाय 'elf32' पर सेट करके 32-बिट कोड उत्पन्न कर सकते हैं, जो आपको 64-बिट मशीन पर भी इस ट्यूटोरियल का पालन करने की अनुमति देनी चाहिए ... –

+0

@Aedin - हाँ, आपको चाहिए उस ट्यूटोरियल का पालन करते हुए 32-बिट मोड में रहें। 64 बिट्स का उपयोग करते समय रजिस्टर नाम अलग-अलग नहीं होते हैं, इसलिए कॉलिंग सम्मेलन भी होते हैं। बस 'पॉप' की जगह बदलने की संभावना नहीं है। –

उत्तर

14

हां, 64-बिट pop निर्देश है ... पीओपी। :-) आपको इसे 64-बिट रजिस्टरों के विरुद्ध उपयोग करने की आवश्यकता है (जैसे rbx)।

संबंधित मुद्दे