File indexing completed on 2024-05-12 04:02:06

0001 <!DOCTYPE html>
0002 <html><head>
0003 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
0004 <title>highlight.asm-nasm</title>
0005 <meta name="generator" content="KF5::SyntaxHighlighting - Definition (Intel x86 (NASM)) - Theme (Breeze Dark)"/>
0006 </head><body style="background-color:#232629;color:#cfcfc2"><pre>
0007 <span style="color:#7a7c7d">; Example file for nasm.xml kate syntax file</span>
0008 <span style="color:#7a7c7d">; compile with `nasm example.asm -f elf -o example.o`</span>
0009 <span style="color:#7a7c7d">; and link with 'gcc example.o -o example`</span>
0010 <span style="color:#7a7c7d">; Public domain</span>
0011 <span style="color:#7a7c7d">; </span><span style="color:#3f8058">kate:</span><span style="color:#7a7c7d"> </span><span style="color:#7f8c8d">hl</span><span style="color:#f44f4f"> Intel x86 (NASM)</span><span style="color:#7f8c8d">;</span>
0012 
0013 <span style="font-weight:bold">section</span> <span style="color:#8e44ad">.data</span>
0014 
0015 hello <span style="color:#2980b9">dd</span> <span style="color:#f44f4f">'Hello World'</span><span style="color:#3f8058">,</span> <span style="color:#f67400">0x</span><span style="color:#f67400">0A</span><span style="color:#3f8058">,</span> <span style="color:#f67400">0</span><span style="color:#f67400">h</span>
0016 printf_param <span style="color:#2980b9">dd</span> <span style="color:#f44f4f">'%s'</span><span style="color:#3f8058">,</span> <span style="color:#f67400">0</span><span style="color:#f67400">q</span>
0017 
0018 <span style="font-weight:bold">section</span> <span style="color:#8e44ad">.text</span>
0019 
0020 <span style="font-weight:bold">extern</span> printf
0021 
0022 <span style="font-weight:bold">global</span> main
0023 <span style="color:#8e44ad">main:</span>
0024     <span style="font-weight:bold">push</span> <span style="font-weight:bold">ebp</span>
0025     <span style="font-weight:bold">mov</span> <span style="font-weight:bold">ebp</span><span style="color:#3f8058">,</span> <span style="font-weight:bold">esp</span>
0026     
0027     <span style="font-weight:bold">push</span> hello
0028     <span style="font-weight:bold">push</span> printf_param
0029     <span style="color:#fdbc4b;font-weight:bold">call</span> printf
0030     
0031     <span style="font-weight:bold">mov</span> <span style="font-weight:bold">eax</span><span style="color:#3f8058">,</span> <span style="color:#f67400">0</span><span style="color:#f67400">b</span>
0032     <span style="font-weight:bold">leave</span>
0033     <span style="color:#fdbc4b;font-weight:bold">ret</span>
0034 
0035 
0036 NULL              <span style="color:#2980b9">EQU</span> <span style="color:#f67400">0</span>                         <span style="color:#7a7c7d">; Constants</span>
0037 STD_OUTPUT_HANDLE <span style="color:#2980b9">EQU</span> <span style="color:#3f8058">-</span><span style="color:#f67400">11</span>
0038 
0039 <span style="font-weight:bold">extern</span> GetStdHandle                             <span style="color:#7a7c7d">; Import external symbols</span>
0040 
0041 <span style="font-weight:bold">global</span> Start                                    <span style="color:#7a7c7d">; Export symbols. The entry point</span>
0042 
0043 <span style="font-weight:bold">section</span> <span style="color:#8e44ad">.data</span>                                   <span style="color:#7a7c7d">; Initialized data segment</span>
0044  Message        <span style="color:#2980b9">db</span> <span style="color:#f44f4f">"Console Message 64"</span><span style="color:#3f8058">,</span> <span style="color:#f67400">0D</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span> <span style="color:#f67400">0A</span><span style="color:#f67400">h</span>
0045  MessageLength  <span style="color:#2980b9">EQU</span> <span style="color:#3f8058">$-</span>Message                   <span style="color:#7a7c7d">; Address of this line ($) - address of Message</span>
0046 
0047 <span style="font-weight:bold">section</span> <span style="color:#8e44ad">.bss</span>                                    <span style="color:#7a7c7d">; Uninitialized data segment</span>
0048 <span style="font-weight:bold">alignb</span> <span style="color:#f67400">8</span>
0049  Written        <span style="color:#2980b9">resq</span> <span style="color:#f67400">1</span>
0050 
0051 <span style="font-weight:bold">section</span> <span style="color:#8e44ad">.text</span>                                   <span style="color:#7a7c7d">; Code segment</span>
0052 <span style="color:#8e44ad">Start:</span>
0053  <span style="font-weight:bold">sub</span>   <span style="font-weight:bold">RSP</span><span style="color:#3f8058">,</span> <span style="color:#f67400">8</span>                                   <span style="color:#7a7c7d">; Align the stack to a multiple of 16 bytes</span>
0054 
0055  <span style="font-weight:bold">mov</span>   <span style="font-weight:bold">ECX</span><span style="color:#3f8058">,</span> STD_OUTPUT_HANDLE
0056  <span style="color:#fdbc4b;font-weight:bold">call</span>  GetStdHandle
0057  <span style="font-weight:bold">mov</span>   <span style="color:#2980b9">qword</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">REL</span> StandardHandle<span style="color:#3f8058">],</span> <span style="font-weight:bold">RAX</span>
0058 
0059  <span style="font-weight:bold">sub</span>   <span style="font-weight:bold">RSP</span><span style="color:#3f8058">,</span> <span style="color:#f67400">32</span> <span style="color:#3f8058">+</span> <span style="color:#f67400">8</span> <span style="color:#3f8058">+</span> <span style="color:#f67400">8</span>                          <span style="color:#7a7c7d">; Shadow space + 5th parameter + align stack</span>
0060                                                 <span style="color:#7a7c7d">; to a multiple of 16 bytes</span>
0061  <span style="font-weight:bold">mov</span>   <span style="font-weight:bold">RCX</span><span style="color:#3f8058">,</span> <span style="color:#2980b9">qword</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">REL</span> StandardHandle<span style="color:#3f8058">]</span>          <span style="color:#7a7c7d">; 1st parameter</span>
0062  <span style="font-weight:bold">lea</span>   <span style="font-weight:bold">RDX</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">REL</span> Message<span style="color:#3f8058">]</span>                       <span style="color:#7a7c7d">; 2nd parameter</span>
0063  <span style="font-weight:bold">mov</span>   <span style="font-weight:bold">R8</span><span style="color:#3f8058">,</span> MessageLength                        <span style="color:#7a7c7d">; 3rd parameter</span>
0064  <span style="font-weight:bold">mov</span>   <span style="color:#2980b9">qword</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">RSP</span> <span style="color:#3f8058">+</span> <span style="color:#f67400">4</span> <span style="color:#3f8058">*</span> <span style="color:#f67400">8</span><span style="color:#3f8058">],</span> NULL                <span style="color:#7a7c7d">; 5th parameter</span>
0065                                                 <span style="color:#7a7c7d">; Message Box, 64 bit. V1.02</span>
0066 <span style="color:#8e44ad">.DisplayMessageBox:</span>
0067  <span style="font-weight:bold">xor</span>   <span style="font-weight:bold">ECX</span><span style="color:#3f8058">,</span> <span style="font-weight:bold">ECX</span>                                 <span style="color:#7a7c7d">; 1st parameter</span>
0068  <span style="font-weight:bold">lea</span>   <span style="font-weight:bold">RDX</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">REL</span> MessageBoxText<span style="color:#3f8058">]</span>                <span style="color:#7a7c7d">; 2nd parameter</span>
0069  <span style="font-weight:bold">lea</span>   <span style="font-weight:bold">R8</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">REL</span> MessageBoxCaption<span style="color:#3f8058">]</span>              <span style="color:#7a7c7d">; 3rd parameter</span>
0070  <span style="font-weight:bold">mov</span>   <span style="font-weight:bold">R9D</span><span style="color:#3f8058">,</span> MB_YESNO <span style="color:#3f8058">|</span> MB_DEFBUTTON2            <span style="color:#7a7c7d">; 4th parameter. 2 constants ORed together</span>
0071  <span style="color:#fdbc4b;font-weight:bold">call</span>  MessageBoxA
0072 
0073  <span style="font-weight:bold">cmp</span>   <span style="font-weight:bold">RAX</span><span style="color:#3f8058">,</span> IDNO                                <span style="color:#7a7c7d">; Check the return value for "No"</span>
0074  <span style="color:#fdbc4b;font-weight:bold">je</span>    <span style="color:#8e44ad">.DisplayMessageBox</span>
0075 
0076 <span style="font-weight:bold">extern</span> _GetStdHandle@4                          <span style="color:#7a7c7d">; Import external symbols</span>
0077 <span style="color:#8e44ad">Start:</span>
0078  <span style="color:#fdbc4b;font-weight:bold">call</span>  _WriteFile@20
0079 
0080 <span style="font-weight:bold">section</span> <span style="color:#8e44ad">.data</span>                                   <span style="color:#7a7c7d">; Initialized data segment</span>
0081  Static1Colour    <span style="color:#2980b9">dd</span> <span style="color:#f67400">0F0F0F0</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span>
0082  Edit2            <span style="color:#2980b9">resq</span> <span style="color:#f67400">1</span>
0083 
0084 <span style="color:#27ae60">%define</span> Screen<span style="color:#3f8058">.</span>Width       <span style="font-weight:bold">RBP</span> <span style="color:#3f8058">-</span> <span style="color:#f67400">160</span>            <span style="color:#7a7c7d">; 4 bytes</span>
0085 <span style="color:#27ae60">%define</span> ClientArea         <span style="font-weight:bold">RBP</span> <span style="color:#3f8058">-</span> <span style="color:#f67400">152</span>            <span style="color:#7a7c7d">; RECT structure. 16 bytes</span>
0086 
0087  <span style="font-weight:bold">mov</span>   <span style="color:#2980b9">dword</span> <span style="color:#3f8058">[</span>wc<span style="color:#3f8058">.</span>cbSize<span style="color:#3f8058">],</span> <span style="color:#f67400">80</span>                    <span style="color:#7a7c7d">; [RBP - 136]</span>
0088  <span style="font-weight:bold">mov</span>   <span style="color:#2980b9">dword</span> <span style="color:#3f8058">[</span>wc<span style="color:#3f8058">.</span>style<span style="color:#3f8058">],</span> CS_HREDRAW <span style="color:#3f8058">|</span> CS_VREDRAW <span style="color:#3f8058">|</span> CS_BYTEALIGNWINDOW  <span style="color:#7a7c7d">; [RBP - 132]</span>
0089  <span style="font-weight:bold">mov</span>   <span style="color:#2980b9">qword</span> <span style="color:#3f8058">[</span>wc<span style="color:#3f8058">.</span>lpfnWndProc<span style="color:#3f8058">],</span> <span style="font-weight:bold">RAX</span>              <span style="color:#7a7c7d">; [RBP - 128]</span>
0090  <span style="font-weight:bold">mov</span>   <span style="color:#2980b9">qword</span> <span style="color:#3f8058">[</span>wc<span style="color:#3f8058">.</span>hIcon<span style="color:#3f8058">],</span> <span style="font-weight:bold">RAX</span>                    <span style="color:#7a7c7d">; [RBP - 104]</span>
0091  <span style="font-weight:bold">mov</span>   <span style="color:#2980b9">dword</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">RSP</span> <span style="color:#3f8058">+</span> <span style="color:#f67400">4</span> <span style="color:#3f8058">*</span> <span style="color:#f67400">8</span><span style="color:#3f8058">],</span> <span style="font-weight:bold">EAX</span>                 <span style="color:#7a7c7d">; X position, now centred</span>
0092 
0093  <span style="font-weight:bold">cmp</span>   <span style="color:#2980b9">qword</span> <span style="color:#3f8058">[</span>uMsg<span style="color:#3f8058">],</span> WM_CLOSE                   <span style="color:#7a7c7d">; [RBP + 24]</span>
0094  <span style="color:#fdbc4b;font-weight:bold">je</span>    WMCLOSE
0095  <span style="color:#fdbc4b;font-weight:bold">call</span>  DestroyWindow                            <span style="color:#7a7c7d">; Send a WM_DESTROY message</span>
0096  <span style="color:#fdbc4b;font-weight:bold">jmp</span>   Return<span style="color:#3f8058">.</span>WM_Processed
0097  <span style="font-weight:bold">mov</span>   <span style="font-weight:bold">EDX</span><span style="color:#3f8058">,</span> <span style="color:#f67400">0604060</span><span style="color:#f67400">h</span>
0098  <span style="color:#fdbc4b;font-weight:bold">call</span>  SetBkColor
0099  <span style="font-weight:bold">mov</span>   <span style="font-weight:bold">EDX</span><span style="color:#3f8058">,</span> <span style="color:#f67400">0005000</span><span style="color:#f67400">h</span>
0100 
0101 <span style="color:#2980b9">db</span> <span style="color:#f67400">0x</span><span style="color:#f67400">55</span> <span style="color:#7a7c7d">; just the byte 0x55</span>
0102 <span style="color:#2980b9">db</span> <span style="color:#f67400">0x</span><span style="color:#f67400">55</span><span style="color:#3f8058">,</span><span style="color:#f67400">0x</span><span style="color:#f67400">56</span><span style="color:#3f8058">,</span><span style="color:#f67400">0x</span><span style="color:#f67400">57</span> <span style="color:#7a7c7d">; three bytes in succession</span>
0103 <span style="color:#2980b9">db</span> <span style="color:#f44f4f">'a'</span><span style="color:#3f8058">,</span><span style="color:#f67400">0x</span><span style="color:#f67400">55</span> <span style="color:#7a7c7d">; character constants are OK</span>
0104 <span style="color:#2980b9">db</span> <span style="color:#f44f4f">'hello'</span><span style="color:#3f8058">,</span><span style="color:#f67400">13</span><span style="color:#3f8058">,</span><span style="color:#f67400">10</span><span style="color:#3f8058">,</span><span style="color:#f44f4f">'$'</span> <span style="color:#7a7c7d">; so are string constants</span>
0105 <span style="color:#2980b9">dw</span> <span style="color:#f67400">0x</span><span style="color:#f67400">1234</span> <span style="color:#7a7c7d">; 0x34 0x12</span>
0106 <span style="color:#2980b9">dw</span> <span style="color:#f44f4f">'a'</span> <span style="color:#7a7c7d">; 0x61 0x00 (it's just a number)</span>
0107 <span style="color:#2980b9">dw</span> <span style="color:#f44f4f">'ab'</span> <span style="color:#7a7c7d">; 0x61 0x62 (character constant)</span>
0108 <span style="color:#2980b9">dw</span> <span style="color:#f44f4f">'abc'</span> <span style="color:#7a7c7d">; 0x61 0x62 0x63 0x00 (string)</span>
0109 <span style="color:#2980b9">dd</span> <span style="color:#f67400">0x</span><span style="color:#f67400">12345678</span> <span style="color:#7a7c7d">; 0x78 0x56 0x34 0x12</span>
0110 <span style="color:#2980b9">dd</span> <span style="color:#f67400">1.234567e20</span> <span style="color:#7a7c7d">; floating-point constant</span>
0111 <span style="color:#2980b9">dq</span> <span style="color:#f67400">0x</span><span style="color:#f67400">123456789abcdef0</span> <span style="color:#7a7c7d">; eight byte constant</span>
0112 <span style="color:#2980b9">dq</span> <span style="color:#f67400">1.234567e20</span> <span style="color:#7a7c7d">; double-precision float</span>
0113 <span style="color:#2980b9">dt</span> <span style="color:#f67400">1.234567e20</span> <span style="color:#7a7c7d">; extended-precision float</span>
0114 
0115 <span style="color:#2980b9">db</span> <span style="color:#f67400">33</span>
0116 <span style="color:#2980b9">db</span> <span style="color:#3f8058">(</span><span style="color:#f67400">44</span><span style="color:#3f8058">)</span>               <span style="color:#7a7c7d">; Integer expression</span>
0117 <span style="color:#7a7c7d">; db (44,55)            ; Invalid - error</span>
0118 <span style="color:#2980b9">db</span> <span style="color:#3f8058">%(</span><span style="color:#f67400">44</span><span style="color:#3f8058">,</span><span style="color:#f67400">55</span><span style="color:#3f8058">)</span>
0119 <span style="color:#2980b9">db</span> <span style="color:#3f8058">%(</span><span style="color:#f44f4f">'XX'</span><span style="color:#3f8058">,</span><span style="color:#f44f4f">'YY'</span><span style="color:#3f8058">)</span>
0120 <span style="color:#2980b9">db</span> <span style="color:#3f8058">(</span><span style="color:#f44f4f">'AA'</span><span style="color:#3f8058">)</span>             <span style="color:#7a7c7d">; Integer expression - outputs single byte</span>
0121 <span style="color:#2980b9">db</span> <span style="color:#3f8058">%(</span><span style="color:#f44f4f">'BB'</span><span style="color:#3f8058">)</span>            <span style="color:#7a7c7d">; List, containing a string</span>
0122 <span style="color:#2980b9">db</span> <span style="color:#3f8058">?</span>
0123 <span style="color:#2980b9">db</span> <span style="color:#f67400">6</span> dup <span style="color:#3f8058">(</span><span style="color:#f67400">33</span><span style="color:#3f8058">)</span>
0124 <span style="color:#2980b9">db</span> <span style="color:#f67400">6</span> dup <span style="color:#3f8058">(</span><span style="color:#f67400">33</span><span style="color:#3f8058">,</span> <span style="color:#f67400">34</span><span style="color:#3f8058">)</span>
0125 <span style="color:#2980b9">db</span> <span style="color:#f67400">6</span> dup <span style="color:#3f8058">(</span><span style="color:#f67400">33</span><span style="color:#3f8058">,</span> <span style="color:#f67400">34</span><span style="color:#3f8058">),</span> <span style="color:#f67400">35</span>
0126 <span style="color:#2980b9">db</span> <span style="color:#f67400">7</span> dup <span style="color:#3f8058">(</span><span style="color:#f67400">99</span><span style="color:#3f8058">)</span>
0127 <span style="color:#2980b9">db</span> <span style="color:#f67400">7</span> dup <span style="color:#2980b9">dword</span> <span style="color:#3f8058">(?,</span> <span style="color:#2980b9">word</span> <span style="color:#3f8058">?,</span> <span style="color:#3f8058">?)</span>
0128 <span style="color:#2980b9">dw</span> <span style="color:#2980b9">byte</span> <span style="color:#3f8058">(?,</span><span style="color:#f67400">44</span><span style="color:#3f8058">)</span>
0129 <span style="color:#2980b9">dw</span> <span style="color:#f67400">3</span> dup <span style="color:#3f8058">(</span><span style="color:#f67400">0x</span><span style="color:#f67400">cc</span><span style="color:#3f8058">,</span> <span style="color:#f67400">4</span> dup <span style="color:#2980b9">byte</span> <span style="color:#3f8058">(</span><span style="color:#f44f4f">'PQR'</span><span style="color:#3f8058">),</span> <span style="color:#3f8058">?),</span> <span style="color:#f67400">0x</span><span style="color:#f67400">abcd</span>
0130 <span style="color:#2980b9">dd</span> <span style="color:#f67400">16</span> dup <span style="color:#3f8058">(</span><span style="color:#f67400">0x</span><span style="color:#f67400">aaaa</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">?,</span> <span style="color:#f67400">0x</span><span style="color:#f67400">bbbbbb</span><span style="color:#3f8058">)</span>
0131 <span style="color:#2980b9">dd</span> <span style="color:#f67400">64</span> dup <span style="color:#3f8058">(?)</span>
0132 <span style="color:#2980b9">db</span> <span style="color:#f44f4f">`</span><span style="color:#3daee9">\u263a</span><span style="color:#f44f4f">`</span>            <span style="color:#7a7c7d">; UTF-8 smiley face</span>
0133 <span style="color:#2980b9">db</span> <span style="color:#f44f4f">`</span><span style="color:#3daee9">\xe2\x98\xba</span><span style="color:#f44f4f">`</span>      <span style="color:#7a7c7d">; UTF-8 smiley face</span>
0134 <span style="color:#2980b9">db</span> <span style="color:#f67400">0E2</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span> <span style="color:#f67400">098</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span> <span style="color:#f67400">0BA</span><span style="color:#f67400">h</span>    <span style="color:#7a7c7d">; UTF-8 smiley face</span>
0135 <span style="color:#8e44ad">buffer:</span>         <span style="color:#2980b9">resb</span>    <span style="color:#f67400">64</span>              <span style="color:#7a7c7d">; reserve 64 bytes </span>
0136 <span style="color:#8e44ad">wordvar:</span>        <span style="color:#2980b9">resw</span>    <span style="color:#f67400">1</span>               <span style="color:#7a7c7d">; reserve a word </span>
0137 <span style="color:#8e44ad">buffer:</span>         <span style="color:#2980b9">db</span>      <span style="color:#f67400">64</span> dup <span style="color:#3f8058">(?)</span>      <span style="color:#7a7c7d">; reserve 64 bytes </span>
0138 <span style="color:#8e44ad">wordvar:</span>        <span style="color:#2980b9">dw</span>      <span style="color:#3f8058">?</span>               <span style="color:#7a7c7d">; reserve a word </span>
0139 
0140 <span style="color:#2980b9">incbin</span>  <span style="color:#f44f4f">"file.dat"</span>             <span style="color:#7a7c7d">; include the whole file</span>
0141 <span style="color:#2980b9">incbin</span>  <span style="color:#f44f4f">"file.dat"</span><span style="color:#3f8058">,</span><span style="color:#f67400">1024</span>        <span style="color:#7a7c7d">; skip the first 1024 bytes</span>
0142 <span style="color:#2980b9">incbin</span>  <span style="color:#f44f4f">"file.dat"</span><span style="color:#3f8058">,</span><span style="color:#f67400">1024</span><span style="color:#3f8058">,</span><span style="color:#f67400">512</span>    <span style="color:#7a7c7d">; skip the first 1024, and</span>
0143                                <span style="color:#7a7c7d">; actually include at most 512</span>
0144 
0145 message         <span style="color:#2980b9">db</span>      <span style="color:#f44f4f">'hello, world'</span> 
0146 msglen          <span style="color:#2980b9">equ</span>     <span style="color:#3f8058">$-</span>message
0147 
0148 <span style="color:#8e44ad">buffer:</span> <span style="color:#2980b9">db</span>      <span style="color:#f44f4f">'hello, world'</span> 
0149         <span style="color:#2980b9">times</span> <span style="color:#f67400">64</span><span style="color:#3f8058">-$+</span>buffer <span style="color:#2980b9">db</span> <span style="color:#f44f4f">' '</span>
0150 
0151      <span style="font-weight:bold">bndstx</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">rbx</span><span style="color:#3f8058">*</span><span style="color:#f67400">1</span><span style="color:#3f8058">+</span><span style="font-weight:bold">rax</span><span style="color:#3f8058">+</span><span style="color:#f67400">0x</span><span style="color:#f67400">3</span><span style="color:#3f8058">],</span> bnd0    <span style="color:#7a7c7d">; GAS - '*1' indecates an index reg</span>
0152      <span style="font-weight:bold">VDIVPS</span> <span style="font-weight:bold">zmm4</span><span style="color:#3f8058">,</span> <span style="font-weight:bold">zmm5</span><span style="color:#3f8058">,</span> <span style="color:#2980b9">dword</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">rbx</span><span style="color:#3f8058">]{</span><span style="color:#f67400">1to16</span><span style="color:#3f8058">}</span>   <span style="color:#7a7c7d">; single-precision float </span>
0153      <span style="font-weight:bold">VDIVPS</span> <span style="font-weight:bold">zmm4</span><span style="color:#3f8058">,</span> <span style="font-weight:bold">zmm5</span><span style="color:#3f8058">,</span> <span style="color:#2980b9">zword</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">rbx</span><span style="color:#3f8058">]</span>          <span style="color:#7a7c7d">; packed 512 bit memory</span>
0154 
0155 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">200</span>          <span style="color:#7a7c7d">; decimal</span>
0156 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0200</span>         <span style="color:#7a7c7d">; still decimal</span>
0157 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0200</span><span style="color:#f67400">d</span>        <span style="color:#7a7c7d">; explicitly decimal</span>
0158 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0d</span><span style="color:#f67400">200</span>        <span style="color:#7a7c7d">; also decimal</span>
0159 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0c8</span><span style="color:#f67400">h</span>         <span style="color:#7a7c7d">; hex</span>
0160 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,$</span><span style="color:#f67400">0c8</span>         <span style="color:#7a7c7d">; hex again: the 0 is required</span>
0161 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0x</span><span style="color:#f67400">c8</span>         <span style="color:#7a7c7d">; hex yet again</span>
0162 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0h</span><span style="color:#f67400">c8</span>         <span style="color:#7a7c7d">; still hex</span>
0163 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">310</span><span style="color:#f67400">q</span>         <span style="color:#7a7c7d">; octal</span>
0164 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">310</span><span style="color:#f67400">o</span>         <span style="color:#7a7c7d">; octal again</span>
0165 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0o</span><span style="color:#f67400">310</span>        <span style="color:#7a7c7d">; octal yet again</span>
0166 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0q</span><span style="color:#f67400">310</span>        <span style="color:#7a7c7d">; octal yet again</span>
0167 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">11001000</span><span style="color:#f67400">b</span>    <span style="color:#7a7c7d">; binary</span>
0168 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">1100_1000</span><span style="color:#f67400">b</span>   <span style="color:#7a7c7d">; same binary constant</span>
0169 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">1100_1000</span><span style="color:#f67400">y</span>   <span style="color:#7a7c7d">; same binary constant once more</span>
0170 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0b</span><span style="color:#f67400">1100_1000</span>  <span style="color:#7a7c7d">; same binary constant yet again</span>
0171 <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0y</span><span style="color:#f67400">1100_1000</span>  <span style="color:#7a7c7d">; same binary constant yet again</span>
0172 
0173 <span style="color:#27ae60">%define</span> u<span style="color:#3f8058">(</span>x<span style="color:#3f8058">)</span> <span style="font-weight:bold">__?utf16?__</span><span style="color:#3f8058">(</span>x<span style="color:#3f8058">)</span> 
0174 <span style="color:#27ae60">%define</span> w<span style="color:#3f8058">(</span>x<span style="color:#3f8058">)</span> <span style="font-weight:bold">__?utf32?__</span><span style="color:#3f8058">(</span>x<span style="color:#3f8058">)</span> 
0175 
0176 <span style="color:#2980b9">dw</span> u<span style="color:#3f8058">(</span><span style="color:#f44f4f">'C:\WINDOWS'</span><span style="color:#3f8058">),</span> <span style="color:#f67400">0</span>       <span style="color:#7a7c7d">; Pathname in UTF-16</span>
0177 <span style="color:#2980b9">dd</span> w<span style="color:#3f8058">(</span><span style="color:#f44f4f">`A + B = </span><span style="color:#3daee9">\u206a</span><span style="color:#f44f4f">`</span><span style="color:#3f8058">),</span> <span style="color:#f67400">0</span>   <span style="color:#7a7c7d">; String in UTF-32</span>
0178 
0179 <span style="color:#2980b9">db</span>    <span style="color:#3f8058">-</span><span style="color:#f67400">0.2</span>                    <span style="color:#7a7c7d">; "Quarter precision"</span>
0180 <span style="color:#2980b9">dw</span>    <span style="color:#3f8058">-</span><span style="color:#f67400">0.5</span>                    <span style="color:#7a7c7d">; IEEE 754r/SSE5 half precision</span>
0181 <span style="color:#2980b9">dd</span>    <span style="color:#f67400">1.2</span>                     <span style="color:#7a7c7d">; an easy one</span>
0182 <span style="color:#2980b9">dd</span>    <span style="color:#f67400">1.222_222_222</span>           <span style="color:#7a7c7d">; underscores are permitted</span>
0183 <span style="color:#2980b9">dd</span>    <span style="color:#f67400">0x1p+2</span>                  <span style="color:#7a7c7d">; 1.0x2^2 = 4.0</span>
0184 <span style="color:#2980b9">dq</span>    <span style="color:#f67400">0x1p+32</span>                 <span style="color:#7a7c7d">; 1.0x2^32 = 4 294 967 296.0</span>
0185 <span style="color:#2980b9">dq</span>    <span style="color:#f67400">1.e10</span>                   <span style="color:#7a7c7d">; 10 000 000 000.0</span>
0186 <span style="color:#2980b9">dq</span>    <span style="color:#f67400">1.e+10</span>                  <span style="color:#7a7c7d">; synonymous with 1.e10</span>
0187 <span style="color:#2980b9">dq</span>    <span style="color:#f67400">1.e-10</span>                  <span style="color:#7a7c7d">; 0.000 000 000 1</span>
0188 <span style="color:#2980b9">dt</span>    <span style="color:#f67400">3.141592653589793238462</span> <span style="color:#7a7c7d">; pi</span>
0189 <span style="color:#2980b9">do</span>    <span style="color:#f67400">1.e+4000</span>                <span style="color:#7a7c7d">; IEEE 754r quad precision</span>
0190 
0191 <span style="font-weight:bold">mov</span>    <span style="font-weight:bold">rax</span><span style="color:#3f8058">,</span><span style="font-weight:bold">__?float64?__</span><span style="color:#3f8058">(</span><span style="color:#f67400">3.141592653589793238462</span><span style="color:#3f8058">)</span>
0192 <span style="font-weight:bold">mov</span>    <span style="font-weight:bold">rax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0x</span><span style="color:#f67400">400921fb54442d18</span>
0193 
0194 <span style="color:#27ae60">%define</span> Inf <span style="font-weight:bold">__?Infinity?__</span> 
0195 <span style="color:#27ae60">%define</span> NaN <span style="font-weight:bold">__?QNaN?__</span> 
0196 
0197 <span style="color:#2980b9">dq</span>    <span style="color:#3f8058">+</span><span style="color:#f67400">1.5</span><span style="color:#3f8058">,</span> <span style="color:#3f8058">-</span>Inf<span style="color:#3f8058">,</span> NaN         <span style="color:#7a7c7d">; Double-precision constants</span>
0198 <span style="color:#2980b9">dt</span> <span style="color:#f67400">12_345_678_901_245_678</span><span style="color:#f67400">p</span>
0199 <span style="color:#2980b9">dt</span> <span style="color:#3f8058">-</span><span style="color:#f67400">12_345_678_901_245_678</span><span style="color:#f67400">p</span>
0200 <span style="color:#2980b9">dt</span> <span style="color:#3f8058">+</span><span style="color:#f67400">0p33</span>
0201 <span style="color:#2980b9">dt</span> <span style="color:#f67400">33</span><span style="color:#f67400">p</span>
0202 
0203 <span style="color:#2980b9">dq</span> b <span style="color:#3f8058">*</span> <span style="color:#3f8058">(</span>a <span style="color:#3f8058">//</span> b<span style="color:#3f8058">)</span> <span style="color:#3f8058">+</span> <span style="color:#3f8058">(</span>a <span style="color:#8e44ad">%%</span> b<span style="color:#3f8058">)</span>
0204 
0205 <span style="color:#fdbc4b;font-weight:bold">call</span>    <span style="color:#3f8058">(</span><span style="font-weight:bold">seg</span> procedure<span style="color:#3f8058">):</span>procedure
0206 <span style="color:#fdbc4b;font-weight:bold">call</span>    weird_seg<span style="color:#3f8058">:(</span>procedure <span style="font-weight:bold">wrt</span> weird_seg<span style="color:#3f8058">)</span>
0207 
0208 <span style="font-weight:bold">push</span> <span style="color:#2980b9">dword</span> <span style="color:#f67400">33</span>
0209 <span style="font-weight:bold">push</span> <span style="font-weight:bold">strict</span> <span style="color:#2980b9">dword</span> <span style="color:#f67400">33</span>
0210 
0211 <span style="color:#2980b9">times</span> <span style="color:#3f8058">(</span>label<span style="color:#3f8058">-$)</span> <span style="color:#2980b9">db</span> <span style="color:#f67400">0</span>
0212 
0213 <span style="color:#8e44ad">label:</span>  <span style="color:#2980b9">db</span>      <span style="color:#f44f4f">'Where am I?'</span>
0214         <span style="color:#2980b9">times</span> <span style="color:#3f8058">(</span>label<span style="color:#3f8058">-$+</span>1<span style="color:#3f8058">)</span> <span style="color:#2980b9">db</span> <span style="color:#f67400">0</span> 
0215 <span style="color:#8e44ad">label:</span>  <span style="color:#2980b9">db</span>      <span style="color:#f44f4f">'NOW where am I?'</span>
0216 
0217 label1  <span style="color:#7a7c7d">; some code </span>
0218 
0219 .<span style="font-weight:bold">loop</span> 
0220         <span style="color:#7a7c7d">; some more code </span>
0221 
0222         <span style="color:#fdbc4b;font-weight:bold">jne</span>     <span style="color:#8e44ad">.loop</span> 
0223         <span style="color:#fdbc4b;font-weight:bold">ret</span> 
0224 
0225 <span style="color:#8e44ad">label1:</span>                         <span style="color:#7a7c7d">; a non-local label </span>
0226 <span style="color:#8e44ad">.local:</span>                         <span style="color:#7a7c7d">; this is really label1.local </span>
0227 <span style="color:#8e44ad">..@foo:</span>                         <span style="color:#7a7c7d">; this is a special symbol </span>
0228 <span style="color:#8e44ad">label2:</span>                         <span style="color:#7a7c7d">; another non-local label </span>
0229 <span style="color:#8e44ad">.local:</span>                         <span style="color:#7a7c7d">; this is really label2.local </span>
0230 
0231         <span style="color:#fdbc4b;font-weight:bold">jmp</span>     <span style="color:#8e44ad">..@foo</span>          <span style="color:#7a7c7d">; this will jump three lines up</span>
0232 
0233 
0234 <span style="color:#27ae60">%define</span> THIS_VERY_LONG_MACRO_NAME_IS_DEFINED_TO \ 
0235         THIS_VALUE
0236 
0237 <span style="color:#27ae60">%define</span> ctrl    <span style="color:#f67400">0x</span><span style="color:#f67400">1F</span> <span style="color:#3f8058">&amp;</span> 
0238 <span style="color:#27ae60">%define</span> param<span style="color:#3f8058">(</span>a<span style="color:#3f8058">,</span>b<span style="color:#3f8058">)</span> <span style="color:#3f8058">((</span>a<span style="color:#3f8058">)+(</span>a<span style="color:#3f8058">)*(</span>b<span style="color:#3f8058">))</span> 
0239 
0240         <span style="font-weight:bold">mov</span>     <span style="color:#2980b9">byte</span> <span style="color:#3f8058">[</span>param<span style="color:#3f8058">(</span><span style="color:#f67400">2</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ebx</span><span style="color:#3f8058">)],</span> ctrl <span style="color:#f44f4f">'D'</span>
0241         <span style="font-weight:bold">mov</span>     <span style="color:#2980b9">byte</span> <span style="color:#3f8058">[(</span><span style="color:#f67400">2</span><span style="color:#3f8058">)+(</span><span style="color:#f67400">2</span><span style="color:#3f8058">)*(</span><span style="font-weight:bold">ebx</span><span style="color:#3f8058">)],</span> <span style="color:#f67400">0x</span><span style="color:#f67400">1F</span> <span style="color:#3f8058">&amp;</span> <span style="color:#f44f4f">'D'</span>
0242 
0243 <span style="color:#27ae60">%define</span> a<span style="color:#3f8058">(</span>x<span style="color:#3f8058">)</span>    <span style="color:#f67400">1</span><span style="color:#3f8058">+</span>b<span style="color:#3f8058">(</span>x<span style="color:#3f8058">)</span> 
0244 <span style="color:#27ae60">%define</span> b<span style="color:#3f8058">(</span>x<span style="color:#3f8058">)</span>    <span style="color:#f67400">2</span><span style="color:#3f8058">*</span>x 
0245 
0246         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span>a<span style="color:#3f8058">(</span><span style="color:#f67400">8</span><span style="color:#3f8058">)</span>
0247 
0248    <span style="color:#27ae60">%define</span> foo <span style="color:#3f8058">(</span>a<span style="color:#3f8058">,</span>b<span style="color:#3f8058">)</span>               <span style="color:#7a7c7d">; no arguments, (a,b) is the expansion </span>
0249    <span style="color:#27ae60">%define</span> bar<span style="color:#3f8058">(</span>a<span style="color:#3f8058">,</span>b<span style="color:#3f8058">)</span>                <span style="color:#7a7c7d">; two arguments, empty expansion</span>
0250 
0251    <span style="color:#27ae60">%define</span> ereg<span style="color:#3f8058">(</span>foo<span style="color:#3f8058">,)</span> e <span style="color:#3f8058">%+</span> foo 
0252      <span style="font-weight:bold">mov</span> <span style="font-weight:bold">eax</span><span style="color:#3f8058">,</span>ereg<span style="color:#3f8058">(</span><span style="font-weight:bold">dx</span><span style="color:#3f8058">,</span><span style="font-weight:bold">cx</span><span style="color:#3f8058">)</span>
0253 
0254     <span style="color:#27ae60">%define</span> xyzzy<span style="color:#3f8058">(=</span>expr<span style="color:#3f8058">,&amp;</span>val<span style="color:#3f8058">)</span> expr<span style="color:#3f8058">,</span> str 
0255     <span style="color:#27ae60">%define</span> plugh<span style="color:#3f8058">(</span>x<span style="color:#3f8058">)</span> xyzzy<span style="color:#3f8058">(</span>x<span style="color:#3f8058">,</span>x<span style="color:#3f8058">)</span> 
0256     <span style="color:#2980b9">db</span> plugh<span style="color:#3f8058">(</span><span style="color:#f67400">3</span><span style="color:#3f8058">+</span><span style="color:#f67400">5</span><span style="color:#3f8058">),</span> <span style="color:#f44f4f">`</span><span style="color:#3daee9">\0</span><span style="color:#f44f4f">`</span> <span style="color:#7a7c7d">; Expands to: db 8, "3+5", `\0`</span>
0257 
0258      <span style="font-weight:bold">mov</span> <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span>Foo<span style="color:#3f8058">%[</span><span style="font-weight:bold">__?BITS?__</span><span style="color:#3f8058">]</span> <span style="color:#7a7c7d">; The Foo value</span>
0259 <span style="color:#27ae60">%xdefine</span> Bar         Quux    <span style="color:#7a7c7d">; Expands due to %xdefine </span>
0260 <span style="color:#27ae60">%define</span>  Bar         <span style="color:#3f8058">%[</span>Quux<span style="color:#3f8058">]</span> <span style="color:#7a7c7d">; Expands due to %[...]</span>
0261 
0262 
0263 
0264 <span style="color:#27ae60">%define</span> BDASTART <span style="color:#f67400">400</span><span style="color:#f67400">h</span>                <span style="color:#7a7c7d">; Start of BIOS data area</span>
0265 
0266 <span style="font-weight:bold">struc</span>   tBIOSDA                      <span style="color:#7a7c7d">; its structure </span>
0267         .COM1addr       <span style="color:#2980b9">RESW</span>    <span style="color:#f67400">1</span> 
0268         .COM2addr       <span style="color:#2980b9">RESW</span>    <span style="color:#f67400">1</span> 
0269         <span style="color:#7a7c7d">; ..and so on </span>
0270 <span style="font-weight:bold">endstruc</span>
0271 
0272         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span>BDASTART <span style="color:#3f8058">+</span> tBIOSDA<span style="color:#3f8058">.</span>COM1addr 
0273         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">bx</span><span style="color:#3f8058">,</span>BDASTART <span style="color:#3f8058">+</span> tBIOSDA<span style="color:#3f8058">.</span>COM2addr
0274 <span style="color:#7a7c7d">; Macro to access BIOS variables by their names (from tBDA):</span>
0275 
0276 <span style="color:#27ae60">%idefine</span> Foo mov <span style="color:#3f8058">%?,%??</span> 
0277 
0278 <span style="color:#27ae60">%idefine</span> keyword <span style="color:#3f8058">$%?</span>
0279 
0280 <span style="color:#27ae60">%idefine</span> <span style="font-weight:bold">pause</span> <span style="color:#3f8058">$%?</span>                  <span style="color:#7a7c7d">; Hide the PAUSE instruction</span>
0281 <span style="color:#27ae60">%define</span> foo bar 
0282 <span style="color:#27ae60">%undef</span>  foo 
0283 
0284         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">eax</span><span style="color:#3f8058">,</span> foo
0285 <span style="color:#27ae60">%assign</span> i i<span style="color:#3f8058">+</span><span style="color:#f67400">1</span>
0286 <span style="color:#27ae60">%defstr</span> <span style="font-weight:bold">test</span> TEST
0287 <span style="color:#27ae60">%define</span> <span style="font-weight:bold">test</span> <span style="color:#f44f4f">'TEST'</span>
0288 <span style="color:#27ae60">%defstr</span> PATH <span style="color:#3f8058">%!</span>PATH          <span style="color:#7a7c7d">; The operating system PATH variable</span>
0289 
0290 <span style="color:#27ae60">%deftok</span> <span style="font-weight:bold">test</span> <span style="color:#f44f4f">'TEST'</span>
0291 
0292 <span style="color:#27ae60">%define</span> <span style="font-weight:bold">test</span> TEST
0293 
0294 <span style="color:#27ae60">%define</span> greedy<span style="color:#3f8058">(</span>a<span style="color:#3f8058">,</span>b<span style="color:#3f8058">,</span>c<span style="color:#3f8058">+)</span> a <span style="color:#3f8058">+</span> <span style="color:#f67400">66</span> <span style="color:#3f8058">%,</span> b <span style="color:#3f8058">*</span> <span style="color:#f67400">3</span> <span style="color:#3f8058">%,</span> c 
0295 
0296        <span style="color:#2980b9">db</span> greedy<span style="color:#3f8058">(</span><span style="color:#f67400">1</span><span style="color:#3f8058">,</span><span style="color:#f67400">2</span><span style="color:#3f8058">)</span>          <span style="color:#7a7c7d">; db 1 + 66, 2 * 3 </span>
0297        <span style="color:#2980b9">db</span> greedy<span style="color:#3f8058">(</span><span style="color:#f67400">1</span><span style="color:#3f8058">,</span><span style="color:#f67400">2</span><span style="color:#3f8058">,</span><span style="color:#f67400">3</span><span style="color:#3f8058">)</span>        <span style="color:#7a7c7d">; db 1 + 66, 2 * 3, 3 </span>
0298        <span style="color:#2980b9">db</span> greedy<span style="color:#3f8058">(</span><span style="color:#f67400">1</span><span style="color:#3f8058">,</span><span style="color:#f67400">2</span><span style="color:#3f8058">,</span><span style="color:#f67400">3</span><span style="color:#3f8058">,</span><span style="color:#f67400">4</span><span style="color:#3f8058">)</span>      <span style="color:#7a7c7d">; db 1 + 66, 2 * 3, 3, 4 </span>
0299        <span style="color:#2980b9">db</span> greedy<span style="color:#3f8058">(</span><span style="color:#f67400">1</span><span style="color:#3f8058">,</span><span style="color:#f67400">2</span><span style="color:#3f8058">,</span><span style="color:#f67400">3</span><span style="color:#3f8058">,</span><span style="color:#f67400">4</span><span style="color:#3f8058">,</span><span style="color:#f67400">5</span><span style="color:#3f8058">)</span>    <span style="color:#7a7c7d">; db 1 + 66, 2 * 3, 3, 4, 5</span>
0300 
0301 <span style="color:#27ae60">%macro</span>  silly <span style="color:#f67400">2</span> 
0302     <span style="color:#27ae60">%</span><span style="color:#f67400">2</span>: <span style="color:#2980b9">db</span>      <span style="color:#3f8058">%</span><span style="color:#f67400">1</span> 
0303 <span style="color:#27ae60">%endmacro</span> 
0304 
0305         silly <span style="color:#f44f4f">'a'</span><span style="color:#3f8058">,</span> letter_a             <span style="color:#7a7c7d">; letter_a:  db 'a' </span>
0306         silly <span style="color:#f44f4f">'ab'</span><span style="color:#3f8058">,</span> string_ab           <span style="color:#7a7c7d">; string_ab: db 'ab' </span>
0307         silly <span style="color:#3f8058">{</span><span style="color:#f67400">13</span><span style="color:#3f8058">,</span><span style="color:#f67400">10</span><span style="color:#3f8058">},</span> crlf             <span style="color:#7a7c7d">; crlf:      db 13,10</span>
0308 <span style="color:#27ae60">%pragma</span> preproc sane_empty_expansion
0309 
0310 <span style="color:#27ae60">%macro</span> mpar <span style="color:#f67400">1</span><span style="color:#3f8058">-*</span>
0311      <span style="color:#2980b9">db</span> <span style="color:#3f8058">%{</span><span style="color:#f67400">3</span><span style="color:#3f8058">:</span><span style="color:#f67400">5</span><span style="color:#3f8058">}</span> 
0312      <span style="color:#2980b9">db</span> <span style="color:#3f8058">%{-</span><span style="color:#f67400">1</span><span style="color:#3f8058">:-</span><span style="color:#f67400">3</span><span style="color:#3f8058">}</span> 
0313 <span style="color:#27ae60">%endmacro</span>
0314 
0315 mpar <span style="color:#f67400">1</span><span style="color:#3f8058">,</span><span style="color:#f67400">2</span><span style="color:#3f8058">,</span><span style="color:#f67400">3</span><span style="color:#3f8058">,</span><span style="color:#f67400">4</span><span style="color:#3f8058">,</span><span style="color:#f67400">5</span><span style="color:#3f8058">,</span><span style="color:#f67400">6</span>
0316 
0317 <span style="color:#27ae60">%macro</span>  die <span style="color:#f67400">0</span><span style="color:#3f8058">-</span><span style="color:#f67400">1</span> <span style="color:#f44f4f">"Painful program death has occurred."</span> 
0318 
0319         writefile <span style="color:#f67400">2</span><span style="color:#3f8058">,%</span><span style="color:#f67400">1</span> 
0320         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">0x</span><span style="color:#f67400">4c01</span> 
0321         <span style="font-weight:bold">int</span>     <span style="color:#f67400">0x</span><span style="color:#f67400">21</span> 
0322 
0323 <span style="color:#27ae60">%endmacro</span>
0324 
0325 <span style="color:#27ae60">%macro</span>  multipush <span style="color:#f67400">1</span><span style="color:#3f8058">-*</span> 
0326 
0327   <span style="color:#27ae60">%rep</span>  %0 
0328         <span style="font-weight:bold">push</span>    <span style="color:#3f8058">%</span><span style="color:#f67400">1</span> 
0329   <span style="color:#27ae60">%rotate</span> 1 
0330   <span style="color:#27ae60">%endrep</span> 
0331 
0332         j<span style="color:#3f8058">%-</span><span style="color:#f67400">1</span>    <span style="color:#8e44ad">%%skip</span> 
0333         <span style="color:#fdbc4b;font-weight:bold">ret</span> 
0334   <span style="color:#8e44ad">%%skip:</span> 
0335 
0336 <span style="color:#27ae60">%endmacro</span>
0337 
0338 
0339 <span style="color:#27ae60">%macro</span> foo <span style="color:#f67400">1</span><span style="font-weight:bold">.nolist</span>
0340 
0341 <span style="color:#27ae60">%endmacro</span>
0342 
0343 <span style="color:#27ae60">%macro</span>  pushparam <span style="color:#f67400">1</span> 
0344 
0345   <span style="color:#27ae60">%ifidni</span> %1,ip 
0346         <span style="color:#fdbc4b;font-weight:bold">call</span>    <span style="color:#8e44ad">%%label</span> 
0347   <span style="color:#8e44ad">%%label:</span> 
0348   <span style="color:#27ae60">%else</span> 
0349         <span style="font-weight:bold">push</span>    <span style="color:#3f8058">%</span><span style="color:#f67400">1</span> 
0350   <span style="color:#27ae60">%endif</span> 
0351 
0352 <span style="color:#27ae60">%endmacro</span>
0353 
0354 <span style="color:#27ae60">%assign</span> i <span style="color:#f67400">0</span> 
0355 <span style="color:#27ae60">%rep</span>    64 
0356         <span style="font-weight:bold">inc</span>     <span style="color:#2980b9">word</span> <span style="color:#3f8058">[</span>table<span style="color:#3f8058">+</span><span style="color:#f67400">2</span><span style="color:#3f8058">*</span>i<span style="color:#3f8058">]</span> 
0357 <span style="color:#27ae60">%assign</span> i i<span style="color:#3f8058">+</span><span style="color:#f67400">1</span> 
0358 <span style="color:#27ae60">%endrep</span>
0359 
0360 
0361 <span style="color:#8e44ad">fibonacci:</span> 
0362 <span style="color:#27ae60">%assign</span> i <span style="color:#f67400">0</span> 
0363 <span style="color:#27ae60">%assign</span> j <span style="color:#f67400">1</span> 
0364 <span style="color:#27ae60">%rep</span> 100 
0365 <span style="color:#27ae60">%if</span> j <span style="color:#3f8058">></span> <span style="color:#f67400">65535</span> 
0366     <span style="color:#27ae60">%exitrep</span> 
0367 <span style="color:#27ae60">%endif</span> 
0368         <span style="color:#2980b9">dw</span> j 
0369 <span style="color:#27ae60">%assign</span> k j<span style="color:#3f8058">+</span>i 
0370 <span style="color:#27ae60">%assign</span> i j 
0371 <span style="color:#27ae60">%assign</span> j k 
0372 <span style="color:#27ae60">%endrep</span> 
0373 
0374 fib_number <span style="color:#2980b9">equ</span> <span style="color:#3f8058">($-</span>fibonacci<span style="color:#3f8058">)/</span><span style="color:#f67400">2</span>
0375 
0376 
0377 <span style="color:#27ae60">%include</span> "macros<span style="color:#3f8058">.</span>mac<span style="color:#f44f4f">"</span>
0378 
0379 
0380 <span style="color:#27ae60">%ifndef</span> MACROS_MAC 
0381     <span style="color:#27ae60">%define</span> MACROS_MAC 
0382     <span style="color:#7a7c7d">; now define some macros </span>
0383 <span style="color:#27ae60">%endif</span>
0384 
0385 <span style="color:#27ae60">%pathsearch</span> MyFoo <span style="color:#f44f4f">"foo.bin"</span>
0386 
0387 <span style="color:#27ae60">%imacro</span> <span style="color:#2980b9">incbin</span> <span style="color:#f67400">1</span><span style="color:#3f8058">-</span><span style="color:#f67400">2</span><span style="color:#3f8058">+</span> <span style="color:#f67400">0</span> 
0388 <span style="color:#27ae60">%pathsearch</span> dep <span style="color:#3f8058">%</span><span style="color:#f67400">1</span> 
0389 <span style="color:#27ae60">%depend</span> dep 
0390         <span style="color:#2980b9">incbin</span> dep<span style="color:#3f8058">,%</span><span style="color:#f67400">2</span> 
0391 <span style="color:#27ae60">%endmacro</span>
0392 <span style="color:#27ae60">%use</span> altreg 
0393 <span style="color:#27ae60">%use</span> 'altreg<span style="color:#f44f4f">'</span>
0394 
0395 <span style="color:#27ae60">%push</span>    foobar
0396 
0397 <span style="color:#27ae60">%macro</span> repeat <span style="color:#f67400">0</span> 
0398 
0399     <span style="color:#27ae60">%push</span>   repeat 
0400     <span style="color:#27ae60">%</span>$begin<span style="color:#3f8058">:</span> 
0401 
0402 <span style="color:#27ae60">%endmacro</span>
0403 
0404 <span style="color:#27ae60">%macro</span> until <span style="color:#f67400">1</span>
0405 
0406         j<span style="color:#3f8058">%-</span><span style="color:#f67400">1</span>    <span style="color:#3f8058">%$</span>begin
0407     <span style="color:#27ae60">%pop</span> 
0408 
0409 <span style="color:#27ae60">%endmacro</span>
0410 
0411 <span style="color:#27ae60">%define</span> %$localmac <span style="color:#f67400">3</span>
0412 
0413 <span style="color:#27ae60">%macro</span> else <span style="color:#f67400">0</span> 
0414 
0415   <span style="color:#27ae60">%ifctx</span> if 
0416         <span style="color:#27ae60">%repl</span>   else 
0417         <span style="color:#fdbc4b;font-weight:bold">jmp</span>     <span style="color:#3f8058">%$</span>ifend 
0418         <span style="color:#27ae60">%</span>$ifnot<span style="color:#3f8058">:</span> 
0419   <span style="color:#27ae60">%else</span> 
0420         <span style="color:#27ae60">%error</span>  "expected <span style="color:#f44f4f">`if' before `</span>else<span style="color:#f44f4f">'" </span>
0421   <span style="color:#27ae60">%endif</span> 
0422 
0423 <span style="color:#27ae60">%endmacro</span> 
0424 
0425 <span style="color:#27ae60">%macro</span> endif <span style="color:#f67400">0</span> 
0426 
0427   <span style="color:#27ae60">%ifctx</span> if 
0428         <span style="color:#27ae60">%</span>$ifnot<span style="color:#3f8058">:</span> 
0429         <span style="color:#27ae60">%pop</span> 
0430   <span style="color:#27ae60">%elifctx</span>      else 
0431         <span style="color:#27ae60">%</span>$ifend<span style="color:#3f8058">:</span> 
0432         <span style="color:#27ae60">%pop</span> 
0433   <span style="color:#27ae60">%else</span> 
0434         <span style="color:#27ae60">%error</span>  "expected <span style="color:#f44f4f">`if' or `</span>else<span style="color:#f44f4f">' before `endif'" </span>
0435   <span style="color:#27ae60">%endif</span> 
0436 
0437 <span style="color:#27ae60">%endmacro</span>
0438 
0439 <span style="color:#8e44ad">some_function:</span> 
0440     <span style="color:#27ae60">%push</span> mycontext             <span style="color:#7a7c7d">; save the current context </span>
0441     <span style="color:#27ae60">%stacksize</span> small            <span style="color:#7a7c7d">; tell NASM to use bp </span>
0442     <span style="color:#27ae60">%assign</span> %$localsize <span style="color:#f67400">0</span>       <span style="color:#7a7c7d">; see text for explanation </span>
0443     <span style="color:#27ae60">%local</span> old_ax<span style="color:#3f8058">:</span><span style="color:#2980b9">word</span><span style="color:#3f8058">,</span> old_dx<span style="color:#3f8058">:</span><span style="color:#2980b9">word</span> 
0444 
0445         <span style="font-weight:bold">enter</span>   <span style="color:#3f8058">%$</span>localsize<span style="color:#3f8058">,</span><span style="color:#f67400">0</span>   <span style="color:#7a7c7d">; see text for explanation </span>
0446         <span style="font-weight:bold">mov</span>     <span style="color:#3f8058">[</span>old_ax<span style="color:#3f8058">],</span><span style="font-weight:bold">ax</span>     <span style="color:#7a7c7d">; swap ax &amp; bx </span>
0447         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">cx</span><span style="color:#3f8058">,[</span>old_dx<span style="color:#3f8058">]</span> 
0448         <span style="font-weight:bold">leave</span>                   <span style="color:#7a7c7d">; restore old bp </span>
0449         <span style="color:#fdbc4b;font-weight:bold">ret</span>                     <span style="color:#7a7c7d">; </span>
0450 
0451     <span style="color:#27ae60">%pop</span>                        <span style="color:#7a7c7d">; restore original context</span>
0452 
0453 
0454 <span style="color:#27ae60">%ifdef</span> F1 
0455     <span style="color:#7a7c7d">; do some setup </span>
0456 <span style="color:#27ae60">%elifdef</span> F2 
0457     <span style="color:#7a7c7d">; do some different setup </span>
0458 <span style="color:#27ae60">%else</span> 
0459     <span style="color:#27ae60">%error</span> "Neither F1 nor F2 was defined<span style="color:#3f8058">.</span><span style="color:#f44f4f">" </span>
0460 <span style="color:#27ae60">%endif</span>
0461 <span style="color:#27ae60">%ifdef</span> F1 
0462     <span style="color:#7a7c7d">; do some setup </span>
0463 <span style="color:#27ae60">%elifdef</span> F2 
0464     <span style="color:#7a7c7d">; do some different setup </span>
0465 <span style="color:#27ae60">%else</span> 
0466     <span style="color:#27ae60">%warning</span> "Neither F1 nor F2 was defined<span style="color:#3f8058">,</span> assuming F1<span style="color:#3f8058">.</span><span style="color:#f44f4f">" </span>
0467     <span style="color:#27ae60">%define</span> F1 
0468 <span style="color:#27ae60">%endif</span>%if foo <span style="color:#3f8058">></span> <span style="color:#f67400">64</span> 
0469     <span style="color:#27ae60">%assign</span> foo_over foo<span style="color:#3f8058">-</span><span style="color:#f67400">64</span> 
0470     <span style="color:#27ae60">%error</span> foo is foo_over bytes too large 
0471 <span style="color:#27ae60">%endif</span>
0472 
0473         <span style="color:#2980b9">db</span>      <span style="font-weight:bold">__?NASM_VER?__</span>
0474 
0475 <span style="font-weight:bold">struc</span>   mytype 
0476   <span style="color:#8e44ad">mt_long:</span>      <span style="color:#2980b9">resd</span>    <span style="color:#f67400">1</span> 
0477   <span style="color:#8e44ad">.str:</span>         <span style="color:#2980b9">resb</span>    <span style="color:#f67400">32</span> 
0478 <span style="font-weight:bold">endstruc</span>
0479 
0480 <span style="color:#27ae60">%use</span> altreg 
0481 
0482 
0483 <span style="color:#27ae60">%macro</span>  writefile <span style="color:#f67400">2</span><span style="color:#3f8058">+</span> 
0484 
0485         [<span style="font-weight:bold">section</span> <span style="color:#8e44ad">.data</span><span style="color:#3f8058">]</span> 
0486 
0487   <span style="color:#8e44ad">%%str:</span>        <span style="color:#2980b9">db</span>      <span style="color:#3f8058">%</span><span style="color:#f67400">2</span> 
0488   <span style="color:#8e44ad">%%endstr:</span> 
0489 
0490         <span style="font-weight:bold">__?SECT?__</span> 
0491 
0492         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">dx</span><span style="color:#3f8058">,</span><span style="color:#8e44ad">%%str</span> 
0493         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">cx</span><span style="color:#3f8058">,</span><span style="color:#8e44ad">%%endstr</span><span style="color:#3f8058">-</span><span style="color:#8e44ad">%%str</span> 
0494         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">bx</span><span style="color:#3f8058">,%</span><span style="color:#f67400">1</span> 
0495         <span style="font-weight:bold">mov</span>     <span style="font-weight:bold">ah</span><span style="color:#3f8058">,</span><span style="color:#f67400">0x</span><span style="color:#f67400">40</span> 
0496         <span style="font-weight:bold">int</span>     <span style="color:#f67400">0x</span><span style="color:#f67400">21</span> 
0497 
0498 <span style="color:#27ae60">%endmacro</span>
0499 
0500  <span style="font-weight:bold">DEFAULT</span> <span style="font-weight:bold">BND</span> 
0501      <span style="color:#fdbc4b;font-weight:bold">call</span> foo            <span style="color:#7a7c7d">; BND will be prefixed </span>
0502      <span style="font-weight:bold">nobnd</span> call foo      <span style="color:#7a7c7d">; BND will NOT be prefixed</span>
0503 
0504 <span style="font-weight:bold">global</span> _main 
0505 <span style="color:#8e44ad">_main:</span> 
0506 <span style="font-weight:bold">global</span>  hashlookup<span style="color:#3f8058">:</span>function<span style="color:#3f8058">,</span> hashtable<span style="color:#3f8058">:</span>data
0507 
0508 <span style="font-weight:bold">common</span>  intvar  <span style="color:#f67400">4</span>
0509 <span style="font-weight:bold">static</span> foo 
0510 <span style="color:#8e44ad">foo:</span> 
0511          <span style="color:#7a7c7d">; codes</span>
0512 
0513 <span style="color:#27ae60">%pragma</span> macho lprefix L_
0514 <span style="color:#7a7c7d">; The most common conventions </span>
0515 <span style="color:#27ae60">%pragma</span> output gprefix _ 
0516 <span style="color:#27ae60">%pragma</span> output lprefix L_ 
0517 <span style="color:#7a7c7d">; ELF uses a different convention </span>
0518 <span style="color:#27ae60">%pragma</span> elf    gprefix                       <span style="color:#7a7c7d">; empty </span>
0519 <span style="color:#27ae60">%pragma</span> elf    lprefix <span style="color:#8e44ad">.L</span>
0520 
0521 <span style="font-weight:bold">section</span> <span style="color:#8e44ad">.pdata</span>  rdata <span style="font-weight:bold">align</span><span style="color:#3f8058">=</span><span style="color:#f67400">4</span> 
0522         <span style="color:#2980b9">dd</span>      main <span style="font-weight:bold">wrt</span> <span style="color:#8e44ad">..imagebase</span> 
0523         <span style="color:#2980b9">dd</span>      main_end <span style="font-weight:bold">wrt</span> <span style="color:#8e44ad">..imagebase</span> 
0524         <span style="color:#2980b9">dd</span>      xmain <span style="font-weight:bold">wrt</span> <span style="color:#8e44ad">..imagebase</span> 
0525 <span style="font-weight:bold">section</span> <span style="color:#8e44ad">.xdata</span>  rdata <span style="font-weight:bold">align</span><span style="color:#3f8058">=</span><span style="color:#f67400">8</span> 
0526 <span style="color:#8e44ad">xmain:</span>  <span style="color:#2980b9">db</span>      <span style="color:#f67400">9</span><span style="color:#3f8058">,</span><span style="color:#f67400">0</span><span style="color:#3f8058">,</span><span style="color:#f67400">0</span><span style="color:#3f8058">,</span><span style="color:#f67400">0</span> 
0527         <span style="color:#2980b9">dd</span>      handler <span style="font-weight:bold">wrt</span> <span style="color:#8e44ad">..imagebase</span> 
0528 <span style="font-weight:bold">section</span> <span style="color:#8e44ad">.drectve</span> info 
0529         <span style="color:#2980b9">db</span>      <span style="color:#f44f4f">'/defaultlib:user32.lib /defaultlib:msvcrt.lib '</span>
0530 </pre></body></html>