مایکروسافت ماکرو اسمبلر

از ویکی‌پدیا، دانشنامهٔ آزاد
Microsoft Macro Assembler
توسعه‌دهنده(ها)مایکروسافت
انتشار پایدار
۱۱٫۰۰٫۶۰۶۱۰٫۱
۲۶ ژوئن ۲۰۱۳؛ ۱۰ سال پیش (۲۰۱۳-26}})
سیستم‌عاملمایکروسافت ویندوز و ام‌اس-داس
گونهاسمبلر
پروانهMicrosoft EULA
وبگاه

مایکروسافت ماکرو اسمبلر (به انگلیسی: Microsoft Macro Assembler) یا MASM یک اسمبلر خانواده ایکس۸۶ برای سیستم عامل ام‌اس-داس و مایکروسافت ویندوز است که از طیف گسترده‌ای از امکانات ماکرو و برنامه‌نویسی ساخت‌یافته، شامل تابع‌های سطح بالا برای تشکیل حلقه و روال‌ها، پشتیبانی می‌کند. مایکروسافت ماکرو اسمبلر از نسخهٔ ۸ به بعد شامل دو اسمبلر است که ML.EXE برای داده‌های ۱۶-بیتی و ۳۲-بیتی و ML64.EXE برای داده‌های ۶۴-بیتی استفاده می‌شود.

این اسمبلر توسط مایکروسافت عرضه شده ولی از نسخهٔ ۶٫۱۲ فروش آن به عنوان یک محصول جداگانه متوقف شد و به همراه کیت‌های توسعهٔ نرم‌افزار و مفسرهای زبان سی این شرکت عرضه گردید. نسخه‌های اخیر MASM در بستهٔ نرم‌افزاری مایکروسافت ویژوال استودیو موجود است.

ابزارهای پشتیبان[ویرایش]

برخی از نرم‌افزارهایی که از مایکروسافت ماکرو اسمبلر پشتیبانی می‌کنند عبارتند از:

محیط‌های یکپارچه توسعه نرم‌افزار[ویرایش]

اشکال‌زداها[ویرایش]

دیس‌اسمبلرها[ویرایش]

  • دی‌اسمبلر تعاملی IDAPro

دیگر اسمبلرهای سازگار[ویرایش]

اسمبلرهای زیر می‌توانند بیشتر کدهایی را که برای مایکروسافت ماکرو اسمبلر نوشته شده به استثنای آن‌هایی که شامل ماکروهای پیچیده هستند را اسمبل کنند:

مثال[ویرایش]

برنامه Hello World برای سیستم‌عامل ام‌اس-داس (۱۶-بیتی):

.model small
.stack 2048

.data
message db "Hello, World!", '$'

.code
main proc
	mov ax, @data
	mov ds, ax 
	
	mov ah, 09h
	mov dx, offset message
	int 21h
	
	mov ax, 4c00h
	int 21h
main endp
	end main

معادل همین برنامه برای مایکروسافت ویندوز (۳۲-بیتی):

.386
.model small, stdcall
.stack 4096

includelib kernel32.lib

STD_OUTPUT_HANDLE equ -11					; predefined Win API constant

GetStdHandle proto, 				; get standard handle
	nStdHandle:dword 					; type of console handle

WriteConsoleA proto,					 	; write a buffer to the console
	hConsoleOutput:dword,				 	; output handle
	lpBuffer:ptr byte,					; pointer to buffer
	nNumberOfCharsToWrite:dword,		 		; size of buffer
	lpNumberOfCharsWritten:ptr dword,	 		; ptr to number of bytes written
	lpReserved:dword					; (not used)
	
ExitProcess proto,
	dwExitCode:dword

.data
message		db "Hello, World!"				; string to write
bytesWritten	dw ? 		 			; number of bytes written

.code
main proc
	invoke GetStdHandle, STD_OUTPUT_HANDLE			; returns console output handle to eax
		
	invoke WriteConsoleA,
		eax, 					; console output handle
		offset message,			 	; points to string
		13,					 	; string length
		offset bytesWritten, 		 		; returns number of bytes written
		0
	
	invoke ExitProcess, 0
main endp
	end main

جستارهای وابسته[ویرایش]

منابع[ویرایش]

پیوند به بیرون[ویرایش]