Netwide Assembler: NASM The Netwide Disassembler, NDISASM The Netwide Disassembler เป็นโปรแกรมสหายขนาดเล็กสำหรับ Netwide Assembler, NASM ดูเหมือนจะเป็นเรื่องน่าอับอายที่จะมี assembler แบบ x86 พร้อมด้วยตารางคำสั่งเต็มรูปแบบและไม่ใช้ประโยชน์ให้มากที่สุดเท่าที่จะเป็นไปได้ดังนั้นจึงมีการแยกส่วนที่แชร์ตารางคำสั่ง (และรหัสอื่น ๆ ) กับ NASM The Netwide Disassembler ไม่ทำอะไรเลยนอกจากการผลิต disassemblies ของไฟล์ไบนารี NDISASM ไม่มีความเข้าใจเกี่ยวกับรูปแบบไฟล์อ็อบเจ็กต์เช่น objdump และจะไม่เข้าใจไฟล์ DOS. EXE เช่น debug จะ มันแยกส่วน ดูส่วน 1.3 สำหรับคำแนะนำในการติดตั้ง NDISASM เช่น NASM มีหน้า man ซึ่งคุณอาจต้องการนำมาใช้ประโยชน์ในบางกรณีถ้าคุณอยู่ในระบบ Unix คุณจะใช้คำสั่งของฟอร์ม NDISASM สามารถถอดรหัสรหัส 16, 32 หรือ 64 บิตได้อย่างเท่าเทียมกันโดยไม่ผิดพลาดโดยให้แน่นอนว่าคุณจำต้องระบุว่าจะใช้งานได้อย่างไร ถ้าไม่มี - b สวิตช์อยู่ NDISASM จะทำงานในโหมด 16 บิตโดยค่าเริ่มต้น สวิตช์ - u (สำหรับ USE32) ยังเรียกใช้โหมด 32 บิต อีกสองตัวเลือกบรรทัดคำสั่งคือ - r ซึ่งรายงานหมายเลขเวอร์ชันของ NDISASM ที่คุณใช้อยู่และ - h ซึ่งจะให้ข้อมูลสรุปสั้น ๆ เกี่ยวกับตัวเลือกบรรทัดคำสั่ง ในการถอดแยกไฟล์ DOS อย่างถูกต้อง disassembler ต้องสมมติว่าคำสั่งแรกในไฟล์ถูกโหลดตามที่อยู่ 0x100 แทนที่จะเป็นศูนย์ NDISASM ซึ่งถือว่าโดยค่าเริ่มต้นว่าไฟล์ใด ๆ ที่คุณให้โหลดอยู่ที่ศูนย์ดังนั้นจึงจำเป็นต้องได้รับการแจ้งเรื่องนี้ ตัวเลือก - o ช่วยให้คุณสามารถประกาศต้นกำเนิดที่แตกต่างกันสำหรับไฟล์ที่คุณกำลังถอดประกอบ อาร์กิวเมนต์ของมันอาจแสดงในรูปแบบตัวเลขของ NASM: ทศนิยมตามค่าเริ่มต้นถ้ามันเริ่มต้นด้วยหรือ 0x หรือสิ้นสุดใน H ของ hex ถ้ามันจบลงด้วย Q ของมัน octal และถ้ามันจบลงในไบนารี b ของมัน ดังนั้นเพื่อแยกไฟล์: จะทำเคล็ดลับ สมมติว่าคุณกำลังถอดชิ้นส่วนไฟล์ที่มีข้อมูลบางส่วนซึ่งไม่ใช่รหัสเครื่องแล้วใส่รหัสเครื่อง NDISASM จะไถพรวนข้อมูลอย่างถูกต้องโดยให้คำแนะนำเกี่ยวกับเครื่องจักรในทุกที่ที่สามารถทำได้ (แม้ว่าส่วนใหญ่จะมีลักษณะที่แปลกประหลาด แต่บางคำอาจมีคำนำหน้าผิดปกติเช่น FS หรือ AX, 0x240A) และการสร้างคำแนะนำเกี่ยวกับ DB บ่อยครั้งหากนิ่งงัน . จากนั้นจะไปถึงส่วนรหัส สมมติว่า NDISASM เพิ่งเสร็จสิ้นการสร้างคำสั่งเครื่องแปลก ๆ จากส่วนของข้อมูลส่วนหนึ่งและตำแหน่งของไฟล์เป็นตอนหนึ่งไบต์ก่อนการเริ่มต้นส่วนรหัส เป็นไปได้ว่าคำสั่ง spurious อื่นจะได้รับการสร้างขึ้นโดยเริ่มจากไบต์สุดท้ายของส่วนข้อมูลจากนั้นคำสั่งแรกที่ถูกต้องในส่วนรหัสจะไม่ปรากฏขึ้นเนื่องจากจุดเริ่มต้นข้ามไป นี้ไม่เหมาะจริงๆ เพื่อหลีกเลี่ยงปัญหานี้คุณสามารถระบุจุดการซิงโครไนซ์หรือเป็นจุดที่ตรงกันได้มากเท่าที่คุณต้องการ (แม้ว่า NDISASM สามารถจับเฉพาะจุดเชื่อมต่อภายใน 2147483647 เท่านั้น) นิยามของจุดซิงค์คือ: NDISASM รับประกันว่าจะต้องทำตามจุดซิงค์ในระหว่างการถอดประกอบ ถ้ามีการคิดเกี่ยวกับการสร้างคำสั่งซึ่งจะทำให้ข้ามจุดซิงค์ได้จะเป็นการทิ้งคำสั่งนั้นและส่งออกฐานข้อมูล db แทน ดังนั้นจะเริ่มแยกส่วนประกอบออกจากจุดซิงค์และคุณจะเห็นคำแนะนำทั้งหมดในส่วนรหัสของคุณ จุดซิงค์จะถูกระบุโดยใช้ตัวเลือก - s: มีการวัดในส่วนของต้นกำเนิดของโปรแกรมไม่ใช่ตำแหน่งไฟล์ ดังนั้นถ้าคุณต้องการซิงโครไนซ์หลังจาก 32 ไบต์ของไฟล์คุณจะต้องทำตามที่ระบุข้างต้นคุณสามารถระบุเครื่องหมายการซิงค์หลายรายการได้หากต้องการเพียงแค่ทำซ้ำตัวเลือก - s สมมติว่าคุณกำลังถอดส่วนบูตของฟล็อปปี้ดิสก์ DOS (อาจจะมีไวรัสและคุณต้องเข้าใจไวรัสเพื่อให้คุณรู้ว่าความเสียหายแบบใดที่คุณอาจทำ) โดยปกติแล้วจะมีคำสั่ง JMP ข้อมูลบางส่วนจากนั้นส่วนที่เหลือของโค้ด ดังนั้นมีโอกาสที่ดีมากที่ NDISASM จะไม่ถูกต้องเมื่อข้อมูลสิ้นสุดลงและโค้ดเริ่มต้นขึ้น ดังนั้นจำเป็นต้องมีจุดซิงค์ ในทางกลับกันทำไมคุณควรจะต้องระบุจุดซิงค์ด้วยตนเองสิ่งที่คุณต้องทำเพื่อหาที่จุดซิงค์จะแน่นอนจะอ่านคำสั่ง JMP แล้วใช้ที่อยู่เป้าหมายเป็นจุดซิงค์ . NDISASM สามารถทำเช่นนั้นได้ใช่หรือไม่คำตอบคือใช่: การใช้สวิตช์ตรงกัน - a (สำหรับการซิงค์อัตโนมัติ) หรือ - i (สำหรับการซิงค์อัจฉริยะ) จะเปิดใช้งานโหมดซิงค์อัตโนมัติ โหมดซิงค์อัตโนมัติจะสร้างจุดการซิงค์สำหรับการกระโดดข้ามเครื่องหรือการเรียกตามคำเรียกที่ NDISASM ที่แนะนำไปข้างหน้าโดยอัตโนมัติ (เนื่องจาก NDISASM เป็นแบบพาสเวิร์ดถ้าพบว่ามีการกระโดดแบบ PC-relative ซึ่งเป้าหมายของคุณได้รับการประมวลผลอยู่แล้วจะไม่สามารถทำได้มากนัก) เฉพาะการกระโดดแบบพีซี - ญาติเท่านั้นที่ได้รับการประมวลผลเนื่องจากการกระโดดแบบสัมบูรณ์คือการลงทะเบียน (ในกรณีนี้ NDISASM ไม่ทราบว่ามีการลงทะเบียน) หรือเกี่ยวข้องกับที่อยู่ของกลุ่ม (ในกรณีนี้รหัสเป้าหมายไม่ได้อยู่ในกลุ่มเดียวกันกับที่ NDISASM กำลังทำงานอยู่และจุดเชื่อมต่อไม่ได้วางไว้ที่ใดก็ได้ที่เป็นประโยชน์) สำหรับไฟล์บางประเภทกลไกนี้จะทำให้จุดซิงค์อยู่ในตำแหน่งที่ถูกต้องทั้งหมดและช่วยให้คุณไม่ต้องวางจุดซิงค์ด้วยตนเอง อย่างไรก็ตามควรเน้นว่าโหมดการซิงค์อัตโนมัติไม่ได้รับการรับประกันว่าจะสามารถจับจุดซิงค์ทั้งหมดได้และคุณอาจต้องวางบางส่วนด้วยตนเอง โหมดการซิงค์อัตโนมัติไม่ได้ป้องกันไม่ให้คุณประกาศจุดซิงค์ด้วยตนเอง: จะเพิ่มเฉพาะบุคคลที่สร้างโดยอัตโนมัติให้กับรายการที่คุณระบุเท่านั้น เป็นไปได้อย่างสมบูรณ์เพื่อระบุ - i และบางตัวเลือก ข้อแม้อื่นที่มีโหมดการซิงค์อัตโนมัติคือถ้าโดยบังเอิญที่ไม่พึงประสงค์บางอย่างในส่วนข้อมูลของคุณควรถอดแยกไปใช้กับพีซีแบบสัมพัทธ์หรือเรียกคำสั่งข้าม NDISASM อาจวางจุดซิงค์ไว้ในสถานที่แบบสุ่มทั้งหมดเช่นใน ตรงกลางของคำแนะนำในส่วนรหัสของคุณ ดังนั้นคุณอาจท้ายด้วยการถอดชิ้นส่วนที่ผิดแม้ว่าคุณจะใช้การซิงค์อัตโนมัติ อีกครั้งฉันไม่สามารถทำอะไรเกี่ยวกับเรื่องนี้ได้มากนัก ถ้าคุณมีปัญหาคุณจะต้องใช้จุดซิงค์ด้วยตนเองหรือใช้ตัวเลือก - k (เอกสารด้านล่าง) เพื่อปราบปรามการถอดส่วนข้อมูลออก ตัวเลือก - e จะข้ามส่วนหัวของไฟล์โดยละเว้น N ไบต์แรก ซึ่งหมายความว่าส่วนหัวจะไม่ถูกนับเป็นส่วนหักล้างการถอดถอน: ถ้าคุณให้ e10 - o10 disassembly จะเริ่มต้นที่ไบต์ 10 ในไฟล์และนี่จะได้รับชดเชย 10 ไม่ใช่ 20 ตัวเลือก - k มีอาร์กิวเมนต์ตัวเลขสองตัวที่คั่นด้วยจุลภาคซึ่งเป็นค่าแรกที่มีการชดเชยแอสเซมบลีและสองคือจำนวน ไบต์เพื่อข้าม นี้จะนับข้ามไบต์ไปทางแอสเซมบลีชดเชย: ใช้มันเพื่อปราบปรามการถอดส่วนข้อมูลที่ wouldnt มีสิ่งที่คุณต้องการดูต่อไป ไม่มีข้อบกพร่องที่เป็นที่รู้จัก อย่างไรก็ตามคุณจะพบกับแพทช์หากเป็นไปได้ควรส่งไปที่ nasm-bugslists. sourceforge หรือไปยังเว็บไซต์นักพัฒนาซอฟต์แวร์ที่ nasm. us และพยายามแก้ไขปัญหาเหล่านี้ อย่าลังเลที่จะส่งผลงานและคุณลักษณะใหม่ ๆ รวมทั้งการดาวน์โหลดแคชแบบ CDN สำหรับภาคเอกชนแบบแยกส่วนสำหรับลูกค้าที่ได้รับอนุญาต อย่าพบกับความแตกแยกอีก 404 ครั้งเรียนรู้เพิ่มเติม แพคเกจนี้ได้รับการอนุมัติโดยผู้ดูแล ferventcoder เมื่อ 8182016 Netwide Assembler, NASM เป็น assembler ขนาด 80x86 และ x86-64 ที่ออกแบบมาเพื่อความสามารถในการพกพาและ modularity สนับสนุนรูปแบบไฟล์อ็อบเจ็กต์รวมถึง Linux และ BSD a. out, ELF, COFF, Mach-O, Microsoft 16 บิต OBJ, Win32 และ Win64 นอกจากนี้ยังจะส่งออกไฟล์ไบนารีธรรมดา ไวยากรณ์ของมันถูกออกแบบมาเพื่อให้ง่ายและเข้าใจง่ายคล้ายกับ Intels แต่ไม่ซับซ้อน สนับสนุนส่วนขยายสถาปัตยกรรม x86 ที่รู้จักกันทั้งหมดในปัจจุบันและสนับสนุน macros ที่แข็งแกร่ง เมื่อต้องการติดตั้ง NetWide Assembler ให้รันคำสั่งต่อไปนี้จากบรรทัดคำสั่งหรือจาก PowerShell: C: gt choco install nasm ในการอัพเกรด NetWide Assembler ให้เรียกใช้คำสั่งต่อไปนี้จากบรรทัดคำสั่งหรือจาก PowerShell: C: gt choco upgrade nasm ผลการสแกนไวรัสใน กรณีที่พบมัลแวร์จริงแพ็คเกจอาจมีการลบออก ซอฟต์แวร์บางครั้งมีข้อมูลผิดพลาด ผู้ควบคุมไม่จำเป็นต้องตรวจสอบความถูกต้องของซอฟต์แวร์พื้นฐานโดยเฉพาะอย่างยิ่งว่าแพ็กเกจเรียกซอฟต์แวร์จากจุดแจกจ่ายที่เป็นทางการหรือตรวจสอบซอฟต์แวร์ฝังตัวกับจุดแจกจ่ายที่เป็นทางการ Chocolatey Pro ช่วยป้องกันการทำงานของรันไทม์จากมัลแวร์ที่เป็นไปได้ พึ่งพาแพคเกจนี้ไม่มีการอ้างอิง Maintainer (s) Software ผู้แต่ง Simon Tatham และ Julian Hall และดูแลโดยทีมงานที่นำโดย H. Peter Anvin ลิขสิทธิ์ 1996-2016 NASM Authors - สงวนสิทธิ์ทั้งหมด การสนทนาสำหรับ NetWide Assembler Package กฎพื้นฐาน: การสนทนานี้เกี่ยวกับ NetWide Assembler และ NetWide Assembler package เท่านั้น หากคุณมีข้อเสนอแนะเกี่ยวกับ Chocolatey โปรดติดต่อกลุ่ม google การสนทนานี้จะดำเนินการผ่านหลายเวอร์ชัน หากคุณมีความคิดเห็นเกี่ยวกับเวอร์ชันใดโปรดทราบว่าในความคิดเห็นของคุณ ผู้ดูแลแพคเกจ Chocolatey นี้จะได้รับแจ้งเกี่ยวกับข้อคิดเห็นใหม่ ๆ ที่โพสต์ไว้ในหัวข้อ Disqus นี้ แต่จะไม่รับประกันว่าคุณจะได้รับการตอบกลับ ถ้าคุณไม่ได้รับการตอบกลับจากผู้ดูแลรักษาหลังจากโพสต์ข้อความด้านล่างโปรดติดตามโดยใช้ลิงก์ที่ด้านซ้ายของหน้านี้หรือไปที่ลิงก์นี้เพื่อติดต่อผู้ดูแลรักษา หากคุณยังไม่ได้รับการตอบกลับโปรดปฏิบัติตามขั้นตอนการจัดแพคเกจ บอกให้เรารู้ว่าคุณชอบอะไรเกี่ยวกับแพคเกจหรือ NetWide Assembler หรือบอกเราว่าต้องการปรับปรุงอะไรบ้าง แบ่งปันประสบการณ์ของคุณกับแพคเกจหรือการกำหนดค่าเพิ่มเติมหรือ gotchas ที่คุณพบ หากคุณใช้ URL ความคิดเห็นจะถูกตั้งค่าสถานะเพื่อการกลั่นกรองจนกว่าคุณจะได้รับอนุญาตให้เข้าร่วม ไม่ยอมรับความคิดเห็นที่ได้รับการอนุมัติตามตารางเวลารายสัปดาห์หากไม่ช้ากว่านี้ อาจใช้เวลาตั้งแต่ 1-5 วันเพื่อแสดงความคิดเห็นของคุณ เป็นคนแรกที่รู้เกี่ยวกับคุณลักษณะที่กำลังจะวางจำหน่ายด้านความปลอดภัยและข่าวเกี่ยวกับ Chocolatey. nasm (1) - หน้า man man ของ Linux - Netwide Assembler ซึ่งเป็นไฟล์แอ็กเซสแอ็กทีฟ nasm-response แบบพกพาขนาด 80x86 - f - o-outfile - l listfile options ชื่อไฟล์ nasm - h nasm - v คำอธิบายคำสั่ง nasm ประกอบไฟล์ชื่อไฟล์และนำส่งออกไปยังแฟ้มเอาท์พุทถ้าระบุ หากไม่มีการระบุไฟล์เอาไว้ nasm จะได้รับชื่อไฟล์ที่ส่งออกค่าเริ่มต้นจากชื่อไฟล์อินพุตโดยปกติจะใช้นามสกุล. o หรือ. obj หรือโดยการลบนามสกุลทั้งหมดสำหรับไฟล์ไบนารีดิบ ไม่ว่าจะเป็นชื่อไฟล์ที่ส่งออกจะเป็น nasm. out ตัวเลือก - ชื่อไฟล์สาเหตุ nasm เพื่อดำเนินการตัวเลือกจากชื่อไฟล์ราวกับว่าพวกเขาถูกรวมอยู่ในบรรทัดคำสั่ง ทำให้เกิด nasm เพื่อประกอบไฟล์ป้อนข้อมูลที่ระบุโดยไม่ต้องใช้ตัวประมวลผลมาโครก่อน - D macrovalue กำหนดมาโครล่วงหน้าบรรทัดเดียว - d macrovalue เหมือนกับตัวเลือก - D - e ทำให้ nasm สามารถประมวลผลไฟล์อินพุตที่กำหนดไว้ล่วงหน้าและเขียนข้อมูลเอาต์พุตไปยัง stdout (หรือชื่อไฟล์ที่ระบุเอาต์พุต) และไม่ได้รวบรวมอะไรเลย รูปแบบ - f ระบุรูปแบบไฟล์ที่ส่งออก หากต้องการดูรายการรูปแบบการแสดงผลที่ถูกต้องให้ใช้ตัวเลือก - hf - g ทำให้ NASM สร้างข้อมูลการแก้ปัญหาในรูปแบบที่เลือกสาเหตุ nasm จะออกทันทีหลังจากสรุปตัวเลือกการอุทธรณ์ เช่นเดียวกับ - h แต่ยังแสดงรูปแบบผลลัพธ์ที่ถูกต้องทั้งหมด - I directory เพิ่มไดเร็กทอรี่ลงในพา ธ การค้นหาสำหรับใส่ไฟล์ ข้อกำหนดของไดเร็กทอรีต้องมีเครื่องหมายทับท้ายเนื่องจากจะมีการระบุชื่อไฟล์ที่รวมไว้ก่อน - i ไดเรกทอรีเหมือนกับตัวเลือก - I - l listfile ทำให้รายการแอสเซมบลีถูกนำไปยังไฟล์ที่ระบุโดยที่แหล่งต้นฉบับจะแสดงอยู่ทางด้านขวามือ (รวมทั้งแหล่งที่มาของไฟล์ที่รวมและการขยายมาโครหลายบรรทัด) และโค้ดที่สร้างขึ้นจะแสดงไว้ hex ด้านซ้าย - M ทำให้ nasm ส่งออกการพึ่งพาแบบ Makefile ไปยัง stdout output ปกติจะถูกระงับ - O หมายเลขเพิ่มประสิทธิภาพ offsets สาขา (-O0 ปิดใช้งานค่าเริ่มต้น) - o outfile ระบุชื่อที่ถูกต้องสำหรับไฟล์ที่ส่งออกการเอาชนะค่าเริ่มต้นของ nasm s ในการระบุ - P file ระบุไฟล์ที่จะรวมไว้ก่อนที่แฟ้มต้นทางหลักจะเริ่มประมวลผล - p เช่นเดียวกับตัวเลือก - P ก่อให้เกิด NASM เพื่อออกจากระบบทันทีหลังจากแสดงหมายเลขเวอร์ชันแล้ว (ล้าสมัย) สาเหตุ nasm เพื่อส่งข้อความแสดงข้อผิดพลาดและหรือช่วยให้ข้อความ stdout แทน stderr สาเหตุ nasm ในการประกอบในโหมดที่เข้ากันได้กับ SciTech TASM - U macro ไม่สามารถระบุได้ว่าเป็นแมโครแบบเส้นเดียว - u แมโครเหมือนกับตัวเลือก - U - v ทำให้ Nasm เพื่อออกจากระบบทันทีหลังจากแสดงหมายเลขเวอร์ชันแล้ว - w-foo ทำให้ nasm เปิดใช้งานหรือปิดใช้งานข้อความเตือนบางประเภทเช่น - worphan-labels หรือ - w-macro-params - X ระบุรูปแบบการรายงานข้อผิดพลาด (gnu หรือ vc) - Z ชื่อไฟล์สาเหตุ nasm เพื่อเปลี่ยนเส้นทางข้อความแสดงข้อผิดพลาดไปยังชื่อไฟล์ ตัวเลือกนี้มีอยู่เพื่อสนับสนุนระบบปฏิบัติการที่ stderr ไม่สามารถเปลี่ยนเส้นทางได้อย่างง่ายดาย SYNTAX หน้าคนนี้ไม่เต็มอธิบายไวยากรณ์ของภาษาแอสเซมบลี nasm s แต่จะให้สรุปความแตกต่างจากผู้ประกอบการอื่น ๆ รีจิสเตอร์ไม่มีเครื่องหมายชั้นนำซึ่งแตกต่างจากแก๊ส และการลงทะเบียน stack-point stack จะเรียกว่า st0 st1 และอื่น ๆ คำแนะนำ Floating-point อาจใช้แบบฟอร์ม single-operand หรือ double คำสำคัญ TO มีให้ดังนั้นหนึ่งสามารถเขียน fadd st1, st0 หรือหนึ่งสามารถใช้รูปแบบตัวเลือกเดียวทางเลือกอื่น ๆ เพื่อ st1 เก็บข้อมูลที่ไม่ได้สงวนไว้ถูกสงวนไว้โดยใช้ RESB RESW RESD RESQ REST และ RESO pseudo-opcodes แต่ละพารามิเตอร์ที่ให้จำนวนไบต์คำวลี doublewords quadwords หรือสิบไบต์เพื่อสงวน การทำซ้ำของรายการข้อมูลไม่ได้ทำตามคำหลัก DUP ตามที่เห็นในผู้ประกอบการ DOS แต่โดยการใช้คำนำหน้า TIMES เช่นนี้ข้อความ: ครั้ง 3 db abc ครั้ง 64 ข้อความ 0 db ซึ่งกำหนดสตริง abcabcabc ตามด้วย หมายเลขด้านขวาของศูนย์ไบต์เพื่อให้มีความยาวรวมสูงสุด 64 ไบต์ การอ้างอิงสัญลักษณ์หมายถึงอยู่เสมอ (เช่นที่อยู่ของสัญลักษณ์) เว้นแต่จะใช้วงเล็บเหลี่ยมซึ่งในกรณีนี้จะใช้เนื้อหาของตำแหน่งหน่วยความจำ ดังนั้น mov axe, wordvar โหลด AX ด้วยที่อยู่ของตัวแปร wordvar ขณะที่ mov axe, es: wordvarbx ทั้งหมดดูที่เนื้อหาของตำแหน่งหน่วยความจำ ไวยากรณ์ es mov ax, wordvar1 ไม่ถูกต้องตามกฎหมายแม้ว่าการใช้ชื่อการลงทะเบียนส่วนหนึ่งเป็นคำนำหน้าคำสั่งถูกต้องและสามารถใช้ได้กับคำแนะนำเช่น LODSB ซึ่งไม่สามารถแทนที่ได้ด้วยวิธีอื่น ค่าคงที่อาจแสดงเป็นตัวเลขในรูปแบบส่วนใหญ่: H, Q หรือ B หมายถึง hex, octal หรือ binary ตามลำดับและนำ 0x หรือ hexotes ด้วย ศูนย์ชั้นนำไม่ได้รับการปฏิบัติเป็นพิเศษเลย ค่าคงที่ของอักขระอาจอยู่ในเครื่องหมายคำพูดเดี่ยวหรือสองคำโดยไม่มีตัวหนี การสั่งซื้อคือ little-endian (reversed) เพื่อให้ตัวอักษร abcd คงที่หมายถึง 0x64636261 และไม่ใช่ 0x61626364 ป้ายชื่อท้องถิ่นเริ่มต้นด้วยช่วงเวลาและสถานที่ของพวกเขาจะได้รับจากผู้ประกอบการที่ใช้ชื่อของสัญลักษณ์ที่ไม่ใช่ท้องถิ่นก่อนหน้านี้ จึงประกาศฉลาก. เล็ดลอดหลังจากป้ายกำกับฉลากได้กำหนดสัญลักษณ์ที่เรียกว่า label. loop ชื่อ DIRECTIVES SEGMENT หรือชื่อกลุ่มทำให้ Nasm นำรหัสต่อไปนี้ไปยังส่วนที่มีชื่อ ชื่อส่วนแตกต่างกันไปตามรูปแบบไฟล์ที่ส่งออกแม้ว่ารูปแบบส่วนใหญ่จะสนับสนุนชื่อ. text ข้อมูลและ. bss (ยกเว้นรูปแบบ obj ซึ่งในทุกกลุ่มจะกำหนดโดยผู้ใช้) ที่อยู่ ABSOLUTE ทำให้ nasm ตั้งตำแหน่งจุดการชุมนุมที่เป็นที่อยู่แบบสัมบูรณ์: ดังนั้นจึงไม่มีรหัสหรือข้อมูลใด ๆ เกิดขึ้น แต่คุณสามารถใช้ RESB ได้ RESW และ RESD เพื่อย้ายจุดเชื่อมต่อไปอีกและคุณสามารถกำหนดป้ายชื่อได้ ดังนั้นคำสั่งนี้อาจถูกใช้เพื่อกำหนดโครงสร้างข้อมูล เมื่อเสร็จสิ้นการประกอบแบบสัมบูรณ์แล้วคุณต้องออกคำสั่ง SECTION อื่นเพื่อกลับเข้าสู่สภาวะปกติ BITS 16 BITS 32 หรือ BITS 64 จะเปลี่ยนโหมดโปรเซสเซอร์เริ่มต้นที่ NASM กำลังสร้างรหัส: เทียบเท่ากับ USE16 หรือ USE32 ในผู้ประกอบระบบ DOS สัญลักษณ์ EXTERN และสัญลักษณ์สัญลักษณ์การนำเข้าและส่งออก GLOBAL ตามลำดับจากและไปยังโมดูลอื่น ๆ โปรดทราบว่าคำสั่ง GLOBAL ต้องปรากฏก่อนคำจำกัดความของสัญลักษณ์ที่อ้างถึง strucname STRUC และ ENDSTRUC เมื่อใช้กับวงเล็บ RESB จำนวนหนึ่ง RESW หรือคำแนะนำที่คล้ายกันกำหนดโครงสร้างข้อมูล นอกเหนือจากการกำหนดการชดเชยของโครงสร้างแล้วโครงสร้างจะกำหนดสัญลักษณ์สำหรับขนาดของโครงสร้างซึ่งเป็นเพียงชื่อโครงสร้างที่มีขนาดเท่ากับปลาย รูปแบบ FORMAT-specific Direction ORG address ถูกใช้โดยรูปแบบไบนารีแบนรูปแบบแบนด์และระบุที่อยู่ที่จะให้โหลดโค้ดเอาท์พุทในที่สุด GROUP GRUP_NAME seg1 seg2 ถูกใช้โดยรูปแบบเอาต์พุต obj (Microsoft 16 บิต) และกำหนดกลุ่มกลุ่ม รูปแบบนี้ยังใช้ UPPERCASE ซึ่งชี้ให้เห็นว่ากลุ่มกลุ่มและชื่อสัญลักษณ์ทั้งหมดที่ส่งออกไปยังไฟล์อ็อบเจ็กต์ควรเป็นตัวพิมพ์ใหญ่ โปรดทราบว่าแอสเซมบลีที่เกิดขึ้นจริงยังคงเป็นกรณี ๆ ไป LIBRARY libname ใช้รูปแบบไฟล์ rdf และทำให้บันทึกข้อมูลพึ่งพาไปยังไฟล์ที่ส่งออกซึ่งระบุว่าโปรแกรมต้องการไลบรารีบางตัวเพื่อที่จะรัน MACRO PREPROCESSOR แมโครแบบบรรทัดเดียวถูกกำหนดโดยใช้คำสั่ง define หรือ idefine ในลักษณะคล้ายกับตัวประมวลผล C แม้ว่าจะกำหนดมาโครโดยไม่มีพารามิเตอร์จะป้องกันไม่ให้คำจำกัดความของมาโครใด ๆ ที่มีชื่อเดียวกันกับการใช้พารามิเตอร์และในทางกลับกัน กำหนดแมโครที่มีชื่อตรงกันกรณี - sensitively ในขณะที่ idefine กำหนดแมโครตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ มาโครและ imacro (มีความแตกต่างเหมือนกันระหว่าง define และ idefine) ซึ่งมีไวยากรณ์ดังนี้: ชื่อมาโคร minprm - maxprm. nolist ค่าเริ่มต้น ltsome ของ macro expansion textgt endmacro อีกครั้งแมโครเหล่านี้อาจ มากเกินไป เครื่องหมายบวกต่อท้ายระบุว่าพารามิเตอร์ใด ๆ หลังจากได้รับข้อมูลย่อยสุดท้ายด้วยการคั่นด้วยเครื่องหมายจุลภาคเป็นพารามิเตอร์สุดท้าย ส่วนดีฟอลต์สามารถใช้เพื่อระบุค่าดีฟอลต์สำหรับพารามิเตอร์มาโครที่ไม่ระบุภายหลัง minparam endm เป็นคำพ้องที่สมเหตุสมผลสำหรับ endmacro หากต้องการอ้างอิงพารามิเตอร์แมโครภายในการขยายมาโครให้ใช้ 1. 2 และอื่น ๆ นอกจากนี้คุณยังสามารถบังคับให้พารามิเตอร์แมโครควรมีรหัสเงื่อนไขโดยใช้ 1 และคุณสามารถแปลงรหัสเงื่อนไขโดยใช้ -1 นอกจากนี้คุณยังสามารถกำหนดป้ายกำกับเฉพาะสำหรับคำร้องขอแมโครโดยนำหน้าคำนำหน้าด้วยเครื่องหมาย double ไฟล์สามารถรวมโดยใช้คำสั่ง include ซึ่งทำงานได้เช่น C. Preprocessor มีคอนเท็กซ์สแต็คซึ่งอาจใช้โดยมาโครหนึ่งเพื่อเก็บข้อมูลที่เรียกค้นในภายหลัง คุณสามารถดันบริบทลงบนกองโดยใช้การกด ลบหนึ่งโดยใช้ป๊อป และเปลี่ยนชื่อของบริบทด้านบน (โดยไม่รบกวนข้อกำหนดที่เกี่ยวข้องใด ๆ ) โดยใช้ repl ป้ายกำกับและกำหนดมาโครเฉพาะกับบริบทด้านบนอาจมีการกำหนดโดยนำหน้าชื่อไปใช้ด้วยและสิ่งที่เฉพาะเจาะจงสำหรับบริบทถัดไปด้วยและอื่น ๆ การชุมนุมตามเงื่อนไขทำได้โดยใช้ ifdef ifndef else และ endif เช่นเดียวกับใน C. (ยกเว้นว่า ifdef สามารถยอมรับชื่อมาโครทหลายตัวและจะประเมิน TRUE ถ้ามีการกำหนดค่าใด ๆ ) นอกจากนี้ directive ifctx และ ifnctx สามารถใช้กับเงื่อนไขในชื่อของบริบทด้านบน ในบริบทสแตก ชุดที่ชัดเจนของคำสั่ง else-if อื่น ๆ elifdef elifndef elifctx และ elifnctx ได้รับการสนับสนุน โปรดรายงานข้อผิดพลาดผ่านฟังก์ชันติดตามบั๊กที่ nasm. sourceforge. org อ้างอิงโดย
No comments:
Post a Comment