मैं Ubuntu 18.04 में असेंबली कैसे संकलित और चला सकता हूं?


16

इसलिए हाल ही में मैं असेंबली सीखना चाहता हूं, इसलिए मैंने थोड़ा सीखा। मैंने इसे नैनो में डाला और इसे खेल के मैदान के रूप में सहेजा। अब मैं सोच रहा हूं, मैं इसे कैसे संकलित और चलाऊं? मैंने पहले से ही हर जगह खोज की है और अभी भी इसे ढूंढ नहीं पाया है। मैं वास्तव में जिज्ञासु हूं और कोई भाषा सीखने का कोई मतलब नहीं है अगर आप इसका उपयोग नहीं कर सकते हैं।


4
सभी प्रकार की समस्याओं के लिए गीगाबाइट आकार के ढांचे के समय में इस तरह के एक प्रश्न को पढ़ने के लिए अच्छा है :-)
#

4
ध्यान दें कि दो प्रमुख असेंबली "फ्लेवर" हैं जिनका एक अलग वाक्यविन्यास है: एटी एंड टी (गैस) और इंटेल (एनएएसएम)। एक कोडांतरक चुनने से पहले, आपको यह तय करना चाहिए कि आप कौन सा वाक्यविन्यास सीखना और उपयोग करना चाहते हैं। यहां एक विस्तृत तुलना चार्ट देखें । यदि अभी भी अनिश्चित हैं, तो Intel / nasm के साथ जाएं।
अंडरक्वाट्स मोनिका

2
आप जीसीसी का उपयोग कर सकते हैं जिसे डिफ़ॉल्ट रूप से एक मानक उबंटू मशीन पर स्थापित किया जाना चाहिए। फ़ाइल नाम एक्सटेंशन है .sऔर संकलन करने के लिए कमांड होनी चाहिएgcc myprog.s
FedonKadifeli

कोई इस विषय को बंद करना चाहता है कि उबंटू में असेंबली भाषा प्रोग्राम को ऑफ टॉपिक के रूप में कैसे संकलित किया जाए। Topic इसे विषय के रूप में क्यों बंद किया जाना चाहिए? यह उबंटू में डिफ़ॉल्ट Ubuntu रिपॉजिटरी और कंपाइलिंग असेंबली कोड के पैकेज के बारे में है, न कि असेंबली कोड लिखने के लिए।
कैरेल

जवाबों:


17

वर्तमान में समर्थित Ubuntu के सभी संस्करण टर्मिनल खोलते हैं और टाइप करते हैं:

sudo apt install as31 nasm  

as31 : इंटेल 8031/8051 कोडांतरक
यह एक तेज, सरल, इंटेल 8031/8051 कोडांतरक का उपयोग करने में आसान है।

nasm : सामान्य-उद्देश्य x86 कोडांतरक
Netwide असेंबलर। NASM वर्तमान में फ़्लैट-फ़ार्म बाइनरी फ़ाइल्स, a.out, COFF और ELF Unix ऑब्जेक्ट फ़ाइल्स और Microsoft 16-बिट DOS और Win32 ऑब्जेक्ट फ़ाइलों को आउटपुट करेगा।

यह एक असेंबली भाषा प्रोग्राम के लिए कोड है जो हैलो वर्ल्ड को प्रिंट करता है।

section     .text
global      _start 
_start: 
    mov     edx,len   
    mov     ecx,msg   
    mov     ebx,1   
    mov     eax,4   
    int     0x80   
    mov     eax,1  
    int     0x80   
section     .data
msg     db  'Hello world',0xa  
len     equ $ - msg   

अगर आप Ubuntu 18.04 में NASM का उपयोग कर रहे हैं, तो hello.asm नामक एक .asm फ़ाइल को संकलित करने और चलाने के लिए आदेश हैं:

nasm -f elf64 hello.asm # assemble the program  
ld -s -o hello hello.o # link the object file nasm produced into an executable file  
./hello # hello is an executable file

1
as31पैकेज की आवश्यकता क्यों होगी ? सवाल और पैकेज के विवरण से ऐसा नहीं लगता कि यह एक उद्देश्य के रूप में काम करेगा।
कैस्परल्ड

4
@kasperd वास्तव as31में जरूरत नहीं है। प्रश्न से प्रेरित होकर मैंने असेंबलर में एक हैलो वर्ल्ड को स्थापित किया, केवल स्थापित nasmकिया और यह काम किया। :-) मुझे लगता है कि कैरेल ने इसे एक विकल्प के रूप में उल्लेख किया है।
पेर्लुक

1
as31 एक विकल्प है यदि आप as31 के साथ असेंबली सीखना चाहते हैं।
कारेल 12'18

2
@kasperd: ओपी ने यह नहीं बताया कि वह किस ISA के लिए लिख रहा है, न ही वह कौन सी असेंबली सिंटैक्स का उपयोग कर रहा है, इसलिए यह संभव के रूप में कई विकल्पों को शामिल करने के लिए समझ में आता है।
जर्ग डब्ल्यू मित्तग

1
इस उत्तर से इंस्टॉलेशन कमांड को nasm में विभाजित करने और 8051 कोडांतरक + एमुलेटर के लिए एक और लाभ होगा (कम से कम लगता है)। चूंकि उद्देश्य विधानसभा सीखना है, वास्तव में x86 की तुलना में सरल (आर) वास्तुकला के लिए एमुलेटर चलाना बहुत कुछ समझ सकता है।
हाइड

2

उबंटू के साथ आता है के रूप में (पोर्टेबल जीएनयू कोडांतरक)

as file.s -o file.out
ld file.out -e main -o file
./file

-o: आउटपुट भेजने के लिए
-eबताता है: बताता है कि प्रारंभ प्रतीक ld

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.