Warning, file /frameworks/syntax-highlighting/autotests/html/highlight.asm-nasm.dark.html was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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;">&</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;">&</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;">,&</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 & 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>