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-fasm</title>
0005 <meta name="generator" content="KF5::SyntaxHighlighting - Definition (Intel x86 (FASM)) - Theme (Breeze Dark)"/>
0006 </head><body style="background-color:#232629;color:#cfcfc2"><pre>
0007     <span style="color:#fdbc4b;font-weight:bold">jmp</span> <span style="color:#3f8058">near</span> <span style="color:#2980b9">dword</span> <span style="color:#3f8058">[</span><span style="color:#f67400">0</span><span style="color:#3f8058">]</span>
0008     <span style="color:#fdbc4b;font-weight:bold">jmp</span> <span style="color:#3f8058">far</span> <span style="color:#2980b9">dword</span> <span style="color:#3f8058">[</span><span style="color:#f67400">0</span><span style="color:#3f8058">]</span>
0009 
0010     <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">bx</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ax</span>       <span style="color:#7a7c7d">; general register to general register</span>
0011     <span style="color:#7f8c8d">mov</span> <span style="color:#3f8058">[</span>char<span style="color:#3f8058">],</span><span style="font-weight:bold">al</span>   <span style="color:#7a7c7d">; general register to memory</span>
0012     <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">dl</span><span style="color:#3f8058">,</span><span style="color:#f67400">32</span>       <span style="color:#7a7c7d">; immediate value to general register</span>
0013     <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">cr3</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ebx</span>     <span style="color:#7a7c7d">; general register to control register</span>
0014 
0015     <span style="color:#7f8c8d">xchg</span> <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="font-weight:bold">bx</span>      <span style="color:#7a7c7d">; swap two general registers</span>
0016     <span style="color:#7f8c8d">xchg</span> <span style="font-weight:bold">al</span><span style="color:#3f8058">,[</span>char<span style="color:#3f8058">]</span>  <span style="color:#7a7c7d">; swap register with memory</span>
0017 
0018     <span style="color:#7f8c8d">push</span> <span style="font-weight:bold">ax</span>         <span style="color:#7a7c7d">; store general register</span>
0019     <span style="color:#7f8c8d">push</span> <span style="font-weight:bold">es</span>         <span style="color:#7a7c7d">; store segment register</span>
0020     <span style="color:#7f8c8d">pushw</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">bx</span><span style="color:#3f8058">]</span>      <span style="color:#7a7c7d">; store memory</span>
0021     <span style="color:#7f8c8d">push</span> <span style="color:#f67400">1000</span><span style="color:#f67400">h</span>      <span style="color:#7a7c7d">; store immediate value</span>
0022 
0023     <span style="color:#7f8c8d">imul</span> <span style="font-weight:bold">ax</span><span style="color:#3f8058">,[</span><span style="font-weight:bold">si</span><span style="color:#3f8058">],</span><span style="color:#f67400">10</span> <span style="color:#7a7c7d">; memory by immediate value to register</span>
0024 
0025     <span style="color:#7f8c8d">bt</span>  <span style="font-weight:bold">ax</span><span style="color:#3f8058">,</span><span style="color:#f67400">15</span>        <span style="color:#7a7c7d">; test bit in register</span>
0026     <span style="color:#7f8c8d">bts</span> <span style="color:#2980b9">word</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">bx</span><span style="color:#3f8058">],</span><span style="color:#f67400">15</span> <span style="color:#7a7c7d">; test and set bit in memory</span>
0027 
0028     <span style="color:#7f8c8d">bswap</span> <span style="font-weight:bold">edx</span>        <span style="color:#7a7c7d">; swap bytes in register</span>
0029 
0030     <span style="color:#fdbc4b;font-weight:bold">jmp</span> <span style="color:#f67400">100</span><span style="color:#f67400">h</span>         <span style="color:#7a7c7d">; direct near jump</span>
0031     <span style="color:#fdbc4b;font-weight:bold">jmp</span> <span style="color:#f67400">0FFFF</span><span style="color:#f67400">h</span><span style="color:#3f8058">:</span><span style="color:#f67400">0</span>     <span style="color:#7a7c7d">; direct far jump</span>
0032     <span style="color:#fdbc4b;font-weight:bold">jmp</span> <span style="font-weight:bold">ax</span>           <span style="color:#7a7c7d">; indirect near jump</span>
0033     <span style="color:#fdbc4b;font-weight:bold">jmp</span> <span style="color:#2980b9">pword</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">ebx</span><span style="color:#3f8058">]</span>  <span style="color:#7a7c7d">; indirect far jump</span>
0034 
0035     <span style="color:#7f8c8d">movs</span> <span style="color:#2980b9">byte</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">di</span><span style="color:#3f8058">],[</span><span style="font-weight:bold">si</span><span style="color:#3f8058">]</span>        <span style="color:#7a7c7d">; transfer byte</span>
0036     <span style="color:#7f8c8d">movs</span> <span style="color:#2980b9">word</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">es</span><span style="color:#3f8058">:</span><span style="font-weight:bold">di</span><span style="color:#3f8058">],[</span><span style="font-weight:bold">ss</span><span style="color:#3f8058">:</span><span style="font-weight:bold">si</span><span style="color:#3f8058">]</span>  <span style="color:#7a7c7d">; transfer word</span>
0037     <span style="color:#7f8c8d">movsd</span>                      <span style="color:#7a7c7d">; transfer double word</span>
0038 
0039     <span style="color:#7f8c8d">cmpxchg8b</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">bx</span><span style="color:#3f8058">]</span>   <span style="color:#7a7c7d">; compare and exchange 8 bytes</span>
0040 
0041     <span style="color:#7f8c8d">movq2dq</span> <span style="font-weight:bold">xmm0</span><span style="color:#3f8058">,</span><span style="font-weight:bold">mm1</span>   <span style="color:#7a7c7d">; move from MMX register to SSE register</span>
0042     <span style="color:#7f8c8d">movdq2q</span> <span style="font-weight:bold">mm0</span><span style="color:#3f8058">,</span><span style="font-weight:bold">xmm1</span>   <span style="color:#7a7c7d">; move from SSE register to MMX register</span>
0043 
0044     <span style="color:#7f8c8d">enter</span> <span style="color:#f67400">2048</span><span style="color:#3f8058">,</span><span style="color:#f67400">0</span>     <span style="color:#7a7c7d">; enter and allocate 2048 bytes on stack</span>
0045 
0046     <span style="color:#7f8c8d">mov</span> <span style="color:#3f8058">[</span>rip<span style="color:#3f8058">+</span><span style="color:#f67400">3</span><span style="color:#3f8058">],</span>sil    <span style="color:#7a7c7d">; manual RIP-relative addressing</span>
0047 
0048     <span style="color:#7f8c8d">blendvps</span> <span style="font-weight:bold">xmm3</span><span style="color:#3f8058">,</span><span style="font-weight:bold">xmm7</span><span style="color:#3f8058">,</span><span style="font-weight:bold">xmm0</span> <span style="color:#7a7c7d">; blend according to mask</span>
0049     <span style="color:#7f8c8d">vgatherqps</span> <span style="font-weight:bold">xmm0</span><span style="color:#3f8058">,[</span><span style="font-weight:bold">xmm2</span><span style="color:#3f8058">],</span><span style="font-weight:bold">xmm3</span>        <span style="color:#7a7c7d">; gather two floats</span>
0050     <span style="color:#7f8c8d">vgatherqps</span> <span style="font-weight:bold">xmm0</span><span style="color:#3f8058">,[</span><span style="font-weight:bold">ymm2</span><span style="color:#3f8058">+</span><span style="color:#f67400">64</span><span style="color:#3f8058">],</span><span style="font-weight:bold">xmm3</span>     <span style="color:#7a7c7d">; gather four floats</span>
0051     <span style="color:#7f8c8d">vfmsub231ps</span> <span style="font-weight:bold">ymm1</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ymm2</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ymm3</span>     <span style="color:#7a7c7d">; multiply and subtract</span>
0052     <span style="color:#7f8c8d">vfnmadd132sd</span> <span style="font-weight:bold">xmm0</span><span style="color:#3f8058">,</span><span style="font-weight:bold">xmm5</span><span style="color:#3f8058">,[</span><span style="font-weight:bold">ebx</span><span style="color:#3f8058">]</span>   <span style="color:#7a7c7d">; multiply, negate and add</span>
0053     <span style="color:#7f8c8d">vpermil2ps</span> <span style="font-weight:bold">ymm0</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ymm3</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ymm7</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ymm2</span><span style="color:#3f8058">,</span><span style="color:#f67400">0</span>  <span style="color:#7a7c7d">; permute from two sources</span>
0054 
0055     <span style="color:#7f8c8d">vscatterdps</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">eax</span><span style="color:#3f8058">+</span><span style="font-weight:bold">xmm1</span><span style="color:#3f8058">]{</span><span style="font-weight:bold">k1</span><span style="color:#3f8058">},</span><span style="font-weight:bold">xmm0</span>    <span style="color:#7a7c7d">; scatter four floats</span>
0056     <span style="color:#7f8c8d">vscatterdpd</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">ymm3</span><span style="color:#3f8058">*</span><span style="color:#f67400">8</span><span style="color:#3f8058">]{</span><span style="font-weight:bold">k3</span><span style="color:#3f8058">},</span><span style="font-weight:bold">zmm0</span>      <span style="color:#7a7c7d">; scatter eight doubles</span>
0057 
0058     <span style="color:#2980b9">dd</span> sum
0059     x <span style="color:#3f8058">=</span> <span style="color:#f67400">1</span>
0060     x <span style="color:#3f8058">=</span> x<span style="color:#3f8058">+</span><span style="color:#f67400">2</span>
0061     sum <span style="color:#3f8058">=</span> x
0062 
0063 
0064     <span style="color:#27ae60">if</span> count<span style="color:#3f8058">></span><span style="color:#f67400">0</span>
0065         <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">cx</span><span style="color:#3f8058">,</span>count
0066         <span style="color:#7f8c8d">rep</span> <span style="color:#7f8c8d">movsb</span>
0067     <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0068 
0069 
0070     <span style="color:#27ae60">if</span> count <span style="color:#3f8058">&amp;</span> <span style="color:#3f8058">~</span> count <span style="color:#3f8058">mod</span> <span style="color:#f67400">4</span>
0071         <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">cx</span><span style="color:#3f8058">,</span>count<span style="color:#3f8058">/</span><span style="color:#f67400">4</span>
0072         <span style="color:#7f8c8d">rep</span> <span style="color:#7f8c8d">movsd</span>
0073     <span style="color:#27ae60">else</span> <span style="color:#27ae60">if</span> count<span style="color:#3f8058">></span><span style="color:#f67400">4</span>
0074         <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">cx</span><span style="color:#3f8058">,</span>count<span style="color:#3f8058">/</span><span style="color:#f67400">4</span>
0075         <span style="color:#7f8c8d">rep</span> <span style="color:#7f8c8d">movsd</span>
0076         <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">cx</span><span style="color:#3f8058">,</span>count <span style="color:#3f8058">mod</span> <span style="color:#f67400">4</span>
0077         <span style="color:#7f8c8d">rep</span> <span style="color:#7f8c8d">movsb</span>
0078     <span style="color:#27ae60">else</span>
0079         <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">cx</span><span style="color:#3f8058">,</span>count
0080         <span style="color:#7f8c8d">rep</span> <span style="color:#7f8c8d">movsb</span>
0081     <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0082 
0083     <span style="color:#27ae60">repeat</span> <span style="color:#f67400">8</span>
0084         <span style="color:#7f8c8d">mov</span> <span style="color:#2980b9">byte</span> <span style="color:#3f8058">[</span><span style="font-weight:bold">bx</span><span style="color:#3f8058">],%</span>
0085         <span style="color:#7f8c8d">inc</span> <span style="font-weight:bold">bx</span>
0086     <span style="color:#27ae60">end</span> <span style="color:#27ae60">repeat</span>
0087 
0088 
0089     s <span style="color:#3f8058">=</span> x<span style="color:#3f8058">/</span><span style="color:#f67400">2</span>
0090     <span style="color:#27ae60">repeat</span> <span style="color:#f67400">100</span>
0091         <span style="color:#27ae60">if</span> x<span style="color:#3f8058">/</span>s <span style="color:#3f8058">=</span> s
0092             <span style="color:#27ae60">break</span>
0093         <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0094         s <span style="color:#3f8058">=</span> <span style="color:#3f8058">(</span>s<span style="color:#3f8058">+</span>x<span style="color:#3f8058">/</span>s<span style="color:#3f8058">)/</span><span style="color:#f67400">2</span>
0095     <span style="color:#27ae60">end</span> <span style="color:#27ae60">repeat</span>
0096 
0097     <span style="color:#27ae60">repeat</span> <span style="color:#3f8058">$-$$</span>
0098         <span style="color:#7f8c8d">load</span> a <span style="color:#2980b9">byte</span> from <span style="color:#3f8058">$$+%-</span><span style="color:#f67400">1</span>
0099         <span style="color:#7f8c8d">store</span> <span style="color:#2980b9">byte</span> a <span style="color:#3f8058">xor</span> c at <span style="color:#3f8058">$$+%-</span><span style="color:#f67400">1</span>
0100     <span style="color:#27ae60">end</span> <span style="color:#27ae60">repeat</span>
0101 
0102     GDTR <span style="color:#2980b9">dp</span> <span style="color:#3f8058">?</span>
0103     <span style="color:#27ae60">virtual</span> <span style="color:#27ae60">at</span> GDTR
0104         GDT_limit <span style="color:#2980b9">dw</span> <span style="color:#3f8058">?</span>
0105         GDT_address <span style="color:#2980b9">dd</span> <span style="color:#3f8058">?</span>
0106     <span style="color:#27ae60">end</span> <span style="color:#27ae60">virtual</span>
0107 
0108     <span style="color:#27ae60">virtual</span> <span style="color:#27ae60">at</span> <span style="color:#f67400">0</span>
0109         <span style="color:#2980b9">file</span> <span style="color:#f44f4f">'a.txt'</span><span style="color:#3f8058">:</span><span style="color:#f67400">10</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span><span style="color:#f67400">1</span>
0110         <span style="color:#7f8c8d">load</span> char from <span style="color:#f67400">0</span>
0111     <span style="color:#27ae60">end</span> <span style="color:#27ae60">virtual</span>
0112 
0113     <span style="color:#27ae60">virtual</span> <span style="color:#27ae60">at</span> <span style="color:#f67400">0</span> as <span style="color:#f44f4f">'asc'</span>
0114         <span style="color:#27ae60">times</span> <span style="color:#f67400">256</span> <span style="color:#2980b9">db</span> <span style="color:#3f8058">%-</span><span style="color:#f67400">1</span>
0115     <span style="color:#27ae60">end</span> <span style="color:#27ae60">virtual</span>
0116 
0117     <span style="color:#27ae60">virtual</span> <span style="color:#27ae60">at</span> <span style="color:#f67400">0</span>
0118         <span style="color:#8e44ad">hex_digits:</span>:
0119         <span style="color:#2980b9">db</span> <span style="color:#f44f4f">'0123456789ABCDEF'</span>
0120     <span style="color:#27ae60">end</span> <span style="color:#27ae60">virtual</span>
0121     <span style="color:#7f8c8d">load</span> a <span style="color:#2980b9">byte</span> from hex_digits<span style="color:#3f8058">:</span><span style="color:#f67400">10</span>
0122 
0123     bits <span style="color:#3f8058">=</span> <span style="color:#f67400">16</span>
0124     <span style="color:#27ae60">display</span> <span style="color:#f44f4f">'Current offset is 0x'</span>
0125     <span style="color:#27ae60">repeat</span> bits<span style="color:#3f8058">/</span><span style="color:#f67400">4</span>
0126         d <span style="color:#3f8058">=</span> <span style="color:#f44f4f">'0'</span> <span style="color:#3f8058">+</span> <span style="color:#3f8058">$</span> <span style="color:#3f8058">shr</span> <span style="color:#3f8058">(</span>bits<span style="color:#3f8058">-%*</span><span style="color:#f67400">4</span><span style="color:#3f8058">)</span> <span style="color:#3f8058">and</span> <span style="color:#f67400">0F</span><span style="color:#f67400">h</span>
0127         <span style="color:#27ae60">if</span> d <span style="color:#3f8058">></span> <span style="color:#f44f4f">'9'</span>
0128             d <span style="color:#3f8058">=</span> d <span style="color:#3f8058">+</span> <span style="color:#f44f4f">'A'</span><span style="color:#3f8058">-</span><span style="color:#f44f4f">'9'</span><span style="color:#3f8058">-</span><span style="color:#f67400">1</span>
0129         <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0130         <span style="color:#27ae60">display</span> d
0131     <span style="color:#27ae60">end</span> <span style="color:#27ae60">repeat</span>
0132     <span style="color:#27ae60">display</span> <span style="color:#f67400">13</span><span style="color:#3f8058">,</span><span style="color:#f67400">10</span>
0133 
0134     <span style="color:#27ae60">if</span> <span style="color:#3f8058">~</span> <span style="color:#3f8058">defined</span> alpha
0135         <span style="color:#8e44ad">alpha:</span>
0136     <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0137 
0138     <span style="color:#27ae60">if</span> <span style="color:#3f8058">~</span> <span style="color:#3f8058">defined</span> alpha <span style="color:#3f8058">|</span> <span style="color:#3f8058">defined</span> <span style="color:#8e44ad">@f</span>
0139         <span style="color:#8e44ad">alpha:</span>
0140         <span style="color:#8e44ad">@@:</span>
0141     <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0142 
0143     <span style="color:#7f8c8d">include</span> <span style="color:#f44f4f">'macros.inc'</span>
0144 
0145     d equ <span style="color:#2980b9">dword</span>
0146     NULL equ d <span style="color:#f67400">0</span>
0147     d equ <span style="font-weight:bold">edx</span>
0148 
0149     d equ d<span style="color:#3f8058">,</span><span style="font-weight:bold">eax</span>
0150 
0151     b equ <span style="color:#2980b9">byte</span>
0152     w equ <span style="color:#2980b9">word</span>
0153     d equ <span style="color:#2980b9">dword</span>
0154     p equ <span style="color:#2980b9">pword</span>
0155     f equ <span style="color:#2980b9">fword</span>
0156     q equ <span style="color:#2980b9">qword</span>
0157     t equ <span style="color:#2980b9">tword</span>
0158     x equ <span style="color:#2980b9">dqword</span>
0159     y equ <span style="color:#2980b9">qqword</span>
0160 
0161     incl fix include
0162 
0163     <span style="color:#27ae60">macro</span> tst <span style="color:#3f8058">{</span><span style="color:#7f8c8d">test</span> <span style="font-weight:bold">al</span><span style="color:#3f8058">,</span><span style="color:#f67400">0x</span><span style="color:#f67400">FF</span><span style="color:#3f8058">}</span>
0164 
0165     <span style="color:#27ae60">macro</span> stos0
0166      <span style="color:#3f8058">{</span>
0167         <span style="color:#7f8c8d">xor</span> <span style="font-weight:bold">al</span><span style="color:#3f8058">,</span><span style="font-weight:bold">al</span>
0168         <span style="color:#7f8c8d">stosb</span>
0169      <span style="color:#3f8058">}</span>
0170 
0171     <span style="color:#27ae60">macro</span> align value <span style="color:#3f8058">{</span> <span style="color:#2980b9">rb</span> <span style="color:#3f8058">(</span>value<span style="color:#3f8058">-</span><span style="color:#f67400">1</span><span style="color:#3f8058">)-($+</span>value<span style="color:#3f8058">-</span><span style="color:#f67400">1</span><span style="color:#3f8058">)</span> <span style="color:#3f8058">mod</span> value <span style="color:#3f8058">}</span>
0172 
0173     <span style="color:#27ae60">macro</span> mov op1<span style="color:#3f8058">,</span>op2
0174      <span style="color:#3f8058">{</span>
0175       <span style="color:#27ae60">if</span> op1 in <span style="color:#3f8058">&lt;</span><span style="font-weight:bold">ds</span><span style="color:#3f8058">,</span><span style="font-weight:bold">es</span><span style="color:#3f8058">,</span><span style="font-weight:bold">fs</span><span style="color:#3f8058">,</span><span style="font-weight:bold">gs</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ss</span><span style="color:#3f8058">></span> <span style="color:#3f8058">&amp;</span> op2 in <span style="color:#3f8058">&lt;</span><span style="font-weight:bold">cs</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ds</span><span style="color:#3f8058">,</span><span style="font-weight:bold">es</span><span style="color:#3f8058">,</span><span style="font-weight:bold">fs</span><span style="color:#3f8058">,</span><span style="font-weight:bold">gs</span><span style="color:#3f8058">,</span><span style="font-weight:bold">ss</span><span style="color:#3f8058">></span>
0176         <span style="color:#7f8c8d">push</span>  op2
0177         <span style="color:#7f8c8d">pop</span>   op1
0178       <span style="color:#27ae60">else</span>
0179         <span style="color:#7f8c8d">mov</span>   op1<span style="color:#3f8058">,</span>op2
0180       <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0181      <span style="color:#3f8058">}</span>
0182 
0183     <span style="color:#27ae60">macro</span> stoschar <span style="color:#3f8058">[</span>char<span style="color:#3f8058">]</span>
0184      <span style="color:#3f8058">{</span>
0185         <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">al</span><span style="color:#3f8058">,</span>char
0186         <span style="color:#7f8c8d">stosb</span>
0187      <span style="color:#3f8058">}</span>
0188 
0189     <span style="color:#27ae60">macro</span> movstr
0190      <span style="color:#3f8058">{</span>
0191         <span style="color:#27ae60">local</span> move
0192       <span style="color:#8e44ad">move:</span>
0193         <span style="color:#7f8c8d">lodsb</span>
0194         <span style="color:#7f8c8d">stosb</span>
0195         <span style="color:#7f8c8d">test</span> <span style="font-weight:bold">al</span><span style="color:#3f8058">,</span><span style="font-weight:bold">al</span>
0196         <span style="color:#fdbc4b;font-weight:bold">jnz</span> move
0197      <span style="color:#3f8058">}</span>
0198 
0199     <span style="color:#27ae60">macro</span> strtbl name<span style="color:#3f8058">,[</span>string<span style="color:#3f8058">]</span>
0200      <span style="color:#3f8058">{</span>
0201       <span style="color:#27ae60">common</span>
0202         <span style="color:#27ae60">label</span> name <span style="color:#2980b9">dword</span>
0203       forward
0204         <span style="color:#27ae60">local</span> label
0205         <span style="color:#2980b9">dd</span> label
0206       forward
0207         <span style="color:#27ae60">label</span> <span style="color:#2980b9">db</span> string<span style="color:#3f8058">,</span><span style="color:#f67400">0</span>
0208      <span style="color:#3f8058">}</span>
0209 
0210     <span style="color:#7f8c8d">push</span> <span style="color:#f67400">3</span>
0211     <span style="color:#7f8c8d">push</span> <span style="color:#f67400">2</span>
0212     <span style="color:#7f8c8d">push</span> <span style="color:#f67400">1</span>
0213     <span style="color:#fdbc4b;font-weight:bold">call</span> foo
0214 
0215     <span style="color:#27ae60">macro</span> invoke proc<span style="color:#3f8058">,[</span>arg<span style="color:#3f8058">]</span>
0216      <span style="color:#3f8058">{</span> <span style="color:#27ae60">common</span> stdcall <span style="color:#3f8058">[</span>proc<span style="color:#3f8058">],</span>arg <span style="color:#3f8058">}</span>
0217 
0218     <span style="color:#27ae60">macro</span> jif op1<span style="color:#3f8058">,</span>cond<span style="color:#3f8058">,</span>op2<span style="color:#3f8058">,</span>label
0219      <span style="color:#3f8058">{</span>
0220         <span style="color:#7f8c8d">cmp</span> op1<span style="color:#3f8058">,</span>op2
0221         j<span style="color:#3f8058">#</span>cond label
0222      <span style="color:#3f8058">}</span>
0223 
0224     <span style="color:#27ae60">macro</span> label name
0225      <span style="color:#3f8058">{</span>
0226         <span style="color:#27ae60">label</span> name
0227         <span style="color:#27ae60">if</span> <span style="color:#3f8058">~</span> <span style="color:#3f8058">used</span> name
0228           <span style="color:#27ae60">display</span> <span style="color:#3f8058">`</span>name <span style="color:#3f8058">#</span> <span style="color:#f44f4f">" is defined but not used."</span><span style="color:#3f8058">,</span><span style="color:#f67400">13</span><span style="color:#3f8058">,</span><span style="color:#f67400">10</span>
0229         <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0230      <span style="color:#3f8058">}</span>
0231 
0232     <span style="color:#27ae60">macro</span> message arg
0233      <span style="color:#3f8058">{</span>
0234       <span style="color:#27ae60">if</span> arg eqtype <span style="color:#f44f4f">""</span>
0235         <span style="color:#27ae60">local</span> str
0236         <span style="color:#fdbc4b;font-weight:bold">jmp</span>   <span style="color:#8e44ad">@f</span>
0237         <span style="color:#7f8c8d">str</span>   <span style="color:#2980b9">db</span> arg<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><span style="color:#3f8058">,</span><span style="color:#f67400">24</span><span style="color:#f67400">h</span>
0238         <span style="color:#8e44ad">@@:</span>
0239         <span style="color:#7f8c8d">mov</span>   <span style="font-weight:bold">dx</span><span style="color:#3f8058">,</span>str
0240       <span style="color:#27ae60">else</span>
0241         <span style="color:#7f8c8d">mov</span>   <span style="font-weight:bold">dx</span><span style="color:#3f8058">,</span>arg
0242       <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0243         <span style="color:#7f8c8d">mov</span>   <span style="font-weight:bold">ah</span><span style="color:#3f8058">,</span><span style="color:#f67400">9</span>
0244         <span style="color:#7f8c8d">int</span>   <span style="color:#f67400">21</span><span style="color:#f67400">h</span>
0245      <span style="color:#3f8058">}</span>
0246 
0247     <span style="color:#27ae60">macro</span> ext instr
0248      <span style="color:#3f8058">{</span>
0249       <span style="color:#27ae60">macro</span> instr op1<span style="color:#3f8058">,</span>op2<span style="color:#3f8058">,</span>op3
0250        \<span style="color:#3f8058">{</span>
0251         <span style="color:#27ae60">if</span> op3 eq
0252           instr op1<span style="color:#3f8058">,</span>op2
0253         <span style="color:#27ae60">else</span>
0254           instr op1<span style="color:#3f8058">,</span>op2
0255           instr op2<span style="color:#3f8058">,</span>op3
0256         <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0257        \<span style="color:#3f8058">}</span>
0258      <span style="color:#3f8058">}</span>
0259 
0260     ext add
0261     ext sub
0262 
0263 
0264     <span style="color:#27ae60">macro</span> tmacro <span style="color:#3f8058">[</span>params<span style="color:#3f8058">]</span>
0265      <span style="color:#3f8058">{</span>
0266       <span style="color:#27ae60">common</span> macro params <span style="color:#3f8058">{</span>
0267      <span style="color:#3f8058">}</span>
0268     <span style="color:#27ae60">MACRO</span> fix tmacro
0269     ENDM fix <span style="color:#3f8058">}</span>
0270 
0271 
0272     <span style="color:#27ae60">MACRO</span> stoschar char
0273         <span style="color:#7f8c8d">mov</span> <span style="font-weight:bold">al</span><span style="color:#3f8058">,</span>char
0274         <span style="color:#7f8c8d">stosb</span>
0275     ENDM
0276 
0277     <span style="color:#27ae60">postpone</span>
0278      <span style="color:#3f8058">{</span>
0279       code_size <span style="color:#3f8058">=</span> <span style="color:#3f8058">$</span>
0280      <span style="color:#3f8058">}</span>
0281 
0282     <span style="color:#27ae60">struc</span> point x<span style="color:#3f8058">,</span>y
0283      <span style="color:#3f8058">{</span>
0284         .x <span style="color:#2980b9">dw</span> x
0285         .y <span style="color:#2980b9">dw</span> y
0286      <span style="color:#3f8058">}</span>
0287 
0288     <span style="color:#27ae60">struc</span> <span style="color:#2980b9">db</span> <span style="color:#3f8058">[</span>data<span style="color:#3f8058">]</span>
0289      <span style="color:#3f8058">{</span>
0290        <span style="color:#27ae60">common</span>
0291         . <span style="color:#2980b9">db</span> data
0292         .size <span style="color:#3f8058">=</span> <span style="color:#3f8058">$</span> <span style="color:#3f8058">-</span> <span style="color:#3f8058">.</span>
0293      <span style="color:#3f8058">}</span>
0294 
0295     <span style="color:#27ae60">rept</span> <span style="color:#f67400">5</span> <span style="color:#3f8058">{</span> <span style="color:#7f8c8d">in</span> <span style="font-weight:bold">al</span><span style="color:#3f8058">,</span><span style="font-weight:bold">dx</span> <span style="color:#3f8058">}</span>
0296 
0297     <span style="color:#27ae60">rept</span> <span style="color:#f67400">3</span> counter
0298      <span style="color:#3f8058">{</span>
0299         byte<span style="color:#3f8058">#</span>counter <span style="color:#2980b9">db</span> counter
0300      <span style="color:#3f8058">}</span>
0301 
0302     <span style="color:#27ae60">match</span> <span style="color:#3f8058">+,+</span> <span style="color:#3f8058">{</span> <span style="color:#7f8c8d">include</span> <span style="color:#f44f4f">'first.inc'</span> <span style="color:#3f8058">}</span>
0303     <span style="color:#27ae60">match</span> <span style="color:#3f8058">+,-</span> <span style="color:#3f8058">{</span> <span style="color:#7f8c8d">include</span> <span style="color:#f44f4f">'second.inc'</span> <span style="color:#3f8058">}</span>
0304     <span style="color:#27ae60">match</span> a b<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:#2980b9">db</span> a <span style="color:#3f8058">}</span>
0305 
0306     V fix <span style="color:#3f8058">{</span>
0307       <span style="color:#27ae60">macro</span> empty
0308        V
0309     V fix <span style="color:#3f8058">}</span>
0310        V
0311 
0312 
0313     list equ
0314 
0315     <span style="color:#27ae60">macro</span> append item
0316      <span style="color:#3f8058">{</span>
0317        <span style="color:#27ae60">match</span> any<span style="color:#3f8058">,</span> list <span style="color:#3f8058">\{</span> list equ list<span style="color:#3f8058">,</span>item <span style="color:#3f8058">\}</span>
0318        <span style="color:#27ae60">match</span> <span style="color:#3f8058">,</span> list <span style="color:#3f8058">\{</span> list equ item <span style="color:#3f8058">\}</span>
0319      <span style="color:#3f8058">}</span>
0320 
0321     define a b<span style="color:#3f8058">+</span><span style="color:#f67400">4</span>
0322     define b <span style="color:#f67400">3</span>
0323     <span style="color:#27ae60">rept</span> <span style="color:#f67400">1</span> result<span style="color:#3f8058">:</span>a<span style="color:#3f8058">*</span>b<span style="color:#3f8058">+</span><span style="color:#f67400">2</span> <span style="color:#3f8058">{</span> define c result <span style="color:#3f8058">}</span>
0324 
0325     <span style="color:#27ae60">rept</span> <span style="color:#f67400">8</span> n<span style="color:#3f8058">:</span><span style="color:#f67400">0</span> <span style="color:#3f8058">{</span> <span style="color:#7f8c8d">pxor</span> xmm<span style="color:#3f8058">#</span>n<span style="color:#3f8058">,</span>xmm<span style="color:#3f8058">#</span>n <span style="color:#3f8058">}</span>
0326 
0327 
0328    <span style="color:#27ae60">irps</span> reg<span style="color:#3f8058">,</span> <span style="font-weight:bold">al</span> <span style="font-weight:bold">bx</span> <span style="font-weight:bold">ecx</span>
0329     <span style="color:#3f8058">{</span> <span style="color:#7f8c8d">xor</span> reg<span style="color:#3f8058">,</span>reg <span style="color:#3f8058">}</span>
0330 
0331 
0332     <span style="color:#27ae60">if</span> <span style="color:#f67400">0</span>
0333     a <span style="color:#3f8058">=</span> <span style="color:#f67400">1</span>
0334     b equ <span style="color:#f67400">2</span>
0335     <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0336     <span style="color:#2980b9">dd</span> b
0337 
0338 
0339     <span style="color:#7f8c8d">extrn</span> exit
0340     <span style="color:#7f8c8d">extrn</span> <span style="color:#f44f4f">'__imp__MessageBoxA@16'</span> as MessageBox<span style="color:#3f8058">:</span><span style="color:#2980b9">dword</span>
0341 
0342     <span style="color:#7f8c8d">extrn</span> <span style="color:#f44f4f">'printf'</span> as _printf
0343     printf <span style="color:#3f8058">=</span> <span style="color:#3f8058">PLT</span> _printf
0344 
0345     tester<span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">0</span>
0346 
0347         <span style="color:#8e44ad">space:</span>
0348         space<span style="color:#3f8058">.</span>x <span style="color:#3f8058">=</span> <span style="color:#f67400">1</span>
0349         space<span style="color:#3f8058">.</span>y <span style="color:#3f8058">=</span> <span style="color:#f67400">2</span>
0350         <span style="color:#8e44ad">space.color:</span>
0351         space<span style="color:#3f8058">.</span>color<span style="color:#3f8058">.</span>r <span style="color:#3f8058">=</span> <span style="color:#f67400">0</span>
0352         space<span style="color:#3f8058">.</span>color<span style="color:#3f8058">.</span>g <span style="color:#3f8058">=</span> <span style="color:#f67400">0</span>
0353         space<span style="color:#3f8058">.</span>color<span style="color:#3f8058">.</span>b <span style="color:#3f8058">=</span> <span style="color:#f67400">0</span>
0354 
0355         <span style="color:#8e44ad">space:</span>
0356         <span style="color:#27ae60">namespace</span> space
0357                 x <span style="color:#3f8058">=</span> <span style="color:#f67400">1</span>
0358                 y <span style="color:#3f8058">=</span> <span style="color:#f67400">2</span>
0359                 <span style="color:#8e44ad">color:</span>
0360                 .r <span style="color:#3f8058">=</span> <span style="color:#f67400">0</span>
0361                 .g <span style="color:#3f8058">=</span> <span style="color:#f67400">0</span>
0362                 .b <span style="color:#3f8058">=</span> <span style="color:#f67400">0</span>
0363         <span style="color:#27ae60">end</span> <span style="color:#27ae60">namespace</span>
0364 
0365 
0366         <span style="color:#8e44ad">first:</span>
0367                 .child <span style="color:#3f8058">=</span> <span style="color:#f67400">1</span>
0368                 ..other <span style="color:#3f8058">=</span> <span style="color:#f67400">0</span>
0369         <span style="color:#8e44ad">second:</span>
0370                 .child <span style="color:#3f8058">=</span> <span style="color:#f67400">2</span>
0371                 ..another <span style="color:#3f8058">=</span> <span style="color:#3f8058">..</span>other
0372 
0373 
0374         <span style="color:#27ae60">label</span> character<span style="color:#3f8058">:</span><span style="color:#2980b9">byte</span>
0375         <span style="color:#27ae60">label</span> char<span style="color:#3f8058">:</span><span style="color:#f67400">1</span>
0376 
0377         <span style="color:#2980b9">byte</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">1</span>       <span style="color:#7a7c7d">; 8 bits</span>
0378         <span style="color:#2980b9">word</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">2</span>       <span style="color:#7a7c7d">; 16 bits</span>
0379         <span style="color:#2980b9">dword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">4</span>      <span style="color:#7a7c7d">; 32 bits</span>
0380         <span style="color:#2980b9">fword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">6</span>      <span style="color:#7a7c7d">; 48 bits</span>
0381         <span style="color:#2980b9">pword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">6</span>      <span style="color:#7a7c7d">; 48 bits</span>
0382         <span style="color:#2980b9">qword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">8</span>      <span style="color:#7a7c7d">; 64 bits</span>
0383         <span style="color:#2980b9">tbyte</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">10</span>     <span style="color:#7a7c7d">; 80 bits</span>
0384         <span style="color:#2980b9">tword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">10</span>     <span style="color:#7a7c7d">; 80 bits</span>
0385         <span style="color:#2980b9">dqword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">16</span>    <span style="color:#7a7c7d">; 128 bits</span>
0386         <span style="color:#2980b9">xword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">16</span>     <span style="color:#7a7c7d">; 128 bits</span>
0387         <span style="color:#2980b9">qqword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">32</span>    <span style="color:#7a7c7d">; 256 bits</span>
0388         <span style="color:#2980b9">yword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">32</span>     <span style="color:#7a7c7d">; 256 bits</span>
0389         <span style="color:#2980b9">dqqword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">64</span>   <span style="color:#7a7c7d">; 512 bits</span>
0390         <span style="color:#2980b9">zword</span><span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span> <span style="color:#f67400">64</span>     <span style="color:#7a7c7d">; 512 bits</span>
0391 
0392         element A
0393         linpoly <span style="color:#3f8058">=</span> A <span style="color:#3f8058">+</span> A <span style="color:#3f8058">+</span> <span style="color:#f67400">3</span>
0394         vterm <span style="color:#3f8058">=</span> linpoly scale <span style="color:#f67400">1</span> <span style="color:#3f8058">*</span> linpoly element <span style="color:#f67400">1</span>     <span style="color:#7a7c7d">; vterm = 2 * A</span>
0395 
0396         <span style="color:#2980b9">db</span> <span style="color:#f67400">4</span> dup <span style="color:#f67400">90</span><span style="color:#f67400">h</span>            <span style="color:#7a7c7d">; generate 4 bytes</span>
0397         <span style="color:#2980b9">db</span> <span style="color:#f67400">2</span> dup <span style="color:#3f8058">(</span><span style="color:#f44f4f">'abc'</span><span style="color:#3f8058">,</span><span style="color:#f67400">10</span><span style="color:#3f8058">)</span>     <span style="color:#7a7c7d">; generate 8 bytes</span>
0398 
0399         <span style="color:#27ae60">macro</span> measured name<span style="color:#3f8058">,</span>string
0400                 <span style="color:#27ae60">local</span> top
0401                 name <span style="color:#2980b9">db</span> string
0402                 <span style="color:#8e44ad">top:</span> name<span style="color:#3f8058">.</span>length <span style="color:#3f8058">=</span> top <span style="color:#3f8058">-</span> name
0403         <span style="color:#27ae60">end</span> <span style="color:#27ae60">macro</span>
0404 
0405         measured hello<span style="color:#3f8058">,</span> <span style="color:#f44f4f">'Hello!'</span>        <span style="color:#7a7c7d">; hello.length = 6</span>
0406 
0407         A equ <span style="color:#f67400">1</span>
0408         A equ <span style="color:#f67400">2</span>
0409 
0410         drop A
0411         drop A
0412 
0413         data1 <span style="color:#2980b9">dw</span> <span style="color:#f67400">1</span>
0414         buffer1 <span style="color:#2980b9">rb</span> <span style="color:#f67400">10</span><span style="color:#f67400">h</span>          <span style="color:#7a7c7d">; zeroed and present in the output</span>
0415 
0416         <span style="color:#7f8c8d">org</span> <span style="color:#f67400">400</span><span style="color:#f67400">h</span>
0417         <span style="color:#7f8c8d">data</span> <span style="color:#2980b9">dw</span> <span style="color:#f67400">2</span>
0418         buffer2 <span style="color:#2980b9">rb</span> <span style="color:#f67400">20</span><span style="color:#f67400">h</span>          <span style="color:#7a7c7d">; not in the output</span>
0419 
0420         <span style="color:#7f8c8d">section</span> <span style="color:#f67400">1000</span><span style="color:#f67400">h</span>
0421         data3 <span style="color:#2980b9">dw</span> <span style="color:#f67400">3</span>
0422         buffer3 <span style="color:#2980b9">rb</span> <span style="color:#f67400">30</span><span style="color:#f67400">h</span>          <span style="color:#7a7c7d">; not in the output</span>
0423 
0424         <span style="color:#27ae60">virtual</span> <span style="color:#27ae60">at</span> <span style="color:#f67400">0</span>
0425                 <span style="color:#8e44ad">hex_digits:</span>:
0426                 <span style="color:#2980b9">db</span> <span style="color:#f44f4f">'0123456789ABCDEF'</span>
0427         <span style="color:#27ae60">end</span> <span style="color:#27ae60">virtual</span>
0428         <span style="color:#7f8c8d">load</span> a<span style="color:#3f8058">:</span><span style="color:#2980b9">byte</span> from hex_digits<span style="color:#3f8058">:</span><span style="color:#f67400">10</span>  <span style="color:#7a7c7d">; a = 'A'</span>
0429 
0430         <span style="color:#2980b9">db</span> <span style="color:#f44f4f">"Text"</span>
0431         key <span style="color:#3f8058">=</span> <span style="color:#f67400">7B</span><span style="color:#f67400">h</span>
0432         <span style="color:#27ae60">repeat</span> <span style="color:#3f8058">$-$$</span>
0433                 <span style="color:#7f8c8d">load</span> a <span style="color:#3f8058">:</span> <span style="color:#2980b9">byte</span> from <span style="color:#3f8058">$$+%-</span><span style="color:#f67400">1</span>
0434                 <span style="color:#7f8c8d">store</span> a <span style="color:#3f8058">xor</span> key <span style="color:#3f8058">:</span> <span style="color:#2980b9">byte</span> at <span style="color:#3f8058">$$+%-</span><span style="color:#f67400">1</span>
0435         <span style="color:#27ae60">end</span> <span style="color:#27ae60">repeat</span>
0436 
0437         <span style="color:#7f8c8d">load</span> char <span style="color:#3f8058">:</span> <span style="color:#2980b9">byte</span> from const<span style="color:#3f8058">:</span><span style="color:#f67400">0</span>
0438 
0439         <span style="color:#27ae60">if</span> <span style="color:#3f8058">$></span><span style="color:#f67400">10000</span><span style="color:#f67400">h</span>
0440                 <span style="color:#27ae60">err</span> <span style="color:#f44f4f">'segment too large'</span>
0441         <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span>
0442         <span style="color:#27ae60">calminstruction</span> please<span style="color:#3f8058">?</span> cmd<span style="color:#3f8058">&amp;</span>
0443                 <span style="color:#27ae60">match</span> <span style="color:#3f8058">=</span>do<span style="color:#3f8058">?</span> <span style="color:#3f8058">=</span><span style="color:#3f8058">not</span><span style="color:#3f8058">?</span> cmd<span style="color:#3f8058">,</span> cmd
0444                 jyes done
0445                 assemble cmd
0446             <span style="color:#8e44ad">done:</span>
0447         <span style="color:#27ae60">end</span> <span style="color:#27ae60">calminstruction</span>
0448 
0449         please do <span style="color:#3f8058">not</span> display <span style="color:#f44f4f">'Bye!'</span>
0450 
0451         <span style="color:#27ae60">macro</span> jmpi target
0452                 <span style="color:#27ae60">if</span> target<span style="color:#3f8058">-($+</span><span style="color:#f67400">2</span><span style="color:#3f8058">)</span> <span style="color:#3f8058">&lt;</span> <span style="color:#f67400">80</span><span style="color:#f67400">h</span> <span style="color:#3f8058">&amp;</span> target<span style="color:#3f8058">-($+</span><span style="color:#f67400">2</span><span style="color:#3f8058">)</span> <span style="color:#3f8058">>=</span> <span style="color:#3f8058">-</span><span style="color:#f67400">80</span><span style="color:#f67400">h</span>                    
0453                         <span style="color:#2980b9">db</span> <span style="color:#f67400">0EB</span><span style="color:#f67400">h</span>
0454                         <span style="color:#2980b9">db</span> target<span style="color:#3f8058">-($+</span><span style="color:#f67400">1</span><span style="color:#3f8058">)</span>
0455                 <span style="color:#27ae60">else</span>
0456                         <span style="color:#2980b9">db</span> <span style="color:#f67400">0E9</span><span style="color:#f67400">h</span>
0457                         <span style="color:#2980b9">dw</span> target<span style="color:#3f8058">-($+</span><span style="color:#f67400">2</span><span style="color:#3f8058">)</span>
0458                 <span style="color:#27ae60">end</span> <span style="color:#27ae60">if</span> 
0459         <span style="color:#27ae60">end</span> <span style="color:#27ae60">macro</span>
0460 
0461         <span style="color:#27ae60">macro</span> EX<span style="color:#3f8058">?</span> first<span style="color:#3f8058">,</span>second
0462                 <span style="color:#27ae60">match</span> <span style="color:#3f8058">(=</span><span style="font-weight:bold">SP</span><span style="color:#3f8058">?),</span> first
0463                         <span style="color:#27ae60">match</span> <span style="color:#3f8058">=</span>HL<span style="color:#3f8058">?,</span> second
0464                                 <span style="color:#2980b9">db</span> <span style="color:#f67400">0E3</span><span style="color:#f67400">h</span>
0465                         <span style="color:#27ae60">else</span> <span style="color:#27ae60">match</span> <span style="color:#3f8058">=</span>IX<span style="color:#3f8058">?,</span> second
0466                                 <span style="color:#2980b9">db</span> <span style="color:#f67400">0DD</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span><span style="color:#f67400">0E3</span><span style="color:#f67400">h</span>
0467                         <span style="color:#27ae60">else</span> <span style="color:#27ae60">match</span> <span style="color:#3f8058">=</span>IY<span style="color:#3f8058">?,</span> second
0468                                 <span style="color:#2980b9">db</span> <span style="color:#f67400">0FD</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span><span style="color:#f67400">0E3</span><span style="color:#f67400">h</span>
0469                         <span style="color:#27ae60">else</span>
0470                                 <span style="color:#27ae60">err</span> <span style="color:#f44f4f">"incorrect second argument"</span>
0471                         <span style="color:#27ae60">end</span> <span style="color:#27ae60">match</span>
0472                 <span style="color:#27ae60">else</span> <span style="color:#27ae60">match</span> <span style="color:#3f8058">=</span>AF<span style="color:#3f8058">?,</span> first
0473                         <span style="color:#27ae60">match</span> <span style="color:#3f8058">=</span>AF<span style="color:#f44f4f">'?, second</span>
0474                                 <span style="color:#2980b9">db</span> <span style="color:#f67400">08</span><span style="color:#f67400">h</span>
0475                         <span style="color:#27ae60">else</span>
0476                                 <span style="color:#27ae60">err</span> <span style="color:#f44f4f">"incorrect second argument"</span>
0477                         <span style="color:#27ae60">end</span> <span style="color:#27ae60">match</span>
0478                 <span style="color:#27ae60">else</span> <span style="color:#27ae60">match</span> <span style="color:#3f8058">=</span>DE<span style="color:#3f8058">?,</span> first
0479                         <span style="color:#27ae60">match</span> <span style="color:#3f8058">=</span>HL<span style="color:#3f8058">?,</span> second
0480                                 <span style="color:#2980b9">db</span> <span style="color:#f67400">0EB</span><span style="color:#f67400">h</span>
0481                         <span style="color:#27ae60">else</span>
0482                                 <span style="color:#27ae60">err</span> <span style="color:#f44f4f">"incorrect second argument"</span>
0483                         <span style="color:#27ae60">end</span> <span style="color:#27ae60">match</span>
0484                 <span style="color:#27ae60">else</span>
0485                         <span style="color:#27ae60">err</span> <span style="color:#f44f4f">"incorrect first argument"</span>
0486                 <span style="color:#27ae60">end</span> <span style="color:#27ae60">match</span>
0487         <span style="color:#27ae60">end</span> <span style="color:#27ae60">macro</span>
0488 
0489         EX <span style="color:#3f8058">(</span><span style="font-weight:bold">SP</span><span style="color:#3f8058">),</span>HL
0490 
0491         <span style="color:#27ae60">macro</span> INC<span style="color:#3f8058">?</span> argument
0492                 <span style="color:#27ae60">match</span> <span style="color:#3f8058">[:</span>r<span style="color:#3f8058">:],</span> argument
0493                         <span style="color:#2980b9">db</span> <span style="color:#f67400">100</span><span style="color:#f67400">b</span> <span style="color:#3f8058">+</span> r <span style="color:#3f8058">shl</span> <span style="color:#f67400">3</span>
0494                 <span style="color:#27ae60">else</span> <span style="color:#27ae60">match</span> <span style="color:#3f8058">(=</span>HL<span style="color:#3f8058">?),</span> argument
0495                         <span style="color:#2980b9">db</span> <span style="color:#f67400">34</span><span style="color:#f67400">h</span>
0496                 <span style="color:#27ae60">else</span> <span style="color:#27ae60">match</span> <span style="color:#3f8058">(=</span>IX<span style="color:#3f8058">?+</span>d<span style="color:#3f8058">),</span> argument
0497                         <span style="color:#2980b9">db</span> <span style="color:#f67400">0DD</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span><span style="color:#f67400">34</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span>d
0498                 <span style="color:#27ae60">else</span> <span style="color:#27ae60">match</span> <span style="color:#3f8058">(=</span>IY<span style="color:#3f8058">?+</span>d<span style="color:#3f8058">),</span> argument
0499                         <span style="color:#2980b9">db</span> <span style="color:#f67400">0FD</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span><span style="color:#f67400">34</span><span style="color:#f67400">h</span><span style="color:#3f8058">,</span>d
0500                 <span style="color:#27ae60">else</span>
0501                         <span style="color:#27ae60">err</span> <span style="color:#f44f4f">"incorrect argument"</span>
0502                 <span style="color:#27ae60">end</span> <span style="color:#27ae60">match</span>
0503         <span style="color:#27ae60">end</span> <span style="color:#27ae60">macro</span>
0504 
0505         <span style="color:#7f8c8d">INC</span> <span style="color:#3f8058">(</span>IX<span style="color:#3f8058">+</span><span style="color:#f67400">2</span><span style="color:#3f8058">)</span>
0506 
0507         element IY<span style="color:#3f8058">?</span> 
0508 
0509         element L<span style="color:#3f8058">?</span> <span style="color:#3f8058">:</span> register <span style="color:#3f8058">+</span> <span style="color:#f67400">101</span><span style="color:#f67400">b</span>
0510 
0511         <span style="color:#27ae60">macro</span> CALL<span style="color:#3f8058">?</span> arguments<span style="color:#3f8058">&amp;</span>
0512                 <span style="color:#27ae60">local</span> cc<span style="color:#3f8058">,</span>nn
0513                 <span style="color:#27ae60">match</span> condition <span style="color:#3f8058">=,</span> target<span style="color:#3f8058">,</span> arguments
0514                         cc <span style="color:#3f8058">=</span> condition <span style="color:#3f8058">-</span> CC
0515                         nn <span style="color:#3f8058">=</span> target
0516                         <span style="color:#2980b9">db</span> <span style="color:#f67400">0C4</span><span style="color:#f67400">h</span> <span style="color:#3f8058">+</span> cc <span style="color:#3f8058">shl</span> <span style="color:#f67400">3</span>
0517                 <span style="color:#27ae60">else</span>
0518                         nn <span style="color:#3f8058">=</span> arguments
0519                         <span style="color:#2980b9">db</span> <span style="color:#f67400">0CD</span><span style="color:#f67400">h</span>                     
0520                 <span style="color:#27ae60">end</span> <span style="color:#27ae60">match</span>
0521                 <span style="color:#2980b9">dw</span> nn
0522         <span style="color:#27ae60">end</span> <span style="color:#27ae60">macro</span>
0523 </pre></body></html>