about summary refs log tree commit diff stats
path: root/089scenario_filesystem.cc
Commit message (Collapse)AuthorAgeFilesLines
* 5001 - drop the :(scenario) DSLKartik Agaram2019-03-121-66/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've been saying for a while[1][2][3] that adding extra abstractions makes things harder for newcomers, and adding new notations doubly so. And then I notice this DSL in my own backyard. Makes me feel like a hypocrite. [1] https://news.ycombinator.com/item?id=13565743#13570092 [2] https://lobste.rs/s/to8wpr/configuration_files_are_canary_warning [3] https://lobste.rs/s/mdmcdi/little_languages_by_jon_bentley_1986#c_3miuf2 The implementation of the DSL was also highly hacky: a) It was happening in the tangle/ tool, but was utterly unrelated to tangling layers. b) There were several persnickety constraints on the different kinds of lines and the specific order they were expected in. I kept finding bugs where the translator would silently do the wrong thing. Or the error messages sucked, and readers may be stuck looking at the generated code to figure out what happened. Fixing error messages would require a lot more code, which is one of my arguments against DSLs in the first place: they may be easy to implement, but they're hard to design to go with the grain of the underlying platform. They require lots of iteration. Is that effort worth prioritizing in this project? On the other hand, the DSL did make at least some readers' life easier, the ones who weren't immediately put off by having to learn a strange syntax. There were fewer quotes to parse, fewer backslash escapes. Anyway, since there are also people who dislike having to put up with strange syntaxes, we'll call that consideration a wash and tear this DSL out. --- This commit was sheer drudgery. Hopefully it won't need to be redone with a new DSL because I grow sick of backslashes.
* 4987 - support `browse_trace` tool in SubXKartik Agaram2019-02-251-5/+5
| | | | | | | | | | | | | | | | | | I've extracted it into a separate binary, independent of my Mu prototype. I also cleaned up my tracing layer to be a little nicer. Major improvements: - Realized that incremental tracing really ought to be the default. And to minimize printing traces to screen. - Finally figured out how to combine layers and call stack frames in a single dimension of depth. The answer: optimize for the experience of `browse_trace`. Instructions occupy a range of depths based on their call stack frame, and minor details of an instruction lie one level deeper in each case. Other than that, I spent some time adjusting levels everywhere to make `browse_trace` useful.
* 4266 - space for alloc-id in heap allocationsKartik Agaram2018-06-241-7/+9
| | | | This has taken me almost 6 weeks :(
* 4258 - undo 4257Kartik Agaram2018-06-151-9/+7
|
* 4257 - abortive attempt at safe fat pointersKartik Agaram2018-06-151-7/+9
| | | | | | | | | | | | | | | | I've been working on this slowly over several weeks, but it's too hard to support 0 as the null value for addresses. I constantly have to add exceptions for scalar value corresponding to an address type (now occupying 2 locations). The final straw is the test for 'reload': x:num <- reload text 'reload' returns an address. But there's no way to know that for arbitrary instructions. New plan: let's put this off for a bit and first create support for literals. Then use 'null' instead of '0' for addresses everywhere. Then it'll be easy to just change what 'null' means.
* 4179 - experiment: rip out memory reclamationKartik K. Agaram2018-01-031-12/+4
| | | | | | | | | | | | | | | | | | | | | I have a plan for a way to avoid use-after-free errors without all the overheads of maintaining refcounts. Has the nice side-effect of requiring manual memory management. The Mu way is to leak memory by default and build tools to help decide when and where to expend effort plugging memory leaks. Arguably programs should be distributed with summaries of their resource use characteristics. Eliminating refcount maintenance reduces time to run tests by 30% for `mu edit`: this commit parent mu test: 3.9s 4.5s mu test edit: 2:38 3:48 Open questions: - making reclamation easier; some sort of support for destructors - reclaiming local scopes (which are allocated on the heap) - should we support automatically reclaiming allocations inside them?
* 4104Kartik K. Agaram2017-11-031-9/+9
| | | | | Stop hardcoding Max_depth everywhere; we had a default value for a reason but then we forgot all about it.
* 3668 - $read a word, stopping at whitespaceKartik K. Agaram2016-11-111-8/+0
| | | | | | | | | | | | Useful for programming contests like https://halite.io Doesn't suffer from C++'s usual buffered gotchas: it'll skip leading whitespace. Slow, though. Can be speeded up, though. - 20 minutes later But what's the point? Typewriter mode is actually harder to test than 'raw' console mode. Writing Mu programs in typewriter mode is just going to encourage us all to slack off on writing tests.
* 3643Kartik K. Agaram2016-11-071-1/+1
| | | | | Standardize on calling literate waypoints "Special-cases" rather than "Cases". Invariably there's a default path already present.
* 3608 - concurrent writes to fake file systemKartik K. Agaram2016-10-291-1/+1
|
* 3539Kartik K. Agaram2016-10-211-0/+15
| | | | | | | | | | | | | Always check if next_word() returned an empty string (if it hit eof). Thanks Rebecca Allard for running into a crash when a .mu file ends with '{' (without a following newline). Open question: how to express the constraint that next_word() should always check if its result is empty? Can *any* type system do that?! Even the usual constraint that we must use a result isn't iron-clad: you could save the result in a variable but then ignore it. Unless you go to Go's extraordinary lengths of considering any dead code an error.
* 3522Kartik K. Agaram2016-10-191-2/+2
|
* 3505Kartik K. Agaram2016-10-151-4/+2
|
* 3504Kartik K. Agaram2016-10-151-58/+58
|
* 3503Kartik K. Agaram2016-10-151-2/+2
| | | | | Undo commit 3500; turns out we need the duplicate scenario names for good test failure messages.
* 3502Kartik K. Agaram2016-10-151-2/+4
| | | | | | | | Better implementation of commit 3445: not requiring types for special variables in scenarios. It turned out that it wasn't working anytime we needed to call 'get' on a special variable inside a scenario. After moving that work to an earlier transform we can now use 'filesystem' without a type inside scenarios.
* 3500Kartik K. Agaram2016-10-151-2/+2
|
* 3438Kartik K. Agaram2016-10-041-16/+3
|
* 3390Kartik K. Agaram2016-09-171-10/+10
|
* 3389Kartik K. Agaram2016-09-171-2/+2
|
* 3379Kartik K. Agaram2016-09-171-8/+8
| | | | Can't use type abbreviations inside 'memory-should-contain'.
* 3377Kartik K. Agaram2016-09-171-8/+8
|
* 3374Kartik K. Agaram2016-09-161-2/+2
|
* 3273Kartik K. Agaram2016-08-281-2/+2
| | | | | | | | | | | Undo 3272. The trouble with creating a new section for constants is that there's no good place to order it since constants can be initialized using globals as well as vice versa. And I don't want to add constraints disallowing either side. Instead, a new plan: always declare constants in the Globals section using 'extern const' rather than just 'const', since otherwise constants implicitly have internal linkage (http://stackoverflow.com/questions/14894698/why-does-extern-const-int-n-not-work-as-expected)
* 3272Kartik K. Agaram2016-08-281-1/+1
| | | | | | Move global constants into their own section since we seem to be having trouble linking in 'extern const' variables when manually cleaving mu.cc into separate compilation units.
* 3259Kartik K. Agaram2016-08-261-2/+2
| | | | | | | | | | | Prefer preincrement operators wherever possible. Old versions of compilers used to be better at optimizing them. Even if we don't care about performance it's useful to make unary operators look like unary operators wherever possible, and to distinguish the 'statement form' which doesn't care about the value of the expression from the postincrement which usually increments as a side-effect in some larger computation (and so is worth avoiding except for some common idioms, or perhaps even there).
* 3256Kartik K. Agaram2016-08-261-2/+15
| | | | | Bugfix in filesystem creation. I'm sure there are other fake-filesystem bugs.
* 3239Kartik K. Agaram2016-08-211-1/+1
|
* 3233 - change how Mu escapes stringsKartik K. Agaram2016-08-201-6/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | Thanks Sam Putman for helping think through this idea. When you encounter a backslash, strip it out and pass through any following run of backslashes. If we 'escaped' a single following character like C, then the character '\' would be the same as: '\\' escaped once '\\\\' escaped twice '\\\\\\\\' escaped thrice (8 backslashes) ..and so on, the number of backslashes doubling each time. Instead, our approach is to make the character '\' the same as: '\\' escaped once '\\\' escaped twice '\\\\' escaped thrice ..and so on, the number of backslashes merely increasing by one each time. This approach only works as long as backslashes aren't also overloaded to create special characters. So Mu doesn't follow C's approach of overloading backslashes both to escape quote characters and also as a notation for unprintable characters like '\n'.
* 3232Kartik K. Agaram2016-08-201-1/+34
| | | | Support pipe characters in fake files. Still super ugly, though.
* 3229 - fake file systems using 'assume-filesystem'Kartik K. Agaram2016-08-201-0/+210
Built with Stephen Malina.
tle='Blame the previous revision' href='/akkartik/mu/blame/html/subx/052kernel_string_equal.subx.html?h=main&id=9d27e966b5e9bf1bd3da48f49d7e133d112a2bbe'>^
39d718af ^
14a38052 ^

ac07e589 ^
14a38052 ^

39d718af ^
14a38052 ^


39d718af ^
14a38052 ^
cf02c20b ^







ac07e589 ^
cf02c20b ^




ac07e589 ^
cf02c20b ^


ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^





ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^

ac07e589 ^
cf02c20b ^


ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^





ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^

ac07e589 ^
cf02c20b ^


ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^





ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^

ac07e589 ^
cf02c20b ^


ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^





ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^

ac07e589 ^
cf02c20b ^


ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^





ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^

ac07e589 ^
cf02c20b ^


ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^





ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^

ac07e589 ^
cf02c20b ^


ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^





ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^



ac07e589 ^
cf02c20b ^
ac07e589 ^
cf02c20b ^


5a2cb154 ^



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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325








                                                                                                      
                                                 

                       

                                                                                           
                    
                                     




                                  
                                                             
                             


                                                                           
































                                                                                 
                                                                                                                                                                     
                         
                                                                                                                  













                                                                                                                                                              

                                                


                                                                                                                                                                                                                             
                                         
                                                                                 

                                                                                                                                                                                                                   

                                                                                                                                                                                                                                                                                                                                                                                             
                                                                  
                                         

                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                     

                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                             





                                                                                                  
                                         
                                                                                           
                                                                                                             
                                                                                                   
                                                                                                            










                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                      

                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                  

                                                                                                                                                                                                                                                                                                                                                                                        


                                                                                                                  
                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                               
                                                                                                               
                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                         

                                                                                               
                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                   
                                                                                               




                                                                                         
                                                                                                  

                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                    

                                                                                                   
                                                                                                 


                                                                                            
                                                                                                  
                                                                    







                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                                              




                                                                                      
                                                                                                                                                                             


                                                                                                                                            
                                                                                                                                                                    
                                                                                           
                                                                                                                                    
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         





                                                                                                                                                           
                                                                                                                  
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         

                                                       
                                                                                                                                                                                 


                                                                                                                                               
                                                                                                                                                                    
                                                                                           
                                                                                                                                    
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         





                                                                                                                                                               
                                                                                                                  
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         

                                                       
                                                                                                                                                                        


                                                                                                                                              
                                                                                                                                                                   
                                                                                           
                                                                                                                                    
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         





                                                                                                                                                      
                                                                                                                  
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         

                                                       
                                                                                                                                                                          


                                                                                                                                              
                                                                                                                                                                   
                                                                                           
                                                                                                                                    
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         





                                                                                                                                                      
                                                                                                                  
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         

                                                       
                                                                                                                                                                        


                                                                                                                                           
                                                                                                                                                                   
                                                                                           
                                                                                                                                    
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         





                                                                                                                                                      
                                                                                                                  
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         

                                                       
                                                                                                                                                                          


                                                                                                                                             
                                                                                                                                                                   
                                                                                           
                                                                                                                                    
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         





                                                                                                                                                        
                                                                                                                  
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         

                                                       
                                                                                                                                                                         


                                                                                                                                               
                                                                                                                                                                   
                                                                                           
                                                                                                                                    
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         





                                                                                                                                                       
                                                                                                                  
                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                         



                                                       
                                                                                                                                                  
                                                     
                                                                                                                                                 


                                                                                                               



                                     
<!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 - subx/052kernel_string_equal.subx</title>
<meta name="Generator" content="Vim/8.0">
<meta name="plugin-version" content="vim7.4_v2">
<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; }
.Constant { color: #008787; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxTest { color: #5f8700; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.subxS2Comment { color: #8a8a8a; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
-->
</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;
  }
  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/subx/052kernel_string_equal.subx'>https://github.com/akkartik/mu/blob/master/subx/052kernel_string_equal.subx</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">  1 </span><span class="subxComment"># Checking null-terminated ascii strings.</span>
<span id="L2" class="LineNr">  2 </span><span class="subxComment">#</span>
<span id="L3" class="LineNr">  3 </span><span class="subxComment"># By default we create strings with a 4-byte length prefix rather than a null suffix.</span>
<span id="L4" class="LineNr">  4 </span><span class="subxComment"># However we still need null-prefixed strings when interacting with the Linux</span>
<span id="L5" class="LineNr">  5 </span><span class="subxComment"># kernel in a few places. This layer implements a function for comparing</span>
<span id="L6" class="LineNr">  6 </span><span class="subxComment"># a null-terminated 'kernel string' with a length-prefixed 'SubX string'.</span>
<span id="L7" class="LineNr">  7 </span><span class="subxComment">#</span>
<span id="L8" class="LineNr">  8 </span><span class="subxComment"># To run (from the subx directory):</span>
<span id="L9" class="LineNr">  9 </span><span class="subxComment">#   $ subx translate 05[0-2]*.subx -o /tmp/tmp52</span>
<span id="L10" class="LineNr"> 10 </span><span class="subxComment">#   $ subx run /tmp/tmp52  # runs a series of tests</span>
<span id="L11" class="LineNr"> 11 </span><span class="subxComment">#   ......  # all tests pass</span>
<span id="L12" class="LineNr"> 12 </span><span class="subxComment">#</span>
<span id="L13" class="LineNr"> 13 </span><span class="subxComment"># (We can't yet run the tests when given a &quot;test&quot; commandline argument,</span>
<span id="L14" class="LineNr"> 14 </span><span class="subxComment"># because checking for it would require the function being tested! Breakage</span>
<span id="L15" class="LineNr"> 15 </span><span class="subxComment"># would cause tests to not run, rather than to fail as we'd like.)</span>
<span id="L16" class="LineNr"> 16 </span>
<span id="L17" class="LineNr"> 17 </span>== code
<span id="L18" class="LineNr"> 18 </span><span class="subxComment">#   instruction                     effective address                                                   register    displacement    immediate</span>
<span id="L19" class="LineNr"> 19 </span><span class="subxS1Comment"># . op          subop               mod             rm32          base        index         scale       r32</span>
<span id="L20" class="LineNr"> 20 </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="L21" class="LineNr"> 21 </span>
<span id="L22" class="LineNr"> 22 </span><span class="subxComment"># main:</span>
<span id="L23" class="LineNr"> 23 </span>    e8/call  run-tests/disp32  <span class="subxComment"># 'run-tests' is a function created automatically by SubX. It calls all functions that start with 'test-'.</span>
<span id="L24" class="LineNr"> 24 </span>    <span class="subxComment"># syscall(exit, Num-test-failures)</span>
<span id="L25" class="LineNr"> 25 </span>    8b/copy                         0/mod/indirect  5/rm32/.disp32           <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/EBX   <span class="SpecialChar"><a href='051test.subx.html#L87'>Num-test-failures</a></span>/disp32          <span class="subxComment"># copy *Num-test-failures to EBX</span>
<span id="L26" class="LineNr"> 26 </span>    b8/copy-to-EAX  1/imm32/exit
<span id="L27" class="LineNr"> 27 </span>    cd/syscall  0x80/imm8
<span id="L28" class="LineNr"> 28 </span>
<span id="L29" class="LineNr"> 29 </span><span class="subxComment"># compare a null-terminated ascii string with a more idiomatic length-prefixed byte array</span>
<span id="L30" class="LineNr"> 30 </span><span class="subxComment"># reason for the name: the only place we should have null-terminated ascii strings is from commandline args</span>
<span id="L31" class="LineNr"> 31 </span><span class="subxFunction"><a href='052kernel_string_equal.subx.html#L31'>kernel-string-equal</a></span>:  <span class="subxComment"># s : null-terminated ascii string, benchmark : length-prefixed ascii string -&gt; EAX : boolean</span>
<span id="L32" class="LineNr"> 32 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L33" class="LineNr"> 33 </span>    55/push-EBP
<span id="L34" class="LineNr"> 34 </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="L35" class="LineNr"> 35 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L36" class="LineNr"> 36 </span>    51/push-ECX
<span id="L37" class="LineNr"> 37 </span>    52/push-EDX
<span id="L38" class="LineNr"> 38 </span>    53/push-EBX
<span id="L39" class="LineNr"> 39 </span>    56/push-ESI
<span id="L40" class="LineNr"> 40 </span>    57/push-EDI
<span id="L41" class="LineNr"> 41 </span>
<span id="L42" class="LineNr"> 42 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L43" class="LineNr"> 43 </span>    <span class="subxComment">#   initialize n = b-&gt;length</span>
<span id="L44" class="LineNr"> 44 </span>    <span class="subxComment">#   initialize s1 = s</span>
<span id="L45" class="LineNr"> 45 </span>    <span class="subxComment">#   initialize s2 = b-&gt;data</span>
<span id="L46" class="LineNr"> 46 </span>    <span class="subxComment">#   i = 0</span>
<span id="L47" class="LineNr"> 47 </span>    <span class="subxComment">#   for (i = 0; i &lt; n; ++n)</span>
<span id="L48" class="LineNr"> 48 </span>    <span class="subxComment">#     c1 = *s1</span>
<span id="L49" class="LineNr"> 49 </span>    <span class="subxComment">#     c2 = *s2</span>
<span id="L50" class="LineNr"> 50 </span>    <span class="subxComment">#     if c1 == 0</span>
<span id="L51" class="LineNr"> 51 </span>    <span class="subxComment">#       return false</span>
<span id="L52" class="LineNr"> 52 </span>    <span class="subxComment">#     if c1 != c2</span>
<span id="L53" class="LineNr"> 53 </span>    <span class="subxComment">#       return false</span>
<span id="L54" class="LineNr"> 54 </span>    <span class="subxComment">#   return *s1 == 0</span>
<span id="L55" class="LineNr"> 55 </span>    <span class="subxComment">#</span>
<span id="L56" class="LineNr"> 56 </span>    <span class="subxComment"># initialize s into EDI</span>
<span id="L57" class="LineNr"> 57 </span>    8b/copy                         1/mod/*+disp8   5/rm32/EBP   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          7/r32/EDI   8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(EBP+8) to EDI</span>
<span id="L58" class="LineNr"> 58 </span>    <span class="subxComment"># initialize benchmark length n into EDX</span>
<span id="L59" class="LineNr"> 59 </span>    8b/copy                         1/mod/*+disp8   5/rm32/EBP   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/EDX   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy *(EBP+12) to EDX</span>
<span id="L60" class="LineNr"> 60 </span>    8b/copy                         0/mod/indirect  2/rm32/EDX   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/EDX  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *EDX to EDX</span>
<span id="L61" class="LineNr"> 61 </span>    <span class="subxComment"># initialize benchmark data into ESI</span>
<span id="L62" class="LineNr"> 62 </span>    8b/copy                         1/mod/*+disp8   5/rm32/EBP   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          6/r32/ESI   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy *(EBP+12) to ESI</span>
<span id="L63" class="LineNr"> 63 </span>    81          0/subop/add         3/mod/direct    6/rm32/ESI   <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 ESI</span>
<span id="L64" class="LineNr"> 64 </span>    <span class="subxComment"># initialize loop counter i into ECX</span>
<span id="L65" class="LineNr"> 65 </span>    b9/copy-to-ECX  0/imm32/exit
<span id="L66" class="LineNr"> 66 </span>    <span class="subxComment"># while (i/ECX &lt; n/EDX)</span>
<span id="L67" class="LineNr"> 67 </span><span class="Constant">$kernel-string-equal:loop</span>:
<span id="L68" class="LineNr"> 68 </span>    39/compare                      3/mod/direct    1/rm32/ECX   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/EDX  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># compare ECX with EDX</span>
<span id="L69" class="LineNr"> 69 </span>    74/jump-if-equal  $kernel-string-equal:break/disp8
<span id="L70" class="LineNr"> 70 </span>    <span class="subxComment"># c1/EAX, c2/EBX = *s, *benchmark</span>
<span id="L71" class="LineNr"> 71 </span>    b8/copy-to-EAX  0/imm32
<span id="L72" class="LineNr"> 72 </span>    8a/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 byte at *EDI to lower byte of EAX</span>
<span id="L73" class="LineNr"> 73 </span>    bb/copy-to-EBX  0/imm32
<span id="L74" class="LineNr"> 74 </span>    8a/copy                         0/mod/indirect  6/rm32/ESI   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/EBX  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *ESI to lower byte of EBX</span>
<span id="L75" class="LineNr"> 75 </span>    <span class="subxComment"># if (c1 == 0) return false</span>
<span id="L76" class="LineNr"> 76 </span>    3d/compare-EAX  0/imm32
<span id="L77" class="LineNr"> 77 </span>    74/jump-if-equal  $kernel-string-equal:false/disp8
<span id="L78" class="LineNr"> 78 </span>    <span class="subxComment"># if (c1 != c2) return false</span>
<span id="L79" class="LineNr"> 79 </span>    39/compare                      3/mod/direct    0/rm32/EAX   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/EBX  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># compare EAX with EBX</span>
<span id="L80" class="LineNr"> 80 </span>    75/jump-if-not-equal  $kernel-string-equal:false/disp8
<span id="L81" class="LineNr"> 81 </span>    <span class="subxComment"># ++s1, ++s2, ++i</span>
<span id="L82" class="LineNr"> 82 </span>    41/inc-ECX
<span id="L83" class="LineNr"> 83 </span>    46/inc-ESI
<span id="L84" class="LineNr"> 84 </span>    47/inc-EDI
<span id="L85" class="LineNr"> 85 </span>    <span class="subxComment"># end while</span>
<span id="L86" class="LineNr"> 86 </span>    eb/jump  $kernel-string-equal:loop/disp8
<span id="L87" class="LineNr"> 87 </span><span class="Constant">$kernel-string-equal:break</span>:
<span id="L88" class="LineNr"> 88 </span>    <span class="subxComment"># if (*s/EDI == 0) return true</span>
<span id="L89" class="LineNr"> 89 </span>    b8/copy-to-EAX  0/imm32
<span id="L90" class="LineNr"> 90 </span>    8a/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 byte at *EDI to lower byte of EAX</span>
<span id="L91" class="LineNr"> 91 </span>    3d/compare-EAX  0/imm32
<span id="L92" class="LineNr"> 92 </span>    75/jump-if-not-equal  $kernel-string-equal:false/disp8
<span id="L93" class="LineNr"> 93 </span><span class="Constant">$kernel-string-equal:true</span>:
<span id="L94" class="LineNr"> 94 </span>    b8/copy-to-EAX  1/imm32
<span id="L95" class="LineNr"> 95 </span>    eb/jump  $kernel-string-equal:end/disp8
<span id="L96" class="LineNr"> 96 </span>    <span class="subxComment"># return false</span>
<span id="L97" class="LineNr"> 97 </span><span class="Constant">$kernel-string-equal:false</span>:
<span id="L98" class="LineNr"> 98 </span>    b8/copy-to-EAX  0/imm32
<span id="L99" class="LineNr"> 99 </span><span class="Constant">$kernel-string-equal:end</span>:
<span id="L100" class="LineNr">100 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L101" class="LineNr">101 </span>    5f/pop-to-EDI
<span id="L102" class="LineNr">102 </span>    5e/pop-to-ESI
<span id="L103" class="LineNr">103 </span>    5b/pop-to-EBX
<span id="L104" class="LineNr">104 </span>    5a/pop-to-EDX
<span id="L105" class="LineNr">105 </span>    59/pop-to-ECX
<span id="L106" class="LineNr">106 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L107" class="LineNr">107 </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="L108" class="LineNr">108 </span>    5d/pop-to-EBP
<span id="L109" class="LineNr">109 </span>    c3/return
<span id="L110" class="LineNr">110 </span>
<span id="L111" class="LineNr">111 </span><span class="subxH1Comment"># - tests</span>
<span id="L112" class="LineNr">112 </span>
<span id="L113" class="LineNr">113 </span><span class="subxTest"><a href='052kernel_string_equal.subx.html#L113'>test-compare-null-kernel-string-with-empty-array</a></span>:
<span id="L114" class="LineNr">114 </span>    <span class="subxComment"># EAX = kernel-string-equal(Null-kernel-string, &quot;&quot;)</span>
<span id="L115" class="LineNr">115 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L116" class="LineNr">116 </span>    68/push  <span class="Constant">&quot;&quot;</span>/imm32
<span id="L117" class="LineNr">117 </span>    68/push  <span class="SpecialChar"><a href='052kernel_string_equal.subx.html#L255'>Null-kernel-string</a></span>/imm32
<span id="L118" class="LineNr">118 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L119" class="LineNr">119 </span>    e8/call  <a href='052kernel_string_equal.subx.html#L31'>kernel-string-equal</a>/disp32
<span id="L120" class="LineNr">120 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L121" class="LineNr">121 </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="L122" class="LineNr">122 </span>    <span class="subxComment"># check-ints-equal(EAX, 1, msg)</span>
<span id="L123" class="LineNr">123 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L124" class="LineNr">124 </span>    68/push  <span class="Constant">&quot;F - test-compare-null-kernel-string-with-empty-array&quot;</span>/imm32
<span id="L125" class="LineNr">125 </span>    68/push  1/imm32/true
<span id="L126" class="LineNr">126 </span>    50/push-EAX
<span id="L127" class="LineNr">127 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L128" class="LineNr">128 </span>    e8/call  <a href='051test.subx.html#L24'>check-ints-equal</a>/disp32
<span id="L129" class="LineNr">129 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L130" class="LineNr">130 </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="L131" class="LineNr">131 </span>    c3/return
<span id="L132" class="LineNr">132 </span>
<span id="L133" class="LineNr">133 </span><span class="subxTest"><a href='052kernel_string_equal.subx.html#L133'>test-compare-null-kernel-string-with-non-empty-array</a></span>:
<span id="L134" class="LineNr">134 </span>    <span class="subxComment"># EAX = kernel-string-equal(Null-kernel-string, &quot;Abc&quot;)</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;Abc&quot;</span>/imm32
<span id="L137" class="LineNr">137 </span>    68/push  <span class="SpecialChar"><a href='052kernel_string_equal.subx.html#L255'>Null-kernel-string</a></span>/imm32
<span id="L138" class="LineNr">138 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L139" class="LineNr">139 </span>    e8/call  <a href='052kernel_string_equal.subx.html#L31'>kernel-string-equal</a>/disp32
<span id="L140" class="LineNr">140 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L141" class="LineNr">141 </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="L142" class="LineNr">142 </span>    <span class="subxComment"># check-ints-equal(EAX, 0, msg)</span>
<span id="L143" class="LineNr">143 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L144" class="LineNr">144 </span>    68/push  <span class="Constant">&quot;F - test-compare-null-kernel-string-with-non-empty-array&quot;</span>/imm32
<span id="L145" class="LineNr">145 </span>    68/push  0/imm32/false
<span id="L146" class="LineNr">146 </span>    50/push-EAX
<span id="L147" class="LineNr">147 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L148" class="LineNr">148 </span>    e8/call  <a href='051test.subx.html#L24'>check-ints-equal</a>/disp32
<span id="L149" class="LineNr">149 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L150" class="LineNr">150 </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="L151" class="LineNr">151 </span>    c3/return
<span id="L152" class="LineNr">152 </span>
<span id="L153" class="LineNr">153 </span><span class="subxTest"><a href='052kernel_string_equal.subx.html#L153'>test-compare-kernel-string-with-equal-array</a></span>:
<span id="L154" class="LineNr">154 </span>    <span class="subxComment"># EAX = kernel-string-equal(Abc-kernel-string, &quot;Abc&quot;)</span>
<span id="L155" class="LineNr">155 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L156" class="LineNr">156 </span>    68/push  <span class="Constant">&quot;Abc&quot;</span>/imm32
<span id="L157" class="LineNr">157 </span>    68/push  <span class="SpecialChar"><a href='052kernel_string_equal.subx.html#L257'>Abc-kernel-string</a></span>/imm32
<span id="L158" class="LineNr">158 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L159" class="LineNr">159 </span>    e8/call  <a href='052kernel_string_equal.subx.html#L31'>kernel-string-equal</a>/disp32
<span id="L160" class="LineNr">160 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L161" class="LineNr">161 </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="L162" class="LineNr">162 </span>    <span class="subxComment"># check-ints-equal(EAX, 1, msg)</span>
<span id="L163" class="LineNr">163 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L164" class="LineNr">164 </span>    68/push  <span class="Constant">&quot;F - test-compare-kernel-string-with-equal-array&quot;</span>/imm32
<span id="L165" class="LineNr">165 </span>    68/push  1/imm32/true
<span id="L166" class="LineNr">166 </span>    50/push-EAX
<span id="L167" class="LineNr">167 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L168" class="LineNr">168 </span>    e8/call  <a href='051test.subx.html#L24'>check-ints-equal</a>/disp32
<span id="L169" class="LineNr">169 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L170" class="LineNr">170 </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="L171" class="LineNr">171 </span>    c3/return
<span id="L172" class="LineNr">172 </span>
<span id="L173" class="LineNr">173 </span><span class="subxTest"><a href='052kernel_string_equal.subx.html#L173'>test-compare-kernel-string-with-inequal-array</a></span>:
<span id="L174" class="LineNr">174 </span>    <span class="subxComment"># EAX = kernel-string-equal(Abc-kernel-string, &quot;Adc&quot;)</span>
<span id="L175" class="LineNr">175 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L176" class="LineNr">176 </span>    68/push  <span class="Constant">&quot;Adc&quot;</span>/imm32
<span id="L177" class="LineNr">177 </span>    68/push  <span class="SpecialChar"><a href='052kernel_string_equal.subx.html#L257'>Abc-kernel-string</a></span>/imm32
<span id="L178" class="LineNr">178 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L179" class="LineNr">179 </span>    e8/call  <a href='052kernel_string_equal.subx.html#L31'>kernel-string-equal</a>/disp32
<span id="L180" class="LineNr">180 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L181" class="LineNr">181 </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="L182" class="LineNr">182 </span>    <span class="subxComment"># check-ints-equal(EAX, 0, msg)</span>
<span id="L183" class="LineNr">183 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L184" class="LineNr">184 </span>    68/push  <span class="Constant">&quot;F - test-compare-kernel-string-with-equal-array&quot;</span>/imm32
<span id="L185" class="LineNr">185 </span>    68/push  0/imm32/false
<span id="L186" class="LineNr">186 </span>    50/push-EAX
<span id="L187" class="LineNr">187 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L188" class="LineNr">188 </span>    e8/call  <a href='051test.subx.html#L24'>check-ints-equal</a>/disp32
<span id="L189" class="LineNr">189 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L190" class="LineNr">190 </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="L191" class="LineNr">191 </span>    c3/return
<span id="L192" class="LineNr">192 </span>
<span id="L193" class="LineNr">193 </span><span class="subxTest"><a href='052kernel_string_equal.subx.html#L193'>test-compare-kernel-string-with-empty-array</a></span>:
<span id="L194" class="LineNr">194 </span>    <span class="subxComment"># EAX = kernel-string-equal(Abc-kernel-string, &quot;&quot;)</span>
<span id="L195" class="LineNr">195 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L196" class="LineNr">196 </span>    68/push  <span class="Constant">&quot;&quot;</span>/imm32
<span id="L197" class="LineNr">197 </span>    68/push  <span class="SpecialChar"><a href='052kernel_string_equal.subx.html#L257'>Abc-kernel-string</a></span>/imm32
<span id="L198" class="LineNr">198 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L199" class="LineNr">199 </span>    e8/call  <a href='052kernel_string_equal.subx.html#L31'>kernel-string-equal</a>/disp32
<span id="L200" class="LineNr">200 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L201" class="LineNr">201 </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="L202" class="LineNr">202 </span>    <span class="subxComment"># check-ints-equal(EAX, 0, msg)</span>
<span id="L203" class="LineNr">203 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L204" class="LineNr">204 </span>    68/push  <span class="Constant">&quot;F - test-compare-kernel-string-with-equal-array&quot;</span>/imm32
<span id="L205" class="LineNr">205 </span>    68/push  0/imm32/false
<span id="L206" class="LineNr">206 </span>    50/push-EAX
<span id="L207" class="LineNr">207 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L208" class="LineNr">208 </span>    e8/call  <a href='051test.subx.html#L24'>check-ints-equal</a>/disp32
<span id="L209" class="LineNr">209 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L210" class="LineNr">210 </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="L211" class="LineNr">211 </span>    c3/return
<span id="L212" class="LineNr">212 </span>
<span id="L213" class="LineNr">213 </span><span class="subxTest"><a href='052kernel_string_equal.subx.html#L213'>test-compare-kernel-string-with-shorter-array</a></span>:
<span id="L214" class="LineNr">214 </span>    <span class="subxComment"># EAX = kernel-string-equal(Abc-kernel-string, &quot;Ab&quot;)</span>
<span id="L215" class="LineNr">215 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L216" class="LineNr">216 </span>    68/push  <span class="Constant">&quot;Ab&quot;</span>/imm32
<span id="L217" class="LineNr">217 </span>    68/push  <span class="SpecialChar"><a href='052kernel_string_equal.subx.html#L257'>Abc-kernel-string</a></span>/imm32
<span id="L218" class="LineNr">218 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L219" class="LineNr">219 </span>    e8/call  <a href='052kernel_string_equal.subx.html#L31'>kernel-string-equal</a>/disp32
<span id="L220" class="LineNr">220 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L221" class="LineNr">221 </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="L222" class="LineNr">222 </span>    <span class="subxComment"># check-ints-equal(EAX, 0, msg)</span>
<span id="L223" class="LineNr">223 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L224" class="LineNr">224 </span>    68/push  <span class="Constant">&quot;F - test-compare-kernel-string-with-shorter-array&quot;</span>/imm32
<span id="L225" class="LineNr">225 </span>    68/push  0/imm32/false
<span id="L226" class="LineNr">226 </span>    50/push-EAX
<span id="L227" class="LineNr">227 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L228" class="LineNr">228 </span>    e8/call  <a href='051test.subx.html#L24'>check-ints-equal</a>/disp32
<span id="L229" class="LineNr">229 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L230" class="LineNr">230 </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="L231" class="LineNr">231 </span>    c3/return
<span id="L232" class="LineNr">232 </span>
<span id="L233" class="LineNr">233 </span><span class="subxTest"><a href='052kernel_string_equal.subx.html#L233'>test-compare-kernel-string-with-longer-array</a></span>:
<span id="L234" class="LineNr">234 </span>    <span class="subxComment"># EAX = kernel-string-equal(Abc-kernel-string, &quot;Abcd&quot;)</span>
<span id="L235" class="LineNr">235 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L236" class="LineNr">236 </span>    68/push  <span class="Constant">&quot;Abcd&quot;</span>/imm32
<span id="L237" class="LineNr">237 </span>    68/push  <span class="SpecialChar"><a href='052kernel_string_equal.subx.html#L257'>Abc-kernel-string</a></span>/imm32
<span id="L238" class="LineNr">238 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L239" class="LineNr">239 </span>    e8/call  <a href='052kernel_string_equal.subx.html#L31'>kernel-string-equal</a>/disp32
<span id="L240" class="LineNr">240 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L241" class="LineNr">241 </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="L242" class="LineNr">242 </span>    <span class="subxComment"># check-ints-equal(EAX, 0, msg)</span>
<span id="L243" class="LineNr">243 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L244" class="LineNr">244 </span>    68/push  <span class="Constant">&quot;F - test-compare-kernel-string-with-longer-array&quot;</span>/imm32
<span id="L245" class="LineNr">245 </span>    68/push  0/imm32/false
<span id="L246" class="LineNr">246 </span>    50/push-EAX
<span id="L247" class="LineNr">247 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L248" class="LineNr">248 </span>    e8/call  <a href='051test.subx.html#L24'>check-ints-equal</a>/disp32
<span id="L249" class="LineNr">249 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L250" class="LineNr">250 </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="L251" class="LineNr">251 </span>    c3/return
<span id="L252" class="LineNr">252 </span>
<span id="L253" class="LineNr">253 </span>== data
<span id="L254" class="LineNr">254 </span>
<span id="L255" class="LineNr">255 </span><span class="SpecialChar"><a href='052kernel_string_equal.subx.html#L255'>Null-kernel-string</a></span>:
<span id="L256" class="LineNr">256 </span>    00/null
<span id="L257" class="LineNr">257 </span><span class="SpecialChar"><a href='052kernel_string_equal.subx.html#L257'>Abc-kernel-string</a></span>:
<span id="L258" class="LineNr">258 </span>    41/A 62/b 63/c 00/null
<span id="L259" class="LineNr">259 </span>
<span id="L260" class="LineNr">260 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->