नेटवाइड असेंबलर: Difference between revisions

From Vigyanwiki
(Created page with "{{short description|Assembler for the Intel x86 architecture}} {{primary sources|date=February 2012}} {{Use dmy dates|date=March 2020}} {{Infobox software | name = NASM | logo...")
 
No edit summary
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{short description|Assembler for the Intel x86 architecture}}
{{short description|Assembler for the Intel x86 architecture}}
{{primary sources|date=February 2012}}
 
{{Use dmy dates|date=March 2020}}
{{Infobox software
{{Infobox software
| name = NASM
| name = NASM
Line 17: Line 16:
| वेबसाइट = {{URL|https://www.nasm.us}}
| वेबसाइट = {{URL|https://www.nasm.us}}
}}
}}
नेटवाइड असेंबलर (एनएएसएम) [[इंटेल]] x[[86]] आर्किटेक्चर के लिए एक असेंबली भाषा # कोडांतरक और [[disassembler]] है। इसका उपयोग [[16-बिट]], [[32-बिट]] ([[IA-32]]) और [[64-बिट]] ([[x86-64]]) प्रोग्राम लिखने के लिए किया जा सकता है। इसे [[लिनक्स]] के लिए सबसे लोकप्रिय असेंबलरों में से एक माना जाता है।<ref>{{Cite web|url=http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html |title=Linux assemblers: A comparison of GAS and NASM |author=Ram Narayan |website=[[IBM]] |quote=two of the most popular assemblers for Linux, GNU Assembler (GAS) and Netwide Assembler (NASM) |url-status=dead |archive-url=https://web.archive.org/web/20131003180256/http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html |archive-date=3 October 2013}}</ref>
नेटवाइड असेंबलर(एनएएसएम) [[इंटेल]] [[86|x86]] स्थापत्य कला के लिए एक असेंबली भाषा या कोडांतरक और [[disassembler|विकोंडातरक]] है। इसका उपयोग [[16-बिट]], [[32-बिट]]([[IA-32]]) और [[64-बिट]]([[x86-64]]) प्रोग्राम लिखने के लिए किया जा सकता है। इसे [[लिनक्स]] के लिए सबसे लोकप्रिय कोडांतरकों में से एक माना जाता है।<ref>{{Cite web|url=http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html |title=Linux assemblers: A comparison of GAS and NASM |author=Ram Narayan |website=[[IBM]] |quote=two of the most popular assemblers for Linux, GNU Assembler (GAS) and Netwide Assembler (NASM) |url-status=dead |archive-url=https://web.archive.org/web/20131003180256/http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html |archive-date=3 October 2013}}</ref>
यह मूल रूप से [[साइमन टाथम]] द्वारा जूलियन हॉल की सहायता से लिखा गया था। {{As of|2016}}, इसका रखरखाव एच. पीटर एनविन के नेतृत्व वाली एक छोटी टीम द्वारा किया जाता है।<ref name="Homepage">{{Cite web|url=http://nasm.sourceforge.net/|title=The Netwide Assembler|access-date=2008-06-27}}</ref> यह सरलीकृत (2-क्लॉज) बीएसडी लाइसेंस की शर्तों के तहत जारी [[खुला स्रोत सॉफ्टवेयर]] है।


<ref name="VersionHistory">{{Cite web|url=https://www.nasm.us/doc/nasmdocc.html|title=NASM Version History|access-date=2019-08-03}}</ref>
यह मूल रूप से [[साइमन टाथम]] द्वारा जूलियन हॉल की सहायता से लिखा गया था। {{As of|2016}}, इसका रखरखाव एच. पीटर एनविन के नेतृत्व वाली एक छोटे समूह द्वारा किया जाता है।<ref name="Homepage">{{Cite web|url=http://nasm.sourceforge.net/|title=The Netwide Assembler|access-date=2008-06-27}}</ref> यह सरलीकृत (2-क्लॉज) बीएसडी लाइसेंस के नियमों के अंतर्गत जारी [[खुला स्रोत सॉफ्टवेयर|ओपेन स्रोत सॉफ्टवेयर]] है।<ref name="VersionHistory">{{Cite web|url=https://www.nasm.us/doc/nasmdocc.html|title=NASM Version History|access-date=2019-08-03}}</ref>
== सुविधाएँ ==
एनएएसएम [[COFF|सीओएफएफ]] , सीएमएफ , a.out निष्पादन योग्य और लिंक करने योग्य प्रारूप (ELF), [[COFF|Mach-O]] और [[वस्तु फ़ाइल|बाइनरी फ़ाइल]] (.bin, बाइनरी डिस्क छवि, ऑपरेटिंग सिस्टम को संकलित करने के लिए उपयोग किया जाता है) सहित कई बाइनरी स्वरूपों का उत्पादन कर सकता है, चूंकि [[स्थिति-स्वतंत्र कोड]] मात्र ईएलएफ [[वस्तु फ़ाइल|ऑब्जेक्ट फ़ाइलों]] के लिए समर्थित है। इसका अपना बाइनरी फॉर्मेट भी है जिसे आरडीऑफ(RDOFF) कहा जाता है।<ref name="Manual">{{Cite web|url=http://alien.dowling.edu/~rohit/nasmdoc0.html|title=NASM Manual|access-date=2009-08-15|url-status=dead|archive-url=https://web.archive.org/web/20090223104837/http://alien.dowling.edu/~rohit/nasmdoc0.html|archive-date=23 February 2009}}</ref>


आउटपुट स्वरूपों की विविधता प्रोग्रामों को वस्तुतः किसी भी x86 ऑपरेटिंग सिस्टम (OS) पर पुनः लक्षित करने की अनुमति देती है। यह [[बूटिंग]], [[केवल पढ़ने के लिये मेमोरी|रीड ओनली मेमोरी]] (रोम) छवियों और OS विकास के विभिन्न स्वरूपों में लिखने के लिए उपयोग करने योग्य [[फ्लैट बाइनरी फ़ाइल]] भी बना सकता है।<ref name="Manual" /> यह असेंबली लैंग्वेज या क्रॉस असेंबलर जैसे [[पावरपीसी]] और एसपीएआरसी के रूप में गैर-x86 प्लेटफॉर्म पर चल सकता है, चूंकि यह उन मशीनों द्वारा प्रयोग करने योग्य प्रोग्राम उत्पन्न नहीं कर सकता है।


== सुविधाएँ ==
एनएएसएम एटी एंड टी सिंटैक्स के अतिरिक्त [[MASM|इंटेल]] असेंबली सिंटैक्स के एक संस्करण का उपयोग करता है।<ref name="Hyde">{{Cite web|url=http://webster.cs.ucr.edu/AsmTools/NASM/|title=NASM: The Netwide Assembler|access-date=2008-06-27|author=Randall Hyde|author-link=Randall Hyde|url-status=dead|archive-url=https://web.archive.org/web/20100912172954/http://webster.cs.ucr.edu/AsmTools/NASM/|archive-date=12 September 2010}}</ref> यह [[MASM|MASM(एमएएसएम)]] और संगत कोडांतरकों द्वारा उपयोग किए जाने वाले [[x86 मेमोरी सेगमेंटेशन]] अधिभावियों (और संबंधित ASSUME निर्देश) की स्वचालित पीढ़ी जैसी सुविधाओं से भी बचता है।<ref name="Manual"/>
NASM [[COFF]], OMF, a.out (फ़ाइल स्वरूप) | a.out, निष्पादन योग्य और लिंक करने योग्य स्वरूप (ELF), [[Mach-O]] और [[बाइनरी फ़ाइल]] (.bin, बाइनरी डिस्क छवि, सहित कई बाइनरी स्वरूपों का उत्पादन कर सकता है, जिसका उपयोग ऑपरेटिंग को संकलित करने के लिए किया जाता है। सिस्टम), हालांकि [[स्थिति-स्वतंत्र कोड]] केवल ईएलएफ [[वस्तु फ़ाइल]]ों के लिए समर्थित है। इसका अपना बाइनरी फॉर्मेट भी है जिसे RDOFF कहा जाता है।<ref name="Manual">{{Cite web|url=http://alien.dowling.edu/~rohit/nasmdoc0.html|title=NASM Manual|access-date=2009-08-15|url-status=dead|archive-url=https://web.archive.org/web/20090223104837/http://alien.dowling.edu/~rohit/nasmdoc0.html|archive-date=23 February 2009}}</ref>
== प्रतिरूप प्रोग्राम ==
आउटपुट स्वरूपों की विविधता कार्यक्रमों को वस्तुतः किसी भी x86 ऑपरेटिंग सिस्टम (OS) पर पुनः लक्षित करने की अनुमति देती है। यह [[बूटिंग]], [[केवल पढ़ने के लिये मेमोरी]] (ROM) छवियों और OS विकास के विभिन्न पहलुओं में लिखने के लिए उपयोग करने योग्य [[फ्लैट बाइनरी फ़ाइल]]ें भी बना सकता है।<ref name="Manual"/>यह असेंबली लैंग्वेज#क्रॉस असेंबलर जैसे [[पावरपीसी]] और एसपीएआरसी के रूप में गैर-x86 प्लेटफॉर्म पर चल सकता है, हालांकि यह उन मशीनों द्वारा प्रयोग करने योग्य प्रोग्राम उत्पन्न नहीं कर सकता है।
एक हैलो, विश्व! डॉस ऑपरेटिंग सिस्टम के लिए प्रोग्राम:<syntaxhighlight>
section .text
org 0x100
mov ah, 0x9
mov dx, hello
int 0x21


NASM AT&T Corporation|AT&T सिंटैक्स के बजाय Intel असेंबली सिंटैक्स के एक प्रकार का उपयोग करता है।<ref name="Hyde">{{Cite web|url=http://webster.cs.ucr.edu/AsmTools/NASM/|title=NASM: The Netwide Assembler|access-date=2008-06-27|author=Randall Hyde|author-link=Randall Hyde|url-status=dead|archive-url=https://web.archive.org/web/20100912172954/http://webster.cs.ucr.edu/AsmTools/NASM/|archive-date=12 September 2010}}</ref> यह [[MASM]] और संगत असेंबलरों द्वारा उपयोग किए जाने वाले [[x86 मेमोरी सेगमेंटेशन]] ओवरराइड्स (और संबंधित ASSUME निर्देश) की स्वचालित पीढ़ी जैसी सुविधाओं से भी बचता है।<ref name="Manual"/>
mov ax, 0x4c00
int 0x21


section .data
hello: db 'Hello, world!', 13, 10, '$'
</syntaxhighlight>


== नमूना कार्यक्रम ==
लिनक्स के लिए एक समकक्ष प्रोग्राम:<syntaxhighlight>
एक हैलो, दुनिया! डॉस ऑपरेटिंग सिस्टम के लिए कार्यक्रम:
global _start
<वाक्यविन्यास प्रकाश लैंग = nasm>
खंड। पाठ
संगठन 0x100
मूव आह, 0x9
एमओवी डीएक्स, हैलो
इंट 0x21


मूव कुल्हाड़ी, 0x4c00
section .text
इंट 0x21
_start:
mov eax, 4 ; write
mov ebx, 1 ; stdout
mov ecx, msg
mov edx, msg.len
int 0x80  ; write(stdout, msg, strlen(msg));


खंड। डेटा
xor eax, msg.len ; invert return value from write()
हैलो: डीबी 'हैलो, दुनिया!', 13, 10, '$'
xchg eax, ebx ; value for exit()
</वाक्यविन्यास हाइलाइट>
mov eax, 1 ; exit
लिनक्स के लिए एक समकक्ष कार्यक्रम:
int 0x80  ; exit(...)
<वाक्यविन्यास प्रकाश लैंग = nasm>
ग्लोबल _स्टार्ट


खंड। पाठ
section .data
_शुरू करना:
msg: db "Hello, world!", 10
मूव ईएक्स, 4; लिखना
.len: equ $ - msg
मूव ईबीएक्स, 1; stout
</syntaxhighlight>
मूव ईसीएक्स, संदेश
Mov edx, msg.len
इंट 0x80; लिखें (stdout, संदेश, strlen (संदेश));


एक्सोर ईएक्स, संदेश लेन; लिखने से उलटा वापसी मूल्य ()
माइक्रोसॉफ्ट विंडोज के लिए समान प्रोग्राम का एक उदाहरण:<syntaxhighlight>
एक्ससीजी ईएक्स, ईबीएक्स; बाहर निकलने के लिए मूल्य ()
global _main
मूव ईएक्स, 1; बाहर निकलना
extern _MessageBoxA@16
इंट 0x80; बाहर निकलना(...)
extern _ExitProcess@4


खंड। डेटा
section code use32 class=code
संदेश: डीबी हैलो, दुनिया! , 10
_main:
.len: equ $ - msg
push dword 0      ; UINT uType = MB_OK
</वाक्यविन्यास हाइलाइट>
push dword title  ; LPCSTR lpCaption
Microsoft Windows के लिए समान प्रोग्राम का एक उदाहरण:
push dword banner ; LPCSTR lpText
<वाक्यविन्यास प्रकाश लैंग = nasm>
push dword 0      ; HWND hWnd = NULL
वैश्विक _मुख्य
call _MessageBoxA@16
बाहरी _MessageBoxA@16
बाहरी _ExitProcess@4


खंड कोड use32 वर्ग = कोड
push dword 0     ; UINT uExitCode
_मुख्य:
call _ExitProcess@4
पुश डवर्ड 0; यूआईएनटी यूटाइप = एमबी_ओके
धक्का शब्द शीर्षक; LPCSTR lpCaption
धक्का बैनर; एलपीसीएसटी एलपीटेक्स्ट
पुश डवर्ड 0; एचडब्ल्यूएनडी एचडब्ल्यूएनडी = न्यूल
_MessageBoxA@16 पर कॉल करें


पुश डवर्ड 0; यूआईएनटी यूएक्सिटकोड
section data use32 class=data
_ExitProcess@4 पर कॉल करें
banner: db 'Hello, world!', 0
title: db 'Hello', 0
</syntaxhighlight>


सेक्शन डेटा यूज़32 क्लास=डेटा
एप्पल [[OS X|ओएस एक्स]] के लिए एक 64-बिट प्रोग्राम जो [[की|कीस्ट्रोक]] इनपुट करता है और इसे स्क्रीन पर दिखाता है:<syntaxhighlight>
बैनर: db 'Hello, World!', 0
global _start
शीर्षक: डीबी 'हैलो', 0
</वाक्यविन्यास हाइलाइट>
Apple [[OS X]] के लिए एक 64-बिट प्रोग्राम जो [[की]]स्ट्रोक इनपुट करता है और इसे स्क्रीन पर दिखाता है:
<वाक्यविन्यास प्रकाश लैंग = nasm>
ग्लोबल _स्टार्ट


खंड। डेटा
section .data


query_string: db एक वर्ण दर्ज करें:
query_string: db "Enter a character: "
query_string_len: बराबर $ - query_string
query_string_len: equ $ - query_string
out_string: db आपके पास इनपुट है:
out_string: db "You have input: "
out_string_len: बराबर $ - out_string
out_string_len: equ $ - out_string


अनुभाग .बीएसएस
section .bss


in_char: resw 4
in_char: resw 4


खंड। पाठ
section .text


_शुरू करना:
_start:


मूव रैक्स, 0x2000004; राइट-सिस्टम-कॉल-कोड को रजिस्टर रैक्स में डालें
mov rax, 0x2000004 ; put the write-system-call-code into register rax
मूव आरडीआई, 1; स्टडआउट का उपयोग करने के लिए कर्नेल को बताएं
mov rdi, 1 ; tell kernel to use stdout
मूव आरएसआई, query_string; आरएसआई वह जगह है जहां कर्नेल संदेश का पता खोजने की अपेक्षा करता है
mov rsi, query_string ; rsi is where the kernel expects to find the address of the message
एमओवी आरडीएक्स, query_string_len; और rdx वह जगह है जहाँ कर्नेल संदेश की लंबाई खोजने की अपेक्षा करता है
mov rdx, query_string_len ; and rdx is where the kernel expects to find the length of the message
syscall
syscall


; चरित्र में पढ़ें
; read in the character
मूव रैक्स, 0x2000003; सिस्टम कॉल पढ़ें
mov rax, 0x2000003 ; read system call
मूव आरडीआई, 0; stdin
mov rdi, 0 ; stdin
मूव आरएसआई, in_char; भण्डारण के लिए पता, खंड .bss में घोषित
mov rsi, in_char ; address for storage, declared in section .bss
मूव आरडीएक्स, 2; कर्नेल के बफर से 2 बाइट प्राप्त करें (कैरिज रिटर्न के लिए एक)
mov rdx, 2 ; get 2 bytes from the kernel's buffer (one for the carriage return)
syscall
syscall


; उपयोगकर्ता को आउटपुट दिखाएं
; show user the output
मूव रैक्स, 0x2000004; सिस्टम कॉल लिखें
mov rax, 0x2000004 ; write system call
मूव आरडीआई, 1; stout
mov rdi, 1 ; stdout
मूव आरएसआई, आउट_स्ट्रिंग
mov rsi, out_string
एमओवी आरडीएक्स, out_string_len
mov rdx, out_string_len
syscall
syscall


मूव रैक्स, 0x2000004; सिस्टम कॉल लिखें
mov rax, 0x2000004 ; write system call
मूव आरडीआई, 1; stout
mov rdi, 1 ; stdout
मूव आरएसआई, in_char
mov rsi, in_char
मूव आरडीएक्स, 2; दूसरा बाइट स्ट्रिंग में अपेक्षित कैरिज रिटर्न लागू करना है
mov rdx, 2 ; the second byte is to apply the carriage return expected in the string
syscall
syscall


; सिस्टम कॉल से बाहर निकलें
; exit system call
मूव रैक्स, 0x2000001; सिस्टम कॉल से बाहर निकलें
mov rax, 0x2000001 ; exit system call
एक्सोर आरडीआई, आरडीआई
xor    rdi, rdi
syscall
syscall
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


== लिंकिंग ==
== लिंकिंग ==
एनएएसएम मुख्य रूप से ऑब्जेक्ट फाइलों को आउटपुट करता है, जो आम तौर पर स्वयं निष्पादन योग्य नहीं होते हैं। इसका एकमात्र अपवाद फ्लैट बायनेरिज़ हैं (उदा., .COM)<ref name="Manual"/>जो आधुनिक उपयोग में स्वाभाविक रूप से सीमित हैं। ऑब्जेक्ट फ़ाइलों को निष्पादन योग्य प्रोग्राम में अनुवाद करने के लिए, एक उपयुक्त [[लिंकर (कंप्यूटिंग)]] का उपयोग किया जाना चाहिए, जैसे कि विंडोज़ के लिए [[विजुअल स्टूडियो]] लिंक यूटिलिटी या यूनिक्स जैसी प्रणालियों के लिए [[जीएनयू लिंकर]]
एनएएसएम मुख्य रूप से ऑब्जेक्ट फाइलों को आउटपुट करता है, जो सामान्यतः स्वयं निष्पादन योग्य नहीं होते हैं। इसका एकमात्र अपवाद फ्लैट बायनेरिज़ हैं (उदाहरण, '''.'''कॉम)<ref name="Manual"/> जो आधुनिक उपयोग में स्वाभाविक रूप से सीमित हैं। ऑब्जेक्ट फ़ाइलों को निष्पादन योग्य प्रोग्राम में अनुवाद करने के लिए, एक उपयुक्त [[लिंकर (कंप्यूटिंग)|लिंकर]] का उपयोग किया जाना चाहिए, जैसे कि विंडोज़ के लिए [[विजुअल स्टूडियो]] लिंक यूटिलिटी या यूनिक्स जैसी प्रणालियों के लिए [[जीएनयू लिंकर]] का उपयोग किया जाता है।


== विकास ==
== विकास ==
NASM संस्करण 0.90 अक्टूबर 1996 में जारी किया गया था।<ref name="VersionHistory"/>
एनएएसएम संस्करण 0.90 अक्टूबर 1996 में जारी किया गया था।<ref name="VersionHistory"/>
 
संस्करण 2.00 को 28 नवंबर 2007 को जारी किया गया था, जिसमें x86-64 एक्सटेंशन के लिए समर्थन जोड़ा गया था।<ref name="Homepage"/> विकास संस्करण SourceForge.net पर अपलोड नहीं किए गए हैं, लेकिन प्रोजेक्ट वेब पेज से उपलब्ध बाइनरी स्नैपशॉट के साथ गिटहब में चेक किए गए हैं।


संस्करण 2.00 को 28 नवंबर 2007 को जारी किया गया था, जिसमें x86-64 एक्सटेंशन के लिए समर्थन जोड़ा गया था।<ref name="Homepage"/>विकास संस्करण SourceForge.net पर अपलोड नहीं किए गए हैं, लेकिन प्रोजेक्ट वेब पेज से उपलब्ध बाइनरी स्नैपशॉट के साथ गिटहब में चेक किए गए हैं।
एनएएसएम प्रलेखन के लिए एक खोज इंजन भी उपलब्ध है।<ref name="ManualSearch">{{Cite web|url=http://alien.dowling.edu/~rohit/search/srch/search.php|title=NASM Doc Search Engine|access-date=2009-09-14|url-status=dead|archive-url=https://web.archive.org/web/20100123001130/http://alien.dowling.edu/~rohit/search/srch/search.php|archive-date=23 January 2010}}</ref>


NASM प्रलेखन के लिए एक खोज इंजन भी उपलब्ध है।<ref name="ManualSearch">{{Cite web|url=http://alien.dowling.edu/~rohit/search/srch/search.php|title=NASM Doc Search Engine|access-date=2009-09-14|url-status=dead|archive-url=https://web.archive.org/web/20100123001130/http://alien.dowling.edu/~rohit/search/srch/search.php|archive-date=23 January 2010}}</ref>
जुलाई 2009 में, संस्करण 2.07 के अनुसार, एनएएसएम को सरलीकृत (2-खंड) बीएसडी लाइसेंस के अंतर्गत जारी किया गया था। पहले, क्योंकि इसे [[जीएनयू लेसर जनरल पब्लिक लाइसेंस]] के अंतर्गत लाइसेंस दिया गया था, इसने यास्म(Yasm) के विकास का नेतृत्व किया, जो नए बीएसडी लाइसेंस के तहत एक पूर्ण पुनर्लेखन था। यास्म ने एनएएसएम से पहले x86-64 के लिए समर्थन की प्रस्तुति की। इसने जीएनयू असेंबलर सिंटैक्स के लिए समर्थन भी जोड़ा गया।
जुलाई 2009 में, संस्करण 2.07 के अनुसार, NASM को सरलीकृत (2-खंड) BSD लाइसेंस के तहत जारी किया गया था। पहले, क्योंकि इसे [[जीएनयू लेसर जनरल पब्लिक लाइसेंस]] के तहत लाइसेंस दिया गया था, इसने Yasm के विकास का नेतृत्व किया, BSD लाइसेंस # 3-क्लॉज के तहत एक पूर्ण पुनर्लेखन। Yasm ने NASM से पहले x86-64 के लिए समर्थन की पेशकश की। इसने GNU असेंबलर सिंटैक्स के लिए समर्थन भी जोड़ा।


=== आरडीओएफएफ ===
=== आरडीओएफएफ ===
एनएएसएम की ऑब्जेक्ट फ़ाइल आउटपुट क्षमताओं की अखंडता का परीक्षण करने के लिए डेवलपर्स द्वारा पुनर्निधारणीय गतिशील ऑब्जेक्ट फ़ाइल स्वरूप (आरडीओएफएफ) का उपयोग किया जाता है। यह काफी हद तक NASM की आंतरिक संरचना पर आधारित है,<ref name = "manual">{{cite web|url=http://nasm.sourceforge.net/doc/nasmdoc6.html|title=NASM Manual Ch. 6|access-date=2008-06-27}}</ref> अनिवार्य रूप से आउटपुट ड्राइवर फ़ंक्शन कॉल के क्रमांकन वाले हेडर से युक्त होता है, जिसके बाद निष्पादन योग्य कोड या डेटा वाले अनुभागों की एक सरणी होती है। एनएएसएम वितरण में लिंकर और लोडर सहित प्रारूप का उपयोग करने के लिए उपकरण शामिल हैं।
एनएएसएम की ऑब्जेक्ट फ़ाइल आउटपुट क्षमताओं की अखंडता का परीक्षण करने के लिए निर्माणकर्ताओं द्वारा पुनर्निधारणीय गतिशील ऑब्जेक्ट फ़ाइल स्वरूप (आरडीओएफएफ) का उपयोग किया जाता है। यह एक सीमा तक एनएएसएम की आंतरिक संरचना पर आधारित है,<ref name = "manual">{{cite web|url=http://nasm.sourceforge.net/doc/nasmdoc6.html|title=NASM Manual Ch. 6|access-date=2008-06-27}}</ref> अनिवार्य रूप से आउटपुट ड्राइवर फ़ंक्शन(प्रकार्य) कॉल के क्रमांकन वाले हेडर से युक्त होता है, जिसके बाद निष्पादन योग्य कोड या डेटा वाले अनुभागों की एक सरणी होती है। एनएएसएम वितरण में लिंकर और लोडर सहित प्रारूप का उपयोग करने के लिए उपकरण सम्मिलित हैं।


अक्टूबर 1996 में संस्करण 0.90 जारी होने तक, NASM ने केवल फ्लैट-प्रारूप निष्पादन योग्य फ़ाइलों (जैसे, DOS COM फ़ाइलें) के आउटपुट का समर्थन किया। संस्करण 0.90 में, साइमन टैथम ने ऑब्जेक्ट-फ़ाइल आउटपुट इंटरफ़ेस के लिए और केवल 16-बिट कोड के लिए DOS .OBJ फ़ाइलों के लिए समर्थन जोड़ा।<ref name="CVS">{{cite web|url=http://nasm.cvs.sourceforge.net/nasm/nasm/CHANGES?revision=1.48&view=markup|title=NASM CVS|date=2008-06-08|access-date=2008-06-27}}</ref>
अक्टूबर 1996 में संस्करण 0.90 जारी होने तक, एनएएसएम ने मात्र फ्लैट-प्रारूप निष्पादन योग्य फ़ाइलों (जैसे, डॉस कॉम फ़ाइलें) के आउटपुट का समर्थन किया। संस्करण 0.90 में, साइमन टैथम ने ऑब्जेक्ट-फ़ाइल आउटपुट इंटरफ़ेस के लिए और मात्र 16-बिट कोड के लिए डॉस .ओबीजे फ़ाइलों के लिए समर्थन जोड़ा।<ref name="CVS">{{cite web|url=http://nasm.cvs.sourceforge.net/nasm/nasm/CHANGES?revision=1.48&view=markup|title=NASM CVS|date=2008-06-08|access-date=2008-06-27}}</ref>
NASM में इस प्रकार 32-बिट ऑब्जेक्ट प्रारूप का अभाव था। इस कमी को दूर करने के लिए, और ऑब्जेक्ट-फाइल इंटरफ़ेस सीखने के अभ्यास के रूप में, डेवलपर जूलियन हॉल ने RDOFF के पहले संस्करण को एक साथ रखा, जिसे NASM संस्करण 0.91 में जारी किया गया था।<ref name="CVS"/>


इस प्रारंभिक संस्करण के बाद से, RDOFF प्रारूप में एक प्रमुख अद्यतन किया गया है, जिसमें प्रत्येक हेडर रिकॉर्ड पर एक रिकॉर्ड-लंबाई संकेतक जोड़ा गया है,<ref>{{cite web|url=http://nasm.cvs.sourceforge.net/nasm/nasm/rdoff/doc/v1-v2.txt?revision=1.1&view=markup|title=V1-V2.txt|date=2002-12-04|access-date=2008-06-27}}</ref> कार्यक्रमों को उन रिकॉर्डों को छोड़ने की अनुमति देना जिनके प्रारूप को वे नहीं पहचानते हैं, और कई खंडों के लिए समर्थन करते हैं; RDOFF1 केवल तीन खंडों का समर्थन करता है: पाठ, डेटा और bss (जिसमें गैर-प्रारंभिक डेटा शामिल है)।<ref name = "manual"/>
एनएएसएम में इस प्रकार 32-बिट ऑब्जेक्ट प्रारूप का अभाव था। इस कमी को दूर करने के लिए, और ऑब्जेक्ट-फाइल इंटरफ़ेस सीखने के अभ्यास के रूप में, डेवलपर जूलियन हॉल ने आरडीऑफ के पहले संस्करण को एक साथ रखा, जिसे एनएएसएम संस्करण 0.91 में जारी किया गया था।<ref name="CVS" />


RDOFF प्रारूप को दृढ़ता से बहिष्कृत किया गया है और इसे NASM 2.15.04 से अक्षम कर दिया गया है।{{r|RDOFF}}
इस प्रारंभिक संस्करण के बाद से, आरडीऑफ प्रारूप में एक प्रमुख अद्यतन किया गया है, जिसमें प्रत्येक हेडर रिकॉर्ड पर एक रिकॉर्ड-लंबाई संकेतक जोड़ा गया है,<ref>{{cite web|url=http://nasm.cvs.sourceforge.net/nasm/nasm/rdoff/doc/v1-v2.txt?revision=1.1&view=markup|title=V1-V2.txt|date=2002-12-04|access-date=2008-06-27}}</ref> प्रोग्रामों को उन रिकॉर्डों को छोड़ने की अनुमति देना जिनके प्रारूप को वे नहीं पहचानते हैं, और कई खंडों के लिए समर्थन करते हैं; आरडीऑफ1 मात्र तीन खंडों का समर्थन करता है: पाठ(टेक्स्ट), डेटा और बीएसएस (जिसमें गैर-प्रारंभिक डेटा सम्मिलित है)।<ref name = "manual"/>


आरडीऑफ प्रारूप को दृढ़ता से बहिष्कृत किया गया है और इसे एनएएसएम 2.15.04 से अक्षम कर दिया गया है।{{r|RDOFF}}
== यह भी देखें ==


== यह भी देखें ==
*सभा की भाषा
{{Portal|Free and open-source software}}
* कोडांतरकों की तुलना{{Portal|Free and open-source software}}
* सभा की भाषा
* कोडांतरकों की तुलना


== संदर्भ ==
== संदर्भ ==
Line 171: Line 165:
|title = Relocatable Dynamic Object File Format (deprecated)}}</ref>
|title = Relocatable Dynamic Object File Format (deprecated)}}</ref>
}}
}}
== अग्रिम पठन ==
== अग्रिम पठन ==
* {{Cite book|title=Assembly Language Step by Step|author=Jeff Duntemann|publisher=J Wiley and Sons|year=2000|isbn=0-471-37523-3|url-access=registration|url=https://archive.org/details/assemblylanguage0000dunt_c8n9}}
* {{Cite book|title=Assembly Language Step by Step|author=Jeff Duntemann|publisher=J Wiley and Sons|year=2000|isbn=0-471-37523-3|url-access=registration|url=https://archive.org/details/assemblylanguage0000dunt_c8n9}}
== बाहरी संबंध ==
== बाहरी संबंध ==
* {{Official website|https://www.nasm.us}}
* {{Official website|https://www.nasm.us}}
* {{Sourceforge|nasm}}
* {{Sourceforge|nasm}}
* [https://web.archive.org/web/20111016034545/http://www.realtech-vr.com/nasm/ Special edition for Win32 and BeOS.]
* [https://web.archive.org/web/20111016034545/http://www.realtech-vr.com/nasm/ Special edition for Win32 and BeOS.]
* [https://developer.ibm.com/articles/l-gas-nasm/ A comparison of GAS and NASM] at [[IBM]]
* [https://developer.ibm.com/articles/l-gas-nasm/ A कॉमparison of GAS and NASM] at [[IBM]]
* {{freshmeat|intel2gas}}: a converter between the source format of the assemblers NASM and [[GNU Assembler|GAS]]
* {{freshmeat|intel2gas}}: a converter between the source format of the assemblers NASM and [[GNU Assembler|GAS]]


{{X86 assembly topics}}
{{X86 assembly topics}}
[[Category: 1996 सॉफ्टवेयर]] [[Category: अस्सेम्ब्लेर्स]] [[Category: जुदा करने वाले]] [[Category: डॉस सॉफ्टवेयर]] [[Category: निःशुल्क संकलक और दुभाषिए]] [[Category: लिनक्स प्रोग्रामिंग उपकरण]] [[Category: मैक ओएस]] [[Category: MacOS प्रोग्रामिंग उपकरण]] [[Category: विंडोज के लिए प्रोग्रामिंग टूल]] [[Category: बीएसडी लाइसेंस का उपयोग करने वाला सॉफ्टवेयर]]


[[Category: Machine Translated Page]]
[[Category:1996 सॉफ्टवेयर]]
[[Category:All articles containing potentially dated statements]]
[[Category:Articles containing potentially dated statements from 2016]]
[[Category:Collapse templates]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Lua-based templates]]
[[Category:MacOS प्रोग्रामिंग उपकरण]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Official website not in Wikidata]]
[[Category:Pages using Infobox software with unknown parameters|प्रोग्रामिंग लैंग्वेजनेटवाइड असेंबलर]]
[[Category:Pages with empty portal template]]
[[Category:Pages with script errors]]
[[Category:Pages with syntax highlighting errors]]
[[Category:Portal templates with redlinked portals]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia metatemplates]]
[[Category:अस्सेम्ब्लेर्स]]
[[Category:जुदा करने वाले]]
[[Category:डॉस सॉफ्टवेयर]]
[[Category:निःशुल्क संकलक और दुभाषिए]]
[[Category:बीएसडी लाइसेंस का उपयोग करने वाला सॉफ्टवेयर]]
[[Category:मैक ओएस]]
[[Category:लिनक्स प्रोग्रामिंग उपकरण]]
[[Category:विंडोज के लिए प्रोग्रामिंग टूल]]

Latest revision as of 16:31, 2 March 2023

NASM
Original author(s)Simon Tatham, Julian Hall
Developer(s)H. Peter Anvin, Chang Seok Bae, Jim Kukunas, Frank B. Kotler, Cyrill Gorcunov
Initial releaseOctober 1996; 27 years ago (1996-10)
Stable release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.; Error: first parameter cannot be parsed as a date or time. (Script error: The module returned a nil value. It is supposed to return an export table.)

नेटवाइड असेंबलर(एनएएसएम) इंटेल x86 स्थापत्य कला के लिए एक असेंबली भाषा या कोडांतरक और विकोंडातरक है। इसका उपयोग 16-बिट, 32-बिट(IA-32) और 64-बिट(x86-64) प्रोग्राम लिखने के लिए किया जा सकता है। इसे लिनक्स के लिए सबसे लोकप्रिय कोडांतरकों में से एक माना जाता है।[2]

यह मूल रूप से साइमन टाथम द्वारा जूलियन हॉल की सहायता से लिखा गया था। As of 2016, इसका रखरखाव एच. पीटर एनविन के नेतृत्व वाली एक छोटे समूह द्वारा किया जाता है।[3] यह सरलीकृत (2-क्लॉज) बीएसडी लाइसेंस के नियमों के अंतर्गत जारी ओपेन स्रोत सॉफ्टवेयर है।[4]

सुविधाएँ

एनएएसएम सीओएफएफ , सीएमएफ , a.out निष्पादन योग्य और लिंक करने योग्य प्रारूप (ELF), Mach-O और बाइनरी फ़ाइल (.bin, बाइनरी डिस्क छवि, ऑपरेटिंग सिस्टम को संकलित करने के लिए उपयोग किया जाता है) सहित कई बाइनरी स्वरूपों का उत्पादन कर सकता है, चूंकि स्थिति-स्वतंत्र कोड मात्र ईएलएफ ऑब्जेक्ट फ़ाइलों के लिए समर्थित है। इसका अपना बाइनरी फॉर्मेट भी है जिसे आरडीऑफ(RDOFF) कहा जाता है।[5]

आउटपुट स्वरूपों की विविधता प्रोग्रामों को वस्तुतः किसी भी x86 ऑपरेटिंग सिस्टम (OS) पर पुनः लक्षित करने की अनुमति देती है। यह बूटिंग, रीड ओनली मेमोरी (रोम) छवियों और OS विकास के विभिन्न स्वरूपों में लिखने के लिए उपयोग करने योग्य फ्लैट बाइनरी फ़ाइल भी बना सकता है।[5] यह असेंबली लैंग्वेज या क्रॉस असेंबलर जैसे पावरपीसी और एसपीएआरसी के रूप में गैर-x86 प्लेटफॉर्म पर चल सकता है, चूंकि यह उन मशीनों द्वारा प्रयोग करने योग्य प्रोग्राम उत्पन्न नहीं कर सकता है।

एनएएसएम एटी एंड टी सिंटैक्स के अतिरिक्त इंटेल असेंबली सिंटैक्स के एक संस्करण का उपयोग करता है।[6] यह MASM(एमएएसएम) और संगत कोडांतरकों द्वारा उपयोग किए जाने वाले x86 मेमोरी सेगमेंटेशन अधिभावियों (और संबंधित ASSUME निर्देश) की स्वचालित पीढ़ी जैसी सुविधाओं से भी बचता है।[5]

प्रतिरूप प्रोग्राम

एक हैलो, विश्व! डॉस ऑपरेटिंग सिस्टम के लिए प्रोग्राम:

section .text
org 0x100
	mov	ah, 0x9
	mov	dx, hello
	int	0x21

	mov	ax, 0x4c00
	int	0x21

section .data
hello:	db 'Hello, world!', 13, 10, '$'

लिनक्स के लिए एक समकक्ष प्रोग्राम:

global _start

section .text
_start:
	mov	eax, 4 ; write
	mov	ebx, 1 ; stdout
	mov	ecx, msg
	mov	edx, msg.len
	int	0x80   ; write(stdout, msg, strlen(msg));

	xor	eax, msg.len ; invert return value from write()
	xchg eax, ebx ; value for exit()
	mov	eax, 1 ; exit
	int	0x80   ; exit(...)

section .data
msg:	db	"Hello, world!", 10
.len:	equ	$ - msg

माइक्रोसॉफ्ट विंडोज के लिए समान प्रोग्राम का एक उदाहरण:

global _main
extern _MessageBoxA@16
extern _ExitProcess@4

section code use32 class=code
_main:
	push	dword 0      ; UINT uType = MB_OK
	push	dword title  ; LPCSTR lpCaption
	push	dword banner ; LPCSTR lpText
	push	dword 0      ; HWND hWnd = NULL
	call	_MessageBoxA@16

	push	dword 0      ; UINT uExitCode
	call	_ExitProcess@4

section data use32 class=data
	banner:	db 'Hello, world!', 0
	title:	db 'Hello', 0

एप्पल ओएस एक्स के लिए एक 64-बिट प्रोग्राम जो कीस्ट्रोक इनपुट करता है और इसे स्क्रीन पर दिखाता है:

global _start

section .data

	query_string:		db	"Enter a character:  "
	query_string_len:	equ	$ - query_string
	out_string:			db	"You have input:  "
	out_string_len:		equ	$ - out_string

section .bss

	in_char:			resw 4

section .text

_start:

	mov	rax, 0x2000004	 	; put the write-system-call-code into register rax
	mov	rdi, 1				; tell kernel to use stdout
	mov	rsi, query_string	; rsi is where the kernel expects to find the address of the message
	mov	rdx, query_string_len	; and rdx is where the kernel expects to find the length of the message 
	syscall

	; read in the character
	mov	rax, 0x2000003		; read system call
	mov	rdi, 0				; stdin
	mov	rsi, in_char		; address for storage, declared in section .bss
	mov	rdx, 2				; get 2 bytes from the kernel's buffer (one for the carriage return)
	syscall

	; show user the output
	mov	rax, 0x2000004		; write system call
	mov	rdi, 1				; stdout
	mov	rsi, out_string
	mov	rdx, out_string_len
	syscall

	mov	rax, 0x2000004		; write system call
	mov	rdi, 1				; stdout
	mov	rsi, in_char
	mov	rdx, 2				; the second byte is to apply the carriage return expected in the string
	syscall

	; exit system call
	mov	rax, 0x2000001		; exit system call
	xor     rdi, rdi
	syscall

लिंकिंग

एनएएसएम मुख्य रूप से ऑब्जेक्ट फाइलों को आउटपुट करता है, जो सामान्यतः स्वयं निष्पादन योग्य नहीं होते हैं। इसका एकमात्र अपवाद फ्लैट बायनेरिज़ हैं (उदाहरण, .कॉम)[5] जो आधुनिक उपयोग में स्वाभाविक रूप से सीमित हैं। ऑब्जेक्ट फ़ाइलों को निष्पादन योग्य प्रोग्राम में अनुवाद करने के लिए, एक उपयुक्त लिंकर का उपयोग किया जाना चाहिए, जैसे कि विंडोज़ के लिए विजुअल स्टूडियो लिंक यूटिलिटी या यूनिक्स जैसी प्रणालियों के लिए जीएनयू लिंकर का उपयोग किया जाता है।

विकास

एनएएसएम संस्करण 0.90 अक्टूबर 1996 में जारी किया गया था।[4]

संस्करण 2.00 को 28 नवंबर 2007 को जारी किया गया था, जिसमें x86-64 एक्सटेंशन के लिए समर्थन जोड़ा गया था।[3] विकास संस्करण SourceForge.net पर अपलोड नहीं किए गए हैं, लेकिन प्रोजेक्ट वेब पेज से उपलब्ध बाइनरी स्नैपशॉट के साथ गिटहब में चेक किए गए हैं।

एनएएसएम प्रलेखन के लिए एक खोज इंजन भी उपलब्ध है।[7]

जुलाई 2009 में, संस्करण 2.07 के अनुसार, एनएएसएम को सरलीकृत (2-खंड) बीएसडी लाइसेंस के अंतर्गत जारी किया गया था। पहले, क्योंकि इसे जीएनयू लेसर जनरल पब्लिक लाइसेंस के अंतर्गत लाइसेंस दिया गया था, इसने यास्म(Yasm) के विकास का नेतृत्व किया, जो नए बीएसडी लाइसेंस के तहत एक पूर्ण पुनर्लेखन था। यास्म ने एनएएसएम से पहले x86-64 के लिए समर्थन की प्रस्तुति की। इसने जीएनयू असेंबलर सिंटैक्स के लिए समर्थन भी जोड़ा गया।

आरडीओएफएफ

एनएएसएम की ऑब्जेक्ट फ़ाइल आउटपुट क्षमताओं की अखंडता का परीक्षण करने के लिए निर्माणकर्ताओं द्वारा पुनर्निधारणीय गतिशील ऑब्जेक्ट फ़ाइल स्वरूप (आरडीओएफएफ) का उपयोग किया जाता है। यह एक सीमा तक एनएएसएम की आंतरिक संरचना पर आधारित है,[8] अनिवार्य रूप से आउटपुट ड्राइवर फ़ंक्शन(प्रकार्य) कॉल के क्रमांकन वाले हेडर से युक्त होता है, जिसके बाद निष्पादन योग्य कोड या डेटा वाले अनुभागों की एक सरणी होती है। एनएएसएम वितरण में लिंकर और लोडर सहित प्रारूप का उपयोग करने के लिए उपकरण सम्मिलित हैं।

अक्टूबर 1996 में संस्करण 0.90 जारी होने तक, एनएएसएम ने मात्र फ्लैट-प्रारूप निष्पादन योग्य फ़ाइलों (जैसे, डॉस कॉम फ़ाइलें) के आउटपुट का समर्थन किया। संस्करण 0.90 में, साइमन टैथम ने ऑब्जेक्ट-फ़ाइल आउटपुट इंटरफ़ेस के लिए और मात्र 16-बिट कोड के लिए डॉस .ओबीजे फ़ाइलों के लिए समर्थन जोड़ा।[9]

एनएएसएम में इस प्रकार 32-बिट ऑब्जेक्ट प्रारूप का अभाव था। इस कमी को दूर करने के लिए, और ऑब्जेक्ट-फाइल इंटरफ़ेस सीखने के अभ्यास के रूप में, डेवलपर जूलियन हॉल ने आरडीऑफ के पहले संस्करण को एक साथ रखा, जिसे एनएएसएम संस्करण 0.91 में जारी किया गया था।[9]

इस प्रारंभिक संस्करण के बाद से, आरडीऑफ प्रारूप में एक प्रमुख अद्यतन किया गया है, जिसमें प्रत्येक हेडर रिकॉर्ड पर एक रिकॉर्ड-लंबाई संकेतक जोड़ा गया है,[10] प्रोग्रामों को उन रिकॉर्डों को छोड़ने की अनुमति देना जिनके प्रारूप को वे नहीं पहचानते हैं, और कई खंडों के लिए समर्थन करते हैं; आरडीऑफ1 मात्र तीन खंडों का समर्थन करता है: पाठ(टेक्स्ट), डेटा और बीएसएस (जिसमें गैर-प्रारंभिक डेटा सम्मिलित है)।[8]

आरडीऑफ प्रारूप को दृढ़ता से बहिष्कृत किया गया है और इसे एनएएसएम 2.15.04 से अक्षम कर दिया गया है।[11]

यह भी देखें

  • सभा की भाषा
  • कोडांतरकों की तुलना

संदर्भ

  1. "NASM, the Netwide Assembler". GitHub. 25 October 2021.
  2. Ram Narayan. "Linux assemblers: A comparison of GAS and NASM". IBM. Archived from the original on 3 October 2013. two of the most popular assemblers for Linux, GNU Assembler (GAS) and Netwide Assembler (NASM)
  3. 3.0 3.1 "The Netwide Assembler". Retrieved 2008-06-27.
  4. 4.0 4.1 "NASM Version History". Retrieved 2019-08-03.
  5. 5.0 5.1 5.2 5.3 "NASM Manual". Archived from the original on 23 February 2009. Retrieved 2009-08-15.
  6. Randall Hyde. "NASM: The Netwide Assembler". Archived from the original on 12 September 2010. Retrieved 2008-06-27.
  7. "NASM Doc Search Engine". Archived from the original on 23 January 2010. Retrieved 2009-09-14.
  8. 8.0 8.1 "NASM Manual Ch. 6". Retrieved 2008-06-27.
  9. 9.0 9.1 "NASM CVS". 2008-06-08. Retrieved 2008-06-27.
  10. "V1-V2.txt". 2002-12-04. Retrieved 2008-06-27.
  11. "Relocatable Dynamic Object File Format (deprecated)".

अग्रिम पठन

बाहरी संबंध