<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Microsoft_Macro_Assembler</id>
	<title>Microsoft Macro Assembler - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Microsoft_Macro_Assembler"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Microsoft_Macro_Assembler&amp;action=history"/>
	<updated>2026-06-08T06:45:05Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Microsoft_Macro_Assembler&amp;diff=320718&amp;oldid=prev</id>
		<title>imported&gt;Siegbert v2: + Normdaten</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Microsoft_Macro_Assembler&amp;diff=320718&amp;oldid=prev"/>
		<updated>2026-03-01T06:44:49Z</updated>

		<summary type="html">&lt;p&gt;+ Normdaten&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Microsoft Macro Assembler&amp;#039;&amp;#039;&amp;#039; (abgekürzt &amp;#039;&amp;#039;&amp;#039;MASM&amp;#039;&amp;#039;&amp;#039;) ist ein von [[Microsoft]] entwickelter [[Assembler (Informatik)|Assembler]] für [[x86-Prozessor]]en. Er übersetzt [[Assemblersprache|Assemblerquelltext]] in ausführbaren, nativen [[Maschinencode]].&lt;br /&gt;
&lt;br /&gt;
Der Microsoft Macro Assembler entwickelte sich zeitweise zum meistbenutzten Assembler für die Entwicklung von [[MS-DOS]]-Programmen. Heutzutage ist MASM der bevorzugte Assembler für alle von Microsoft stammenden [[Betriebssystem]]e. Er ist in aktuellen Versionen in der [[Integrierte Entwicklungsumgebung|integrierten Entwicklungsumgebung]] (IDE) [[Microsoft Visual Studio]] enthalten. Früher wurde er als eigenständiges [[Programmpaket|Softwarepaket]] vertrieben. Die kostenlosen Versionen von MASM (aus &amp;#039;&amp;#039;Visual Studio Community&amp;#039;&amp;#039;; früher &amp;#039;&amp;#039;Express&amp;#039;&amp;#039;) dürfen nicht für kommerzielle Zwecke verwendet werden. Zudem darf man sie nur zur Entwicklung von Software für Microsoft-Betriebssysteme verwenden –&amp;amp;nbsp;alle anderen Betriebssysteme sind ausdrücklich durch die [[Endbenutzer-Lizenzvertrag|EULA]] (&amp;#039;&amp;#039;End-User License Agreement&amp;#039;&amp;#039;) ausgeschlossen.&lt;br /&gt;
&lt;br /&gt;
Als kommerzieller Konkurrent zum Microsoft Macro Assembler behauptete sich besonders der [[Turbo Assembler]] von [[Borland]].&amp;lt;ref&amp;gt;{{Literatur |Titel=MASM 5.1 oder TASM 1.0 Die Qual der Wahl |Sammelwerk=DOS International |Band=89 |Nummer=6 |Verlag=DMV |Datum=1989 |Sprache=de |ISSN=0933-1557 |Seiten=50}}&amp;lt;/ref&amp;gt; Als kostenlose und [[Freie Software|freie]] Alternativen sind beispielsweise die beiden MASM kompatiblen Programme JWasm und UASM verfügbar.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://github.com/Baron-von-Riedesel/JWasm |titel=JWasm |werk=japheth |sprache=en |abruf=2025-10-25}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.terraspace.co.uk/uasm.html |titel=UASM |werk=terraspace.co.uk |sprache=en |abruf=2022-07-10}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
Außerdem gibt es noch den [[Netwide Assembler]] und [[Flat assembler]] mit eigner Syntax.&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Version 14.0 werden folgende [[Befehlssatz|Befehlssätze]] unterstützt: [[x86-Architektur]], [[x87]]-[[Gleitkommaeinheit|fpu]], [[Multi Media Extension|MMX]], [[3DNow]], [[Streaming SIMD Extensions|SSE]], [[Streaming SIMD Extensions 2|SSE2]], [[Streaming SIMD Extensions 3|SSE3]], [[Supplemental Streaming SIMD Extensions 3|SSSE3]], [[Streaming SIMD Extensions 4|SSE4.1]], [[Streaming SIMD Extensions 4|SSE4.2]], [[SSE4a|SSE4.A]], [[x86-Virtualisierung#Intel-VT-x|VMX]], [[Advanced Vector Extensions|AVX]], [[Advanced Vector Extensions|AVX2]], [[AES-NI]], [[F16C|CVT16]], [[FMA x86|FMA3 und FMA4]]. Ab der Version 8.0 gibt es zwei Ausgaben unter derselben Versionsnummer, eine für die [[IA-32|x86-32]]-Architektur und eine für die [[x64|x86-64]]-Architektur.&lt;br /&gt;
&lt;br /&gt;
Durch Microsofts Freigabe und Veröffentlichung des [[Quelltext|Quellcodes]] von [[MS-DOS]] 4.0 am 25.&amp;amp;nbsp;April 2024 ist MASM 5.10 mitsamt dem [[Microsoft C|Microsoft-C]]-[[Compiler]] (Version 5.10), dessen [[Linker (Computerprogramm)|Linker]] &amp;lt;code&amp;gt;LINK.EXE&amp;lt;/code&amp;gt; (Version 3.65) und [[Erstellungsprozess|Build-Management]]-Tool &amp;lt;code&amp;gt;NMAKE.EXE&amp;lt;/code&amp;gt; (Version 1.00.05), sowie der dazugehörigen [[C-Standard-Bibliothek|C-Bibliothek]] als [[Binärcode]] öffentlich auf [[GitHub]] verfügbar.&amp;lt;ref&amp;gt;{{Internetquelle |autor=Scott Hanselman, Jeff Wilcox |url=https://opensource.microsoft.com/blog/2024/04/25/open-sourcing-ms-dos-4-0/ |titel=Open sourcing MS-DOS 4.0 |werk=opensource.microsoft.com |hrsg=Microsoft |datum=2024-04-25 |sprache=en |abruf=2024-05-29}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Internetquelle |url=https://github.com/microsoft/MS-DOS/tree/main/v4.0/src/TOOLS |titel=MS-DOS &amp;amp;gt; v4.0 &amp;amp;gt; src &amp;amp;gt; TOOLS |werk=github.com |hrsg=Microsoft |datum=2024-04-25 |sprache=en |abruf=2024-05-29 |kommentar=MASM Version 5.10 mitsamt dem Microsoft&amp;amp;nbsp;C Compiler sowie weiteren Tools aber ohne IDE aus der Quellcodeveröffentlichung von MS-DOS 4.0}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausdrücke ähnlich den Hochsprachen ==&lt;br /&gt;
&lt;br /&gt;
MASM verfügt über Ausdrücke, wie man sie aus [[C (Programmiersprache)|C]] kennt. Diese erleichtern die Programmierung und helfen, den Quelltext übersichtlicher zu halten.&lt;br /&gt;
* &amp;lt;code&amp;gt;.while&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;.endw&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;.repeat&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;.until&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;.break&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;.continue&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;.if .elseif .else .endif&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;invoke&amp;lt;/code&amp;gt; (Funktionsaufruf)&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
&lt;br /&gt;
Eine besonders hervorstechende Eigenschaft von MASM ist, wie der Name schon erahnen lässt, das äußerst mächtige Makrosystem. Mit ihm ist es sowohl möglich, Programmcode zu erstellen als auch Text zu verarbeiten. So ist es z.&amp;amp;nbsp;B. möglich, Konstrukte [[Höhere Programmiersprache|höherer Programmiersprachen]] wie die [[Switch-Anweisung]] (mehrfache Verzweigung) zu generieren.&lt;br /&gt;
&lt;br /&gt;
== Versionen ==&lt;br /&gt;
&lt;br /&gt;
Der &amp;#039;&amp;#039;IBM Macro Assembler&amp;#039;&amp;#039; und der &amp;#039;&amp;#039;IBM Macro Assembler/2&amp;#039;&amp;#039; waren OEM-Versionen des MASM.&lt;br /&gt;
Obwohl MASM kein kommerzielles Produkt mehr ist, wird es von Microsoft weiterhin unterstützt. Die letzte MASM-Version, die als einzelnes Softwarepaket verkauft wurde, war die Version 6.11.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
!MASM Version&lt;br /&gt;
!Datum&lt;br /&gt;
!Produkt&lt;br /&gt;
!Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|1.0&lt;br /&gt;
|1981&lt;br /&gt;
|(IBM)&lt;br /&gt;
|für 8086&lt;br /&gt;
|-&lt;br /&gt;
|2.0&lt;br /&gt;
|1984&lt;br /&gt;
|(Einzelprodukt)&lt;br /&gt;
|für 8086/8087&lt;br /&gt;
|-&lt;br /&gt;
|3.0&lt;br /&gt;
|1984&lt;br /&gt;
|(Einzelprodukt)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4.0&lt;br /&gt;
|1985&lt;br /&gt;
|(Einzelprodukt)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5.0&lt;br /&gt;
|1987&lt;br /&gt;
|(Einzelprodukt)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5.1&lt;br /&gt;
|1988&lt;br /&gt;
|(Einzelprodukt)&lt;br /&gt;
|[[OS/2]]-Unterstützung&lt;br /&gt;
|-&lt;br /&gt;
|6.0&lt;br /&gt;
|1991&lt;br /&gt;
|(Einzelprodukt)&lt;br /&gt;
|32-Bit- und OS/2-Unterstützung, mit der integrierten Entwicklungsumgebung &amp;#039;&amp;#039;[[Microsoft Programmer’s WorkBench|Programmer’s WorkBench]]&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|6.1&lt;br /&gt;
|1992&lt;br /&gt;
|(Einzelprodukt)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6.11&lt;br /&gt;
|1993&lt;br /&gt;
|(Einzelprodukt)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6.11d&lt;br /&gt;
|19.09.1995&lt;br /&gt;
|Windows 95 Driver Developer Kit&lt;br /&gt;
|6.11d ist die letzte Version für [[PC-kompatibles DOS|DOS]]&lt;br /&gt;
|-&lt;br /&gt;
|6.12&lt;br /&gt;
|27.08.1997&lt;br /&gt;
|(Update)&lt;br /&gt;
|Unterstützung für Intel [[Multi Media Extension|MMX]]-Instruktionen; ohne DOS-Extender&lt;br /&gt;
|-&lt;br /&gt;
|6.13&lt;br /&gt;
|05.12.1997&lt;br /&gt;
|(Update)&lt;br /&gt;
|Unterstützung für AMD [[3DNow]]-Instruktionen&lt;br /&gt;
|-&lt;br /&gt;
|6.14&lt;br /&gt;
|12.04.1999&lt;br /&gt;
|(Update)&lt;br /&gt;
|Unterstützung für [[Streaming SIMD Extensions|SSE]]&lt;br /&gt;
|-&lt;br /&gt;
|6.15&lt;br /&gt;
|2000&lt;br /&gt;
|Visual C++ 6.0 Processor Pack&lt;br /&gt;
|Unterstützung für [[Streaming SIMD Extensions 2|SSE2]]&lt;br /&gt;
|-&lt;br /&gt;
|7.0&lt;br /&gt;
|2002&lt;br /&gt;
|Visual C++ .NET 2002&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7.1&lt;br /&gt;
|2003&lt;br /&gt;
|Visual C++ .NET 2003&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8.0&lt;br /&gt;
|2005&lt;br /&gt;
|Visual C++ 2005&lt;br /&gt;
|ab 8.0 zwei getrennte Versionen: x86-32 (ml.exe) und x86-64 (ml64.exe), [[Streaming SIMD Extensions 3|SSE3]]/[[Supplemental Streaming SIMD Extensions 3|SSSE3]]&lt;br /&gt;
|-&lt;br /&gt;
|9.0&lt;br /&gt;
|2008&lt;br /&gt;
|Visual C++ 2008&lt;br /&gt;
|SSE4.1/SSE4.2/SSE4.A&lt;br /&gt;
|-&lt;br /&gt;
|10.0&lt;br /&gt;
|2010&lt;br /&gt;
|Visual C++ 2010&lt;br /&gt;
|AVX/AES&lt;br /&gt;
|-&lt;br /&gt;
|11.0&lt;br /&gt;
|2011&lt;br /&gt;
|Visual C++ 2011&lt;br /&gt;
|AVX2/FMA/half-precision conversion&lt;br /&gt;
|-&lt;br /&gt;
|12.0&lt;br /&gt;
|2013&lt;br /&gt;
|Visual C++ 2013&lt;br /&gt;
|-&lt;br /&gt;
|14.0&lt;br /&gt;
|2019&lt;br /&gt;
|Visual Studio 2019&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Beispielprogramme ==&lt;br /&gt;
=== Beispiel 1 ===&lt;br /&gt;
Dieses [[Hallo-Welt-Programm]] zeigt ein Dialogfenster mit dem Text &amp;quot;Hello World&amp;quot; an:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
.686&lt;br /&gt;
.model flat,stdcall&lt;br /&gt;
option casemap:none&lt;br /&gt;
&lt;br /&gt;
   include windows.inc      ; MASM32 SDK&lt;br /&gt;
   include user32.inc       ;&lt;br /&gt;
   include kernel32.inc     ;&lt;br /&gt;
                            ;&lt;br /&gt;
   includelib user32.lib    ;&lt;br /&gt;
   includelib kernel32.lib  ;&lt;br /&gt;
&lt;br /&gt;
StrA macro text:=&amp;lt;&amp;gt; ;macro&lt;br /&gt;
    IFNDEF some_cntr                                ;&lt;br /&gt;
        some_cntr = 0                               ;&lt;br /&gt;
    ELSE                                            ;&lt;br /&gt;
        some_cntr = some_cntr + 1                   ;&lt;br /&gt;
    ENDIF                                           ;&lt;br /&gt;
                                                    ;&lt;br /&gt;
    IFNB &amp;lt;text&amp;gt;                                     ;&lt;br /&gt;
        .data                                       ;&lt;br /&gt;
            @CatStr(_stra_,%some_cntr) db text,0    ;&lt;br /&gt;
        .code                                       ;&lt;br /&gt;
    %   EXITM &amp;lt;OFFSET @CatStr(_stra_,%some_cntr)&amp;gt;   ;&lt;br /&gt;
    ELSE                                            ;&lt;br /&gt;
        echo string required!                       ;&lt;br /&gt;
        EXITM &amp;lt;&amp;gt;                                    ;&lt;br /&gt;
    ENDIF                                           ;&lt;br /&gt;
endm&lt;br /&gt;
&lt;br /&gt;
.code&lt;br /&gt;
start:&lt;br /&gt;
                                                                        ;code&lt;br /&gt;
    invoke MessageBox,NULL,StrA(&amp;quot;Hello World&amp;quot;),StrA(&amp;quot;Say hello&amp;quot;),MB_OK  ;&lt;br /&gt;
    invoke ExitProcess,NULL                                             ;&lt;br /&gt;
                                                                        ;&lt;br /&gt;
end start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel 2 ===&lt;br /&gt;
Dieses Beispielprogramm zeigt ein Fenster mit dem Text &amp;quot;Hello World!&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include masm32rt.inc ; MASM32 SDK&lt;br /&gt;
.data&lt;br /&gt;
    ClassName   db &amp;quot;WinClass&amp;quot;,0&lt;br /&gt;
    AppName     db &amp;quot;Hello World App&amp;quot;,0&lt;br /&gt;
    Text        db &amp;quot;Hello World!&amp;quot;,0&lt;br /&gt;
.data?&lt;br /&gt;
    msg         MSG &amp;lt;&amp;gt;&lt;br /&gt;
    wc          WNDCLASSEX &amp;lt;&amp;gt;&lt;br /&gt;
.code&lt;br /&gt;
start:&lt;br /&gt;
    mov wc.hInstance,rv(GetModuleHandle,NULL)           ; fill WNDCLASSEX-struct&lt;br /&gt;
    mov wc.cbSize,SIZEOF WNDCLASSEX                     ;&lt;br /&gt;
    mov wc.style,CS_HREDRAW or CS_VREDRAW               ;&lt;br /&gt;
    mov wc.lpfnWndProc,OFFSET WndProc                   ;&lt;br /&gt;
    mov wc.hbrBackground,rv(CreateSolidBrush,0FFFFFFh)  ;&lt;br /&gt;
    mov wc.lpszClassName,OFFSET ClassName               ;&lt;br /&gt;
    mov wc.hIcon,rv(LoadIcon,NULL,IDI_APPLICATION)      ;&lt;br /&gt;
    mov wc.hIconSm,eax                                  ;&lt;br /&gt;
    mov wc.hCursor,rv(LoadCursor,NULL,IDC_ARROW)        ;&lt;br /&gt;
&lt;br /&gt;
    invoke RegisterClassEx,OFFSET wc&lt;br /&gt;
    invoke CreateWindowEx,NULL\                       ; create window&lt;br /&gt;
                         ,OFFSET ClassName\           ;&lt;br /&gt;
                         ,OFFSET AppName\             ;&lt;br /&gt;
                         ,WS_OVERLAPPEDWINDOW\        ;&lt;br /&gt;
                         ,CW_USEDEFAULT,CW_USEDEFAULT\;&lt;br /&gt;
                         ,CW_USEDEFAULT,CW_USEDEFAULT\;&lt;br /&gt;
                         ,NULL\                       ;&lt;br /&gt;
                         ,NULL\                       ;&lt;br /&gt;
                         ,wc.hInstance\               ;&lt;br /&gt;
                         ,NULL                        ;&lt;br /&gt;
&lt;br /&gt;
    push eax                                            ; tricky parameter passing ;)&lt;br /&gt;
    invoke ShowWindow,DWORD ptr [esp+4],SW_SHOWNORMAL   ;&lt;br /&gt;
    call UpdateWindow                                   ;&lt;br /&gt;
&lt;br /&gt;
    .while TRUE                               ; message loop&lt;br /&gt;
        invoke GetMessage,OFFSET msg,NULL,0,0 ;&lt;br /&gt;
        .break .if (!eax)                     ;&lt;br /&gt;
        invoke TranslateMessage, OFFSET msg   ;&lt;br /&gt;
        invoke DispatchMessage, OFFSET msg    ;&lt;br /&gt;
    .endw                                     ;&lt;br /&gt;
&lt;br /&gt;
    invoke ExitProcess,0                      ; exit Program&lt;br /&gt;
&lt;br /&gt;
WndProc proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD ; window call-back function&lt;br /&gt;
LOCAL ps:PAINTSTRUCT&lt;br /&gt;
LOCAL rect:RECT&lt;br /&gt;
    .if uMsg == WM_DESTROY&lt;br /&gt;
        invoke PostQuitMessage,NULL&lt;br /&gt;
    .elseif uMsg == WM_PAINT&lt;br /&gt;
        invoke BeginPaint,hWnd,ADDR ps                           ; paint text &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
        invoke GetClientRect,hWnd,ADDR rect                      ;&lt;br /&gt;
        invoke DrawText,ps.hdc\                                  ;&lt;br /&gt;
                       ,OFFSET Text\                             ;&lt;br /&gt;
                       ,SIZEOF Text\                             ;&lt;br /&gt;
                       ,ADDR rect\                               ;&lt;br /&gt;
                       ,DT_CENTER or DT_VCENTER or DT_SINGLELINE ;&lt;br /&gt;
        invoke EndPaint,hWnd,ADDR ps                             ;&lt;br /&gt;
    .else&lt;br /&gt;
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam&lt;br /&gt;
        ret&lt;br /&gt;
    .endif&lt;br /&gt;
    xor eax,eax&lt;br /&gt;
    ret&lt;br /&gt;
WndProc endp&lt;br /&gt;
end start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel 3 ===&lt;br /&gt;
Dieses Programm demonstriert einen Algorithmus zur Bestimmung von Zeichenkettenlängen unter Zuhilfenahme von SSE2-Instruktionen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include masm32rt.inc ; MASM32 SDK&lt;br /&gt;
.686p ; choose instruction set&lt;br /&gt;
.mmx ;&lt;br /&gt;
.xmm ;&lt;br /&gt;
szLenXmm proto :DWORD&lt;br /&gt;
&lt;br /&gt;
.data&lt;br /&gt;
    szTextA db &amp;quot;This string is 55 bytes long (without termination-zero)&amp;quot;,0&lt;br /&gt;
.code&lt;br /&gt;
&lt;br /&gt;
start:&lt;br /&gt;
    invoke szLenXmm,OFFSET szTextA                                 ; call szLenXmm&lt;br /&gt;
    invoke MessageBox,0,OFFSET szTextA\&lt;br /&gt;
                       ,cat$(chr$(&amp;quot;string size = &amp;quot;),udword$(eax))\ ; generate title using macros&lt;br /&gt;
                       ,MB_OK&lt;br /&gt;
    invoke ExitProcess,0                                           ; exit program&lt;br /&gt;
&lt;br /&gt;
    szLenXmm proc lpString:DWORD   ; determine string size&lt;br /&gt;
        mov edx,lpString           ; using XMM-instrutions&lt;br /&gt;
        pxor xmm1,xmm1             ;&lt;br /&gt;
        xor ecx,ecx                ; PS: under extremely rarely&lt;br /&gt;
        align 16                   ; conditions this func. may&lt;br /&gt;
    @@: movdqu xmm0,OWORD ptr [edx]; cause an access violation&lt;br /&gt;
        pcmpeqb xmm0,xmm1          ;&lt;br /&gt;
        pmovmskb eax,xmm0          ;&lt;br /&gt;
        test eax,eax               ;&lt;br /&gt;
        lea ecx,[ecx+16]           ;&lt;br /&gt;
        lea edx,[edx+16]           ;&lt;br /&gt;
        jz @B                      ;&lt;br /&gt;
    @@: lea ecx,[ecx-16]           ;&lt;br /&gt;
        bsf eax,eax                ;&lt;br /&gt;
        .if !ZERO?                 ;&lt;br /&gt;
            lea ecx,[eax+ecx]      ;&lt;br /&gt;
        .endif                     ; str. size returns&lt;br /&gt;
        mov eax,ecx                ; through EAX&lt;br /&gt;
        ret                        ;&lt;br /&gt;
    szLenXmm endp                  ;&lt;br /&gt;
end start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://learn.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference Microsoft Macro Assembler Reference]&lt;br /&gt;
* [https://www.masm32.com/ MASM32 SDK]&lt;br /&gt;
* [https://www.codingcrew.de/masm32/index.php Deutscher Support und Beispielprogramme für MASM32]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Normdaten |TYP=s |GND=4206485-5 |VIAF=186354604}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Assembler]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Siegbert v2</name></author>
	</entry>
</feed>