مایکروسافت ماکرو اسمبلر
مایکروسافت ماکرو اسمبلر (به انگلیسی: Microsoft Macro Assembler) یا MASM یک اسمبلر خانواده ایکس۸۶ برای سیستم عامل اماس-داس و مایکروسافت ویندوز است که از طیف گستردهای از امکانات ماکرو و برنامهنویسی ساختیافته، شامل تابعهای سطح بالا برای تشکیل حلقه و روالها، پشتیبانی میکند. مایکروسافت ماکرو اسمبلر از نسخهٔ ۸ به بعد شامل دو اسمبلر است که ML.EXE برای دادههای ۱۶-بیتی و ۳۲-بیتی و ML64.EXE برای دادههای ۶۴-بیتی استفاده میشود.
توسعهدهنده(ها) | مایکروسافت |
---|---|
انتشار پایدار | ۱۱٫۰۰٫۶۰۶۱۰٫۱
۲۶ ژوئن ۲۰۱۳ |
سیستمعامل | مایکروسافت ویندوز و اماس-داس |
گونه | اسمبلر |
پروانه | Microsoft EULA |
وبگاه |
این اسمبلر توسط مایکروسافت عرضه شده ولی از نسخهٔ ۶٫۱۲ فروش آن به عنوان یک محصول جداگانه متوقف شد و به همراه کیتهای توسعهٔ نرمافزار و مفسرهای زبان سی این شرکت عرضه گردید. نسخههای اخیر MASM در بستهٔ نرمافزاری مایکروسافت ویژوال استودیو موجود است.
ابزارهای پشتیبان
برخی از نرمافزارهایی که از مایکروسافت ماکرو اسمبلر پشتیبانی میکنند عبارتند از:
محیطهای یکپارچه توسعه نرمافزار
- RadASM
- WinAsm Studio
- EasyCode
- Visual Studio
اشکالزداها
دیساسمبلرها
- دیاسمبلر تعاملی IDAPro
دیگر اسمبلرهای سازگار
اسمبلرهای زیر میتوانند بیشتر کدهایی را که برای مایکروسافت ماکرو اسمبلر نوشته شده به استثنای آنهایی که شامل ماکروهای پیچیده هستند را اسمبل کنند:
- توربو اسمبلر توسط بورلند عرضه شد و سپس به مالکیت امبارکادرو (به انگلیسی: Embarcadero) در آمد. آخرین بار در سال ۲۰۰۲ بهروزرسانی شد و برای چندین سال همراه با دلفی و سی++بیلدر عرضه شد.
- جیوسم ماکرو اسمبلر (به انگلیسی: JWASM Macro Assembler)
- پلز ماکرو اسمبلر (به انگلیسی: Pelle's Macro Assembler) که جزئی از محیط توسعه پلز سی (به انگلیسی: Pelles C) بود.
مثال
برنامه 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