www.wikidata.de-de.nina.az
Der Microsoft Macro Assembler abgekurzt MASM ist ein von Microsoft entwickelter Assembler fur x86 Prozessoren Er ubersetzt Assemblerquelltext in ausfuhrbaren nativen Maschinencode Der Microsoft Macro Assembler entwickelte sich zeitweise zum meistbenutzten Assembler fur die Entwicklung von MS DOS Programmen Heutzutage ist MASM der bevorzugte Assembler fur alle Microsoft basierenden Betriebssysteme wohl auch aufgrund des MASM32 SDK Er ist in aktuellen Versionen in der Entwicklungsumgebung Microsoft Visual Studio und Express enthalten es gibt ihn aber auch in einer separaten Download Version Die kostenlosen Versionen von MASM durfen nicht fur kommerzielle Zwecke verwendet werden Zudem darf man sie nur zur Entwicklung fur Microsoft Betriebssysteme verwenden alle anderen Betriebssysteme sind ausdrucklich durch die EULA End User License Agreement ausgeschlossen Als kommerzieller Konkurrent zum Microsoft Macro Assembler behauptete sich besonders der Turbo Assembler von Borland 1 Als kostenlose und freie Alternativen sind beispielsweise die beiden MASM kompatiblen Programme jWasm und UASM verfugbar Ausserdem gibt es noch den Netwide Assembler und Flat assembler mit eigner Syntax In der aktuellen Version 14 0 werden folgende Befehlssatze unterstutzt x86 Architektur x87 fpu MMX 3DNow SSE SSE2 SSE3 SSSE3 SSE4 1 SSE4 2 SSE4 A VMX AVX AVX2 AES CVT16 FMA3 und FMA4 Ab der Version 8 0 gibt es zwei Ausgaben unter derselben Versionsnummer eine fur die x86 32 Architektur und eine fur die x86 64 Architektur Inhaltsverzeichnis 1 Ausdrucke ahnlich den Hochsprachen 2 Macros 3 Versionen 4 Beispielprogramme 4 1 Beispiel 1 4 2 Beispiel 2 4 3 Beispiel 3 5 Weblinks 6 EinzelnachweiseAusdrucke ahnlich den Hochsprachen BearbeitenMASM verfugt uber Ausdrucke wie man sie aus C kennt Diese erleichtern die Programmierung und helfen den Quelltext ubersichtlicher zu halten while endw repeat until break continue if elseif else endif invoke Funktionsaufruf Macros BearbeitenEine besonders hervorstechende Eigenschaft von MASM ist wie der Name schon erahnen lasst das ausserst machtige Makrosystem Mit ihm ist es sowohl moglich Programmcode zu erstellen als auch Text zu verarbeiten So ist es z B moglich Konstrukte hoherer Programmiersprachen wie switch Mehrfachauswahl in C zu generieren Versionen BearbeitenDer IBM Macro Assembler und der IBM Macro Assembler 2 waren OEM Versionen des MASM Obwohl MASM kein kommerzielles Produkt mehr ist wird es von Microsoft weiterhin unterstutzt Die letzte MASM Version die als einzelnes Softwarepaket verkauft wurde war die Version 6 11 MASM Version Datum Produkt Bemerkungen1 0 1981 IBM fur 80862 0 1984 Einzelprodukt fur 8086 80873 0 1984 Einzelprodukt 4 0 1985 Einzelprodukt 5 0 1987 Einzelprodukt 5 1 1988 Einzelprodukt OS 2 Unterstutzung6 0 1991 Einzelprodukt 32bit und OS 2 Unterstutzung mit der integrierten Entwicklungsumgebung Programmer s WorkBench6 1 1992 Einzelprodukt 6 11 1993 Einzelprodukt 6 11d 19 09 1995 Windows 95 Driver Developer Kit 6 11d ist die letzte Version fur DOS6 12 27 08 1997 Update Unterstutzung fur Intel MMX Instruktionen ohne DOS Extender6 13 05 12 1997 Update Unterstutzung fur AMD 3DNow Instruktionen6 14 12 04 1999 Update Unterstutzung fur SSE6 15 2000 Visual C 6 0 Processor Pack Unterstutzung fur SSE27 0 2002 Visual C NET 20027 1 2003 Visual C NET 20038 0 2005 Visual C 2005 ab 8 0 zwei getrennte Versionen x86 32 ml exe und x86 64 ml64 exe SSE3 SSSE39 0 2008 Visual C 2008 SSE4 1 SSE4 2 SSE4 A10 0 2010 Visual C 2010 AVX AES11 0 2011 Visual C 2011 AVX2 FMA half precision conversion12 0 2013 Visual C 201314 0 2019 Visual Studio 2019Beispielprogramme BearbeitenBeispiel 1 Bearbeiten Dieses Programm zeigt ein Dialogfenster mit dem Text Hello World an 686 model flat stdcall option casemap none include windows inc MASM32 SDK include user32 inc include kernel32 inc includelib user32 lib includelib kernel32 lib StrA macro text lt gt macro IFNDEF some cntr some cntr 0 ELSE some cntr some cntr 1 ENDIF IFNB lt text gt data CatStr stra some cntr db text 0 code EXITM lt OFFSET CatStr stra some cntr gt ELSE echo string required EXITM lt gt ENDIF endm code start code invoke MessageBox NULL StrA Hello World StrA Say hello MB OK invoke ExitProcess NULL end start Beispiel 2 Bearbeiten Dieses Beispielprogramm zeigt ein Fenster mit dem Text Hello World include masm32rt inc MASM32 SDK data ClassName db WinClass 0 AppName db Hello World App 0 Text db Hello World 0 data msg MSG lt gt wc WNDCLASSEX lt gt code start mov wc hInstance rv GetModuleHandle NULL fill WNDCLASSEX struct mov wc cbSize SIZEOF WNDCLASSEX mov wc style CS HREDRAW or CS VREDRAW mov wc lpfnWndProc OFFSET WndProc mov wc hbrBackground rv CreateSolidBrush 0 FFFFFFh mov wc lpszClassName OFFSET ClassName mov wc hIcon rv LoadIcon NULL IDI APPLICATION mov wc hIconSm eax mov wc hCursor rv LoadCursor NULL IDC ARROW invoke RegisterClassEx OFFSET wc invoke CreateWindowEx NULL create window OFFSET ClassName OFFSET AppName WS OVERLAPPEDWINDOW CW USEDEFAULT CW USEDEFAULT CW USEDEFAULT CW USEDEFAULT NULL NULL wc hInstance NULL push eax tricky parameter passing invoke ShowWindow DWORD ptr esp 4 SW SHOWNORMAL call UpdateWindow while TRUE message loop invoke GetMessage OFFSET msg NULL 0 0 break if eax invoke TranslateMessage OFFSET msg invoke DispatchMessage OFFSET msg endw invoke ExitProcess 0 exit Program WndProc proc hWnd DWORD uMsg DWORD wParam DWORD lParam DWORD window call back function LOCAL ps PAINTSTRUCT LOCAL rect RECT if uMsg WM DESTROY invoke PostQuitMessage NULL elseif uMsg WM PAINT invoke BeginPaint hWnd ADDR ps paint text Hello World invoke GetClientRect hWnd ADDR rect invoke DrawText ps hdc OFFSET Text SIZEOF Text ADDR rect DT CENTER or DT VCENTER or DT SINGLELINE invoke EndPaint hWnd ADDR ps else invoke DefWindowProc hWnd uMsg wParam lParam ret endif xor eax eax ret WndProc endp end start Beispiel 3 Bearbeiten Dieses Programm demonstriert einen Algorithmus zur Bestimmung von Zeichenkettenlangen unter Zuhilfenahme von SSE2 Instruktionen include masm32rt inc MASM32 SDK 686p choose instruction set mmx xmm szLenXmm proto DWORD data szTextA db This string is 55 bytes long without termination zero 0 code start invoke szLenXmm OFFSET szTextA call szLenXmm invoke MessageBox 0 OFFSET szTextA cat chr string size udword eax generate title using macros MB OK invoke ExitProcess 0 exit program szLenXmm proc lpString DWORD determine string size mov edx lpString using XMM instrutions pxor xmm1 xmm1 xor ecx ecx PS under extremely rarely align 16 conditions this func may movdqu xmm0 OWORD ptr edx cause an access violation pcmpeqb xmm0 xmm1 pmovmskb eax xmm0 test eax eax lea ecx ecx 16 lea edx edx 16 jz B lea ecx ecx 16 bsf eax eax if ZERO lea ecx eax ecx endif str size returns mov eax ecx through EAX ret szLenXmm endp end startWeblinks BearbeitenDownload MASM 8 0 fur Visual C 2005 Express Edition Microsoft Macro Assembler Reference MSDN MASM32 SDK MASM32 Support Forum Deutscher Support und Beispielprogramme fur MASM32 jWasm UASMEinzelnachweise Bearbeiten DOS International 06 1989 S 50 MASM 5 1 oder TASM 1 0 Die Qual der Wahl Abgerufen von https de wikipedia org w index php title Microsoft Macro Assembler amp oldid 239148120