about summary refs log tree commit diff stats
path: root/html/135next-word-or-string.subx.html
blob: 735f869463f484707462a0dd0dc858279c7b4fd4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
generated by cgit-pink 1.4.1-2-gfad0 (git 2.36.2.497.gbbea4dcf42) at 2024-11-24 06:41:57 +0000
 


>
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 135next-word-or-string.subx</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS2Comment { color: #8a8a8a; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Constant { color: #008787; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  var lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/135next-word-or-string.subx'>https://github.com/akkartik/mu/blob/master/135next-word-or-string.subx</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">  1 </span>== code
<span id="L2" class="LineNr">  2 </span><span class="subxComment">#   instruction                     effective address                                                   register    displacement    immediate</span>
<span id="L3" class="LineNr">  3 </span><span class="subxS1Comment"># . op          subop               mod             rm32          base        index         scale       r32</span>
<span id="L4" class="LineNr">  4 </span><span class="subxS1Comment"># . 1-3 bytes   3 bits              2 bits          3 bits        3 bits      3 bits        2 bits      2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
<span id="L5" class="LineNr">  5 </span>
<span id="L6" class="LineNr">  6 </span><span class="subxComment"># (re)compute the bounds of the next word or string literal in the line</span>
<span id="L7" class="LineNr">  7 </span><span class="subxComment"># return empty string on reaching end of file</span>
<span id="L8" class="LineNr">  8 </span><span class="subxFunction">next-word-or-string</span>:  <span class="subxComment"># line: (addr stream byte), out: (addr slice)</span>
<span id="L9" class="LineNr">  9 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L10" class="LineNr"> 10 </span>    55/push-ebp
<span id="L11" class="LineNr"> 11 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L12" class="LineNr"> 12 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L13" class="LineNr"> 13 </span>    50/push-eax
<span id="L14" class="LineNr"> 14 </span>    51/push-ecx
<span id="L15" class="LineNr"> 15 </span>    56/push-esi
<span id="L16" class="LineNr"> 16 </span>    57/push-edi
<span id="L17" class="LineNr"> 17 </span>    <span class="subxComment"># esi = line</span>
<span id="L18" class="LineNr"> 18 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          6/r32/esi   8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+8) to esi</span>
<span id="L19" class="LineNr"> 19 </span>    <span class="subxComment"># edi = out</span>
<span id="L20" class="LineNr"> 20 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          7/r32/edi   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+12) to edi</span>
<span id="L21" class="LineNr"> 21 </span>    <span class="subxComment"># skip-chars-matching(line, ' ')</span>
<span id="L22" class="LineNr"> 22 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L23" class="LineNr"> 23 </span>    68/push  0x20/imm32/space
<span id="L24" class="LineNr"> 24 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L25" class="LineNr"> 25 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L26" class="LineNr"> 26 </span>    e8/call  <a href='124next-token.subx.html#L341'>skip-chars-matching</a>/disp32
<span id="L27" class="LineNr"> 27 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L28" class="LineNr"> 28 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L29" class="LineNr"> 29 </span><span class="Constant">$next-word-or-string:check0</span>:
<span id="L30" class="LineNr"> 30 </span>    <span class="subxComment"># if (line-&gt;read &gt;= line-&gt;write) clear out and return</span>
<span id="L31" class="LineNr"> 31 </span>    <span class="subxS1Comment"># . eax = line-&gt;read</span>
<span id="L32" class="LineNr"> 32 </span>    8b/copy                         1/mod/*+disp8   6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(esi+4) to eax</span>
<span id="L33" class="LineNr"> 33 </span>    <span class="subxS1Comment"># . if (eax &lt; line-&gt;write) goto next check</span>
<span id="L34" class="LineNr"> 34 </span>    3b/compare                      0/mod/indirect  6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># compare eax with *esi</span>
<span id="L35" class="LineNr"> 35 </span>    7c/jump-if-&lt;  $next-word-or-string:check-for-comment/disp8
<span id="L36" class="LineNr"> 36 </span>    <span class="subxS1Comment"># . return out</span>
<span id="L37" class="LineNr"> 37 </span>    c7          0/subop/copy        0/mod/direct    7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0/imm32           <span class="subxComment"># copy to *edi</span>
<span id="L38" class="LineNr"> 38 </span>    c7          0/subop/copy        1/mod/*+disp8   7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          4/disp8         0/imm32           <span class="subxComment"># copy to *(edi+4)</span>
<span id="L39" class="LineNr"> 39 </span>    eb/jump  $next-word-or-string:end/disp8
<span id="L40" class="LineNr"> 40 </span><span class="Constant">$next-word-or-string:check-for-comment</span>:
<span id="L41" class="LineNr"> 41 </span>    <span class="subxComment"># out-&gt;start = &amp;line-&gt;data[line-&gt;read]</span>
<span id="L42" class="LineNr"> 42 </span>    8b/copy                         1/mod/*+disp8   6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          1/r32/ecx   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L43" class="LineNr"> 43 </span>    8d/copy-address                 1/mod/*+disp8   4/rm32/sib    6/base/esi  1/index/ecx  <span class="Normal"> . </span>          0/r32/eax   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L44" class="LineNr"> 44 </span>    89/copy                         0/mod/indirect  7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to *edi</span>
<span id="L45" class="LineNr"> 45 </span>    <span class="subxComment"># if (line-&gt;data[line-&gt;read] != '#') goto next check</span>
<span id="L46" class="LineNr"> 46 </span>    <span class="subxS1Comment"># . eax = line-&gt;data[line-&gt;read]</span>
<span id="L47" class="LineNr"> 47 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L48" class="LineNr"> 48 </span>    8a/copy-byte                    1/mod/*+disp8   4/rm32/sib    6/base/esi  1/index/ecx  <span class="Normal"> . </span>          0/r32/AL    0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
<span id="L49" class="LineNr"> 49 </span>    <span class="subxS1Comment"># . compare</span>
<span id="L50" class="LineNr"> 50 </span>    3d/compare-eax-and  0x23/imm32/pound
<span id="L51" class="LineNr"> 51 </span>    75/jump-if-!=  $next-word-or-string:check-for-string-literal/disp8
<span id="L52" class="LineNr"> 52 </span><span class="Constant">$next-word-or-string:comment</span>:
<span id="L53" class="LineNr"> 53 </span>    <span class="subxComment"># out-&gt;end = &amp;line-&gt;data[line-&gt;write]</span>
<span id="L54" class="LineNr"> 54 </span>    8b/copy                         0/mod/indirect  6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *esi to eax</span>
<span id="L55" class="LineNr"> 55 </span>    8d/copy-address                 1/mod/*+disp8   4/rm32/sib    6/base/esi  0/index/eax  <span class="Normal"> . </span>          0/r32/eax   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy esi+eax+12 to eax</span>
<span id="L56" class="LineNr"> 56 </span>    89/copy                         1/mod/*+disp8   7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy eax to *(edi+4)</span>
<span id="L57" class="LineNr"> 57 </span>    <span class="subxComment"># line-&gt;read = line-&gt;write  # skip rest of line</span>
<span id="L58" class="LineNr"> 58 </span>    8b/copy                         0/mod/indirect  6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *esi to eax</span>
<span id="L59" class="LineNr"> 59 </span>    89/copy                         1/mod/*+disp8   6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy eax to *(esi+4)</span>
<span id="L60" class="LineNr"> 60 </span>    <span class="subxComment"># return</span>
<span id="L61" class="LineNr"> 61 </span>    eb/jump  $next-word-or-string:end/disp8
<span id="L62" class="LineNr"> 62 </span><span class="Constant">$next-word-or-string:check-for-string-literal</span>:
<span id="L63" class="LineNr"> 63 </span>    <span class="subxComment"># if (line-&gt;data[line-&gt;read] != '&quot;') goto next check</span>
<span id="L64" class="LineNr"> 64 </span>    <span class="subxS1Comment"># . eax = line-&gt;data[line-&gt;read]</span>
<span id="L65" class="LineNr"> 65 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L66" class="LineNr"> 66 </span>    8a/copy-byte                    1/mod/*+disp8   4/rm32/sib    6/base/esi  1/index/ecx  <span class="Normal"> . </span>          0/r32/AL    0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
<span id="L67" class="LineNr"> 67 </span>    <span class="subxS1Comment"># . compare</span>
<span id="L68" class="LineNr"> 68 </span>    3d/compare-eax-and  0x22/imm32/dquote
<span id="L69" class="LineNr"> 69 </span>    75/jump-if-!=  $next-word-or-string:regular-word/disp8
<span id="L70" class="LineNr"> 70 </span><span class="Constant">$next-word-or-string:string-literal</span>:
<span id="L71" class="LineNr"> 71 </span>    <span class="subxComment"># skip-string(line)</span>
<span id="L72" class="LineNr"> 72 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L73" class="LineNr"> 73 </span>    56/push-esi
<span id="L74" class="LineNr"> 74 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L75" class="LineNr"> 75 </span>    e8/call  <a href='124next-token.subx.html#L1171'>skip-string</a>/disp32
<span id="L76" class="LineNr"> 76 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L77" class="LineNr"> 77 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L78" class="LineNr"> 78 </span>    <span class="subxComment"># fall through</span>
<span id="L79" class="LineNr"> 79 </span><span class="Constant">$next-word-or-string:regular-word</span>:
<span id="L80" class="LineNr"> 80 </span>    <span class="subxComment"># skip-chars-not-matching-whitespace(line)  # including trailing newline</span>
<span id="L81" class="LineNr"> 81 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L82" class="LineNr"> 82 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L83" class="LineNr"> 83 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L84" class="LineNr"> 84 </span>    e8/call  <a href='124next-token.subx.html#L716'>skip-chars-not-matching-whitespace</a>/disp32
<span id="L85" class="LineNr"> 85 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L86" class="LineNr"> 86 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L87" class="LineNr"> 87 </span>    <span class="subxComment"># out-&gt;end = &amp;line-&gt;data[line-&gt;read]</span>
<span id="L88" class="LineNr"> 88 </span>    8b/copy                         1/mod/*+disp8   6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          1/r32/ecx   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L89" class="LineNr"> 89 </span>    8d/copy-address                 1/mod/*+disp8   4/rm32/sib    6/base/esi  1/index/ecx  <span class="Normal"> . </span>          0/r32/eax   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L90" class="LineNr"> 90 </span>    89/copy                         1/mod/*+disp8   7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy eax to *(edi+4)</span>
<span id="L91" class="LineNr"> 91 </span><span class="Constant">$next-word-or-string:end</span>:
<span id="L92" class="LineNr"> 92 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L93" class="LineNr"> 93 </span>    5f/pop-to-edi
<span id="L94" class="LineNr"> 94 </span>    5e/pop-to-esi
<span id="L95" class="LineNr"> 95 </span>    59/pop-to-ecx
<span id="L96" class="LineNr"> 96 </span>    58/pop-to-eax
<span id="L97" class="LineNr"> 97 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L98" class="LineNr"> 98 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L99" class="LineNr"> 99 </span>    5d/pop-to-ebp
<span id="L100" class="LineNr">100 </span>    c3/return
<span id="L101" class="LineNr">101 </span>
<span id="L102" class="LineNr">102 </span><span class="subxTest">test-next-word-or-string</span>:
<span id="L103" class="LineNr">103 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L104" class="LineNr">104 </span>    55/push-ebp
<span id="L105" class="LineNr">105 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L106" class="LineNr">106 </span>    <span class="subxComment"># setup</span>
<span id="L107" class="LineNr">107 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L108" class="LineNr">108 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L109" class="LineNr">109 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L110" class="LineNr">110 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L111" class="LineNr">111 </span>    e8/call  <a href='106stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L112" class="LineNr">112 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L113" class="LineNr">113 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L114" class="LineNr">114 </span>    <span class="subxComment"># var slice/ecx: slice</span>
<span id="L115" class="LineNr">115 </span>    68/push  0/imm32/end
<span id="L116" class="LineNr">116 </span>    68/push  0/imm32/start
<span id="L117" class="LineNr">117 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L118" class="LineNr">118 </span>    <span class="subxComment"># write(_test-input-stream, &quot;  ab&quot;)</span>
<span id="L119" class="LineNr">119 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L120" class="LineNr">120 </span>    68/push  <span class="Constant">&quot;  ab&quot;</span>/imm32
<span id="L121" class="LineNr">121 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L122" class="LineNr">122 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L123" class="LineNr">123 </span>    e8/call  <a href='108write.subx.html#L24'>write</a>/disp32
<span id="L124" class="LineNr">124 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L125" class="LineNr">125 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L126" class="LineNr">126 </span>    <span class="subxComment"># next-word-or-string(_test-input-stream, slice)</span>
<span id="L127" class="LineNr">127 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L128" class="LineNr">128 </span>    51/push-ecx
<span id="L129" class="LineNr">129 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L130" class="LineNr">130 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L131" class="LineNr">131 </span>    e8/call  <a href='135next-word-or-string.subx.html#L8'>next-word-or-string</a>/disp32
<span id="L132" class="LineNr">132 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L133" class="LineNr">133 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L134" class="LineNr">134 </span>    <span class="subxComment"># check-ints-equal(_test-input-stream-&gt;read, 4, msg)</span>
<span id="L135" class="LineNr">135 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L136" class="LineNr">136 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L102'>test-next-word-or-string</a>/updates-stream-read-correctly&quot;</span>/imm32
<span id="L137" class="LineNr">137 </span>    68/push  4/imm32
<span id="L138" class="LineNr">138 </span>    b8/copy-to-eax  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L139" class="LineNr">139 </span>    ff          6/subop/push        1/mod/*+disp8   0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(eax+4)</span>
<span id="L140" class="LineNr">140 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L141" class="LineNr">141 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L142" class="LineNr">142 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L143" class="LineNr">143 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L144" class="LineNr">144 </span>    <span class="subxComment"># check-ints-equal(slice-&gt;start - _test-input-stream-&gt;data, 2, msg)</span>
<span id="L145" class="LineNr">145 </span>    <span class="subxS1Comment"># . check-ints-equal(slice-&gt;start - _test-input-stream, 14, msg)</span>
<span id="L146" class="LineNr">146 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L147" class="LineNr">147 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L102'>test-next-word-or-string</a>: start&quot;</span>/imm32
<span id="L148" class="LineNr">148 </span>    68/push  0xe/imm32
<span id="L149" class="LineNr">149 </span>    <span class="subxS2Comment"># . . push slice-&gt;start - _test-input-stream</span>
<span id="L150" class="LineNr">150 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to eax</span>
<span id="L151" class="LineNr">151 </span>    81          5/subop/subtract    3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L152" class="LineNr">152 </span>    50/push-eax
<span id="L153" class="LineNr">153 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L154" class="LineNr">154 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L155" class="LineNr">155 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L156" class="LineNr">156 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L157" class="LineNr">157 </span>    <span class="subxComment"># check-ints-equal(slice-&gt;end - _test-input-stream-&gt;data, 4, msg)</span>
<span id="L158" class="LineNr">158 </span>    <span class="subxS1Comment"># . check-ints-equal(slice-&gt;end - _test-input-stream, 16, msg)</span>
<span id="L159" class="LineNr">159 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L160" class="LineNr">160 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L102'>test-next-word-or-string</a>: end&quot;</span>/imm32
<span id="L161" class="LineNr">161 </span>    68/push  0x10/imm32
<span id="L162" class="LineNr">162 </span>    <span class="subxS2Comment"># . . push slice-&gt;end - _test-input-stream</span>
<span id="L163" class="LineNr">163 </span>    8b/copy                         1/mod/*+disp8   1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L164" class="LineNr">164 </span>    81          5/subop/subtract    3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L165" class="LineNr">165 </span>    50/push-eax
<span id="L166" class="LineNr">166 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L167" class="LineNr">167 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L168" class="LineNr">168 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L169" class="LineNr">169 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L170" class="LineNr">170 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L171" class="LineNr">171 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L172" class="LineNr">172 </span>    5d/pop-to-ebp
<span id="L173" class="LineNr">173 </span>    c3/return
<span id="L174" class="LineNr">174 </span>
<span id="L175" class="LineNr">175 </span><span class="subxTest">test-next-word-or-string-returns-whole-comment</span>:
<span id="L176" class="LineNr">176 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L177" class="LineNr">177 </span>    55/push-ebp
<span id="L178" class="LineNr">178 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L179" class="LineNr">179 </span>    <span class="subxComment"># setup</span>
<span id="L180" class="LineNr">180 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L181" class="LineNr">181 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L182" class="LineNr">182 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L183" class="LineNr">183 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L184" class="LineNr">184 </span>    e8/call  <a href='106stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L185" class="LineNr">185 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L186" class="LineNr">186 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L187" class="LineNr">187 </span>    <span class="subxComment"># var slice/ecx: slice</span>
<span id="L188" class="LineNr">188 </span>    68/push  0/imm32/end
<span id="L189" class="LineNr">189 </span>    68/push  0/imm32/start
<span id="L190" class="LineNr">190 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L191" class="LineNr">191 </span>    <span class="subxComment"># write(_test-input-stream, &quot;  # a&quot;)</span>
<span id="L192" class="LineNr">192 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L193" class="LineNr">193 </span>    68/push  <span class="Constant">&quot;  # a&quot;</span>/imm32
<span id="L194" class="LineNr">194 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L195" class="LineNr">195 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L196" class="LineNr">196 </span>    e8/call  <a href='108write.subx.html#L24'>write</a>/disp32
<span id="L197" class="LineNr">197 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L198" class="LineNr">198 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L199" class="LineNr">199 </span>    <span class="subxComment"># next-word-or-string(_test-input-stream, slice)</span>
<span id="L200" class="LineNr">200 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L201" class="LineNr">201 </span>    51/push-ecx
<span id="L202" class="LineNr">202 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L203" class="LineNr">203 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L204" class="LineNr">204 </span>    e8/call  <a href='135next-word-or-string.subx.html#L8'>next-word-or-string</a>/disp32
<span id="L205" class="LineNr">205 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L206" class="LineNr">206 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L207" class="LineNr">207 </span>    <span class="subxComment"># check-ints-equal(_test-input-stream-&gt;read, 5, msg)</span>
<span id="L208" class="LineNr">208 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L209" class="LineNr">209 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L175'>test-next-word-or-string-returns-whole-comment</a>/updates-stream-read-correctly&quot;</span>/imm32
<span id="L210" class="LineNr">210 </span>    68/push  5/imm32
<span id="L211" class="LineNr">211 </span>    b8/copy-to-eax  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L212" class="LineNr">212 </span>    ff          6/subop/push        1/mod/*+disp8   0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(eax+4)</span>
<span id="L213" class="LineNr">213 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L214" class="LineNr">214 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L215" class="LineNr">215 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L216" class="LineNr">216 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L217" class="LineNr">217 </span>    <span class="subxComment"># check-ints-equal(slice-&gt;start - _test-input-stream-&gt;data, 2, msg)</span>
<span id="L218" class="LineNr">218 </span>    <span class="subxS1Comment"># . check-ints-equal(slice-&gt;start - _test-input-stream, 14, msg)</span>
<span id="L219" class="LineNr">219 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L220" class="LineNr">220 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L175'>test-next-word-or-string-returns-whole-comment</a>: start&quot;</span>/imm32
<span id="L221" class="LineNr">221 </span>    68/push  0xe/imm32
<span id="L222" class="LineNr">222 </span>    <span class="subxS2Comment"># . . push slice-&gt;start - _test-input-stream</span>
<span id="L223" class="LineNr">223 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to eax</span>
<span id="L224" class="LineNr">224 </span>    81          5/subop/subtract    3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L225" class="LineNr">225 </span>    50/push-eax
<span id="L226" class="LineNr">226 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L227" class="LineNr">227 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L228" class="LineNr">228 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L229" class="LineNr">229 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L230" class="LineNr">230 </span>    <span class="subxComment"># check-ints-equal(slice-&gt;end - _test-input-stream-&gt;data, 5, msg)</span>
<span id="L231" class="LineNr">231 </span>    <span class="subxS1Comment"># . check-ints-equal(slice-&gt;end - _test-input-stream, 17, msg)</span>
<span id="L232" class="LineNr">232 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L233" class="LineNr">233 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L175'>test-next-word-or-string-returns-whole-comment</a>: end&quot;</span>/imm32
<span id="L234" class="LineNr">234 </span>    68/push  0x11/imm32
<span id="L235" class="LineNr">235 </span>    <span class="subxS2Comment"># . . push slice-&gt;end - _test-input-stream</span>
<span id="L236" class="LineNr">236 </span>    8b/copy                         1/mod/*+disp8   1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L237" class="LineNr">237 </span>    81          5/subop/subtract    3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L238" class="LineNr">238 </span>    50/push-eax
<span id="L239" class="LineNr">239 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L240" class="LineNr">240 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L241" class="LineNr">241 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L242" class="LineNr">242 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L243" class="LineNr">243 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L244" class="LineNr">244 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L245" class="LineNr">245 </span>    5d/pop-to-ebp
<span id="L246" class="LineNr">246 </span>    c3/return
<span id="L247" class="LineNr">247 </span>
<span id="L248" class="LineNr">248 </span><span class="subxTest">test-next-word-or-string-returns-empty-slice-on-eof</span>:
<span id="L249" class="LineNr">249 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L250" class="LineNr">250 </span>    55/push-ebp
<span id="L251" class="LineNr">251 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L252" class="LineNr">252 </span>    <span class="subxComment"># setup</span>
<span id="L253" class="LineNr">253 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L254" class="LineNr">254 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L255" class="LineNr">255 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L256" class="LineNr">256 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L257" class="LineNr">257 </span>    e8/call  <a href='106stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L258" class="LineNr">258 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L259" class="LineNr">259 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L260" class="LineNr">260 </span>    <span class="subxComment"># var slice/ecx: slice</span>
<span id="L261" class="LineNr">261 </span>    68/push  0/imm32/end
<span id="L262" class="LineNr">262 </span>    68/push  0/imm32/start
<span id="L263" class="LineNr">263 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L264" class="LineNr">264 </span>    <span class="subxComment"># write nothing to _test-input-stream</span>
<span id="L265" class="LineNr">265 </span>    <span class="subxComment"># next-word-or-string(_test-input-stream, slice)</span>
<span id="L266" class="LineNr">266 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L267" class="LineNr">267 </span>    51/push-ecx
<span id="L268" class="LineNr">268 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L269" class="LineNr">269 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L270" class="LineNr">270 </span>    e8/call  <a href='135next-word-or-string.subx.html#L8'>next-word-or-string</a>/disp32
<span id="L271" class="LineNr">271 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L272" class="LineNr">272 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L273" class="LineNr">273 </span>    <span class="subxComment"># check-ints-equal(slice-&gt;end - slice-&gt;start, 0, msg)</span>
<span id="L274" class="LineNr">274 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L275" class="LineNr">275 </span>    68/push  <span class="Constant">&quot;F - test-next-word-or-string-returns-empty-string-on-eof&quot;</span>/imm32
<span id="L276" class="LineNr">276 </span>    68/push  0/imm32
<span id="L277" class="LineNr">277 </span>    <span class="subxS2Comment"># . . push slice-&gt;end - slice-&gt;start</span>
<span id="L278" class="LineNr">278 </span>    8b/copy                         1/mod/*+disp8   1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L279" class="LineNr">279 </span>    2b/subtract                     0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># subtract *ecx from eax</span>
<span id="L280" class="LineNr">280 </span>    50/push-eax
<span id="L281" class="LineNr">281 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L282" class="LineNr">282 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L283" class="LineNr">283 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L284" class="LineNr">284 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L285" class="LineNr">285 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L286" class="LineNr">286 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L287" class="LineNr">287 </span>    5d/pop-to-ebp
<span id="L288" class="LineNr">288 </span>    c3/return
<span id="L289" class="LineNr">289 </span>
<span id="L290" class="LineNr">290 </span><span class="subxTest">test-next-word-or-string-returns-string-literal</span>:
<span id="L291" class="LineNr">291 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L292" class="LineNr">292 </span>    55/push-ebp
<span id="L293" class="LineNr">293 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L294" class="LineNr">294 </span>    <span class="subxComment"># setup</span>
<span id="L295" class="LineNr">295 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L296" class="LineNr">296 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L297" class="LineNr">297 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L298" class="LineNr">298 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L299" class="LineNr">299 </span>    e8/call  <a href='106stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L300" class="LineNr">300 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L301" class="LineNr">301 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L302" class="LineNr">302 </span>    <span class="subxComment"># var slice/ecx: slice</span>
<span id="L303" class="LineNr">303 </span>    68/push  0/imm32/end
<span id="L304" class="LineNr">304 </span>    68/push  0/imm32/start
<span id="L305" class="LineNr">305 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L306" class="LineNr">306 </span>    <span class="subxComment"># write(_test-input-stream, &quot; \&quot;a b\&quot;/imm32 &quot;)</span>
<span id="L307" class="LineNr">307 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L308" class="LineNr">308 </span>    68/push  <span class="Constant">&quot; \&quot;</span>a b\<span class="Constant">&quot;/imm32 &quot;</span>/imm32
<span id="L309" class="LineNr">309 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L310" class="LineNr">310 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L311" class="LineNr">311 </span>    e8/call  <a href='108write.subx.html#L24'>write</a>/disp32
<span id="L312" class="LineNr">312 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L313" class="LineNr">313 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L314" class="LineNr">314 </span>    <span class="subxComment"># next-word-or-string(_test-input-stream, slice)</span>
<span id="L315" class="LineNr">315 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L316" class="LineNr">316 </span>    51/push-ecx
<span id="L317" class="LineNr">317 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L318" class="LineNr">318 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L319" class="LineNr">319 </span>    e8/call  <a href='135next-word-or-string.subx.html#L8'>next-word-or-string</a>/disp32
<span id="L320" class="LineNr">320 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L321" class="LineNr">321 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L322" class="LineNr">322 </span>    <span class="subxComment"># check-ints-equal(slice-&gt;start - _test-input-stream-&gt;data, 1, msg)</span>
<span id="L323" class="LineNr">323 </span>    <span class="subxS1Comment"># . check-ints-equal(slice-&gt;start - _test-input-stream, 13, msg)</span>
<span id="L324" class="LineNr">324 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L325" class="LineNr">325 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L290'>test-next-word-or-string-returns-string-literal</a>: start&quot;</span>/imm32
<span id="L326" class="LineNr">326 </span>    68/push  0xd/imm32
<span id="L327" class="LineNr">327 </span>    <span class="subxS2Comment"># . . push slice-&gt;start - _test-input-stream</span>
<span id="L328" class="LineNr">328 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to eax</span>
<span id="L329" class="LineNr">329 </span>    81          5/subop/subtract    3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L330" class="LineNr">330 </span>    50/push-eax
<span id="L331" class="LineNr">331 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L332" class="LineNr">332 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L333" class="LineNr">333 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L334" class="LineNr">334 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L335" class="LineNr">335 </span>    <span class="subxComment"># check-ints-equal(slice-&gt;end - _test-input-stream-&gt;data, 12, msg)</span>
<span id="L336" class="LineNr">336 </span>    <span class="subxS1Comment"># . check-ints-equal(slice-&gt;end - _test-input-stream, 24, msg)</span>
<span id="L337" class="LineNr">337 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L338" class="LineNr">338 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L290'>test-next-word-or-string-returns-string-literal</a>: end&quot;</span>/imm32
<span id="L339" class="LineNr">339 </span>    68/push  0x18/imm32
<span id="L340" class="LineNr">340 </span>    <span class="subxS2Comment"># . . push slice-&gt;end - _test-input-stream</span>
<span id="L341" class="LineNr">341 </span>    8b/copy                         1/mod/*+disp8   1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L342" class="LineNr">342 </span>    81          5/subop/subtract    3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L343" class="LineNr">343 </span>    50/push-eax
<span id="L344" class="LineNr">344 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L345" class="LineNr">345 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L346" class="LineNr">346 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L347" class="LineNr">347 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L348" class="LineNr">348 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L349" class="LineNr">349 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L350" class="LineNr">350 </span>    5d/pop-to-ebp
<span id="L351" class="LineNr">351 </span>    c3/return
<span id="L352" class="LineNr">352 </span>
<span id="L353" class="LineNr">353 </span><span class="subxTest">test-next-word-or-string-returns-string-with-escapes</span>:
<span id="L354" class="LineNr">354 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L355" class="LineNr">355 </span>    55/push-ebp
<span id="L356" class="LineNr">356 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L357" class="LineNr">357 </span>    <span class="subxComment"># setup</span>
<span id="L358" class="LineNr">358 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L359" class="LineNr">359 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L360" class="LineNr">360 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L361" class="LineNr">361 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L362" class="LineNr">362 </span>    e8/call  <a href='106stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L363" class="LineNr">363 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L364" class="LineNr">364 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L365" class="LineNr">365 </span>    <span class="subxComment"># var slice/ecx: slice</span>
<span id="L366" class="LineNr">366 </span>    68/push  0/imm32/end
<span id="L367" class="LineNr">367 </span>    68/push  0/imm32/start
<span id="L368" class="LineNr">368 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L369" class="LineNr">369 </span>    <span class="subxComment"># write(_test-input-stream, &quot; \&quot;a\\\&quot;b\&quot;/x&quot;)</span>
<span id="L370" class="LineNr">370 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L371" class="LineNr">371 </span>    68/push  <span class="Constant">&quot; \&quot;</span>a\\\<span class="Constant">&quot;b\&quot;</span>/x&quot;/imm32
<span id="L372" class="LineNr">372 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L373" class="LineNr">373 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L374" class="LineNr">374 </span>    e8/call  <a href='108write.subx.html#L24'>write</a>/disp32
<span id="L375" class="LineNr">375 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L376" class="LineNr">376 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L377" class="LineNr">377 </span>    <span class="subxComment"># next-word-or-string(_test-input-stream, slice)</span>
<span id="L378" class="LineNr">378 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L379" class="LineNr">379 </span>    51/push-ecx
<span id="L380" class="LineNr">380 </span>    68/push  <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32
<span id="L381" class="LineNr">381 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L382" class="LineNr">382 </span>    e8/call  <a href='135next-word-or-string.subx.html#L8'>next-word-or-string</a>/disp32
<span id="L383" class="LineNr">383 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L384" class="LineNr">384 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L385" class="LineNr">385 </span>    <span class="subxComment"># check-ints-equal(slice-&gt;start - _test-input-stream-&gt;data, 1, msg)</span>
<span id="L386" class="LineNr">386 </span>    <span class="subxS1Comment"># . check-ints-equal(slice-&gt;start - _test-input-stream, 13, msg)</span>
<span id="L387" class="LineNr">387 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L388" class="LineNr">388 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L353'>test-next-word-or-string-returns-string-with-escapes</a>: start&quot;</span>/imm32
<span id="L389" class="LineNr">389 </span>    68/push  0xd/imm32
<span id="L390" class="LineNr">390 </span>    <span class="subxS2Comment"># . . push slice-&gt;start - _test-input-stream</span>
<span id="L391" class="LineNr">391 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to eax</span>
<span id="L392" class="LineNr">392 </span>    81          5/subop/subtract    3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L393" class="LineNr">393 </span>    50/push-eax
<span id="L394" class="LineNr">394 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L395" class="LineNr">395 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L396" class="LineNr">396 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L397" class="LineNr">397 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L398" class="LineNr">398 </span>    <span class="subxComment"># check-ints-equal(slice-&gt;end - _test-input-stream-&gt;data, 9, msg)</span>
<span id="L399" class="LineNr">399 </span>    <span class="subxS1Comment"># . check-ints-equal(slice-&gt;end - _test-input-stream, 21, msg)</span>
<span id="L400" class="LineNr">400 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L401" class="LineNr">401 </span>    68/push  <span class="Constant">&quot;F - <a href='135next-word-or-string.subx.html#L353'>test-next-word-or-string-returns-string-with-escapes</a>: end&quot;</span>/imm32
<span id="L402" class="LineNr">402 </span>    68/push  0x15/imm32
<span id="L403" class="LineNr">403 </span>    <span class="subxS2Comment"># . . push slice-&gt;end - _test-input-stream</span>
<span id="L404" class="LineNr">404 </span>    8b/copy                         1/mod/*+disp8   1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L405" class="LineNr">405 </span>    81          5/subop/subtract    3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              <a href='112read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L406" class="LineNr">406 </span>    50/push-eax
<span id="L407" class="LineNr">407 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L408" class="LineNr">408 </span>    e8/call  <a href='102test.subx.html#L23'>check-ints-equal</a>/disp32
<span id="L409" class="LineNr">409 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L410" class="LineNr">410 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L411" class="LineNr">411 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L412" class="LineNr">412 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L413" class="LineNr">413 </span>    5d/pop-to-ebp
<span id="L414" class="LineNr">414 </span>    c3/return
<span id="L415" class="LineNr">415 </span>
<span id="L416" class="LineNr">416 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->