https://github.com/akkartik/mu/blob/main/linux/103kernel-string-equal.subx
  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 == code
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 kernel-string-equal?:  
 32     
 33     
 34     
 35     
 36     
 37     
 38     
 39     
 40     
 41     
 42     
 43     
 44     
 45     
 46     
 47     
 48     
 49     
 50     
 51     
 52     
 53     
 54     55/push-ebp
 55     89/copy                         3/mod/direct    5/rm32/ebp    .           .             .           4/r32/esp   .               .                 
 56     
 57     51/push-ecx
 58     52/push-edx
 59     53/push-ebx
 60     56/push-esi
 61     57/push-edi
 62     
 63     8b/copy                         1/mod/*+disp8   5/rm32/ebp    .           .             .           7/r32/edi   8/disp8         .                 
 64     
 65     8b/copy                         1/mod/*+disp8   5/rm32/ebp    .           .             .           2/r32/edx   0xc/disp8       .                 
 66     8b/copy                         0/mod/indirect  2/rm32/edx    .           .             .           2/r32/edx   .               .                 
 67     
 68     8b/copy                         1/mod/*+disp8   5/rm32/ebp    .           .             .           6/r32/esi   0xc/disp8       .                 
 69     81          0/subop/add         3/mod/direct    6/rm32/esi    .           .             .           .           .               4/imm32           
 70     
 71     b9/copy-to-ecx  0/imm32/exit
 72     
 73     b8/copy-to-eax  0/imm32
 74     
 75     bb/copy-to-ebx  0/imm32
 76 $kernel-string-equal?:loop:
 77     
 78     39/compare                      3/mod/direct    1/rm32/ecx    .           .             .           2/r32/edx   .               .                 
 79     7d/jump-if->=  $kernel-string-equal?:break/disp8
 80     
 81     8a/copy-byte                    0/mod/indirect  7/rm32/edi    .           .             .           0/r32/AL    .               .                 
 82     
 83     8a/copy-byte                    0/mod/indirect  6/rm32/esi    .           .             .           3/r32/BL    .               .                 
 84     
 85     3d/compare-eax-and  0/imm32/null
 86     74/jump-if-=  $kernel-string-equal?:false/disp8
 87     
 88     39/compare                      3/mod/direct    0/rm32/eax    .           .             .           3/r32/ebx   .               .                 
 89     75/jump-if-!=  $kernel-string-equal?:false/disp8
 90     
 91     41/increment-ecx
 92     
 93     47/increment-edi
 94     
 95     46/increment-esi
 96     eb/jump  $kernel-string-equal?:loop/disp8
 97 $kernel-string-equal?:break:
 98     
 99     8a/copy-byte                    0/mod/indirect  7/rm32/edi    .           .             .           0/r32/AL    .               .                 
100     3d/compare-eax-and  0/imm32/null
101     75/jump-if-!=  $kernel-string-equal?:false/disp8
102 $kernel-string-equal?:true:
103     b8/copy-to-eax  1/imm32
104     eb/jump  $kernel-string-equal?:end/disp8
105 $kernel-string-equal?:false:
106     b8/copy-to-eax  0/imm32
107 $kernel-string-equal?:end:
108     
109     5f/pop-to-edi
110     5e/pop-to-esi
111     5b/pop-to-ebx
112     5a/pop-to-edx
113     59/pop-to-ecx
114     
115     89/copy                         3/mod/direct    4/rm32/esp    .           .             .           5/r32/ebp   .               .                 
116     5d/pop-to-ebp
117     c3/return
118 
119 
120 
121 test-compare-null-kernel-string-with-empty-array:
122     
123     
124     68/push  ""/imm32
125     68/push  Null-kernel-string/imm32
126     
127     e8/call  kernel-string-equal?/disp32
128     
129     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           
130     
131     
132     68/push  "F - test-compare-null-kernel-string-with-empty-array"/imm32
133     68/push  1/imm32/true
134     50/push-eax
135     
136     e8/call  check-ints-equal/disp32
137     
138     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0xc/imm32         
139     c3/return
140 
141 test-compare-null-kernel-string-with-non-empty-array:
142     
143     
144     68/push  "Abc"/imm32
145     68/push  Null-kernel-string/imm32
146     
147     e8/call  kernel-string-equal?/disp32
148     
149     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           
150     
151     
152     68/push  "F - test-compare-null-kernel-string-with-non-empty-array"/imm32
153     68/push  0/imm32/false
154     50/push-eax
155     
156     e8/call  check-ints-equal/disp32
157     
158     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0xc/imm32         
159     c3/return
160 
161 test-compare-kernel-string-with-equal-array:
162     
163     
164     68/push  "Abc"/imm32
165     68/push  _test-Abc-kernel-string/imm32
166     
167     e8/call  kernel-string-equal?/disp32
168     
169     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           
170     
171     
172     68/push  "F - test-compare-kernel-string-with-equal-array"/imm32
173     68/push  1/imm32/true
174     50/push-eax
175     
176     e8/call  check-ints-equal/disp32
177     
178     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0xc/imm32         
179     c3/return
180 
181 test-compare-kernel-string-with-inequal-array:
182     
183     
184     68/push  "Adc"/imm32
185     68/push  _test-Abc-kernel-string/imm32
186     
187     e8/call  kernel-string-equal?/disp32
188     
189     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           
190     
191     
192     68/push  "F - test-compare-kernel-string-with-equal-array"/imm32
193     68/push  0/imm32/false
194     50/push-eax
195     
196     e8/call  check-ints-equal/disp32
197     
198     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0xc/imm32         
199     c3/return
200 
201 test-compare-kernel-string-with-empty-array:
202     
203     
204     68/push  ""/imm32
205     68/push  _test-Abc-kernel-string/imm32
206     
207     e8/call  kernel-string-equal?/disp32
208     
209     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           
210     
211     
212     68/push  "F - test-compare-kernel-string-with-equal-array"/imm32
213     68/push  0/imm32/false
214     50/push-eax
215     
216     e8/call  check-ints-equal/disp32
217     
218     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0xc/imm32         
219     c3/return
220 
221 test-compare-kernel-string-with-shorter-array:
222     
223     
224     68/push  "Ab"/imm32
225     68/push  _test-Abc-kernel-string/imm32
226     
227     e8/call  kernel-string-equal?/disp32
228     
229     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           
230     
231     
232     68/push  "F - test-compare-kernel-string-with-shorter-array"/imm32
233     68/push  0/imm32/false
234     50/push-eax
235     
236     e8/call  check-ints-equal/disp32
237     
238     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0xc/imm32         
239     c3/return
240 
241 test-compare-kernel-string-with-longer-array:
242     
243     
244     68/push  "Abcd"/imm32
245     68/push  _test-Abc-kernel-string/imm32
246     
247     e8/call  kernel-string-equal?/disp32
248     
249     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           
250     
251     
252     68/push  "F - test-compare-kernel-string-with-longer-array"/imm32
253     68/push  0/imm32/false
254     50/push-eax
255     
256     e8/call  check-ints-equal/disp32
257     
258     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0xc/imm32         
259     c3/return
260 
261 == data
262 
263 Null-kernel-string:  
264     00/null
265 
266 _test-Abc-kernel-string:  
267     41/A 62/b 63/c 00/null
268 
269