diff --git a/html/subx/apps/crenshaw2-1.subx.html b/html/subx/apps/crenshaw2-1.subx.html
index b4e300ad..db1f08b6 100644
--- a/html/subx/apps/crenshaw2-1.subx.html
+++ b/html/subx/apps/crenshaw2-1.subx.html
@@ -93,606 +93,611 @@ if ('onhashchange' in window) {
30
31
32
- 33
- 34
- 35 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
- 36
- 37
- 38 81 7/subop/compare 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0/disp8 1/imm32
- 39 7e/jump-if-lesser-or-equal $run-main/disp8
- 40
- 41
- 42 68/push "test"/imm32
- 43 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x8/disp8
- 44
- 45 e8/call kernel-string-equal/disp32
- 46
- 47 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
- 48
- 49 3d/compare-EAX 1/imm32
- 50 75/jump-if-not-equal $run-main/disp8
- 51
- 52 e8/call run-tests/disp32
- 53
- 54 8b/copy 0/mod/indirect 5/rm32/.disp32 3/r32/EBX Num-test-failures/disp32
- 55 eb/jump $main:end/disp8
- 56 $run-main:
- 57
- 58
- 59 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 8/imm32
- 60 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none 0/r32/EAX
- 61
- 62
- 63 c7/copy 0/mod/direct 0/rm32/EAX 0/imm32
- 64
- 65
- 66 50/push-EAX/ed
- 67 68/push 2/imm32/stderr
- 68 68/push 1/imm32/stdout
- 69 68/push Stdin/imm32
- 70
- 71 e8/call compile/disp32
- 72
- 73 81 0/subop/add 3/mod/direct 4/rm32/ESP 0x10/imm32
- 74
- 75 bb/copy-to-EBX 0/imm32
- 76 $main:end:
- 77 b8/copy-to-EAX 1/imm32/exit
- 78 cd/syscall 0x80/imm8
- 79
- 80
- 81 compile:
- 82
- 83 55/push-EBP
- 84 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
- 85
- 86 50/push-EAX
- 87 51/push-ECX
- 88
- 89
- 90 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8
- 91
- 92 e8/call get-char/disp32
- 93
- 94 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
- 95
- 96
- 97
- 98
- 99 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 0x13/imm32
-100 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none 1/r32/ECX
-101
-102 c7/copy 1/mod/*+disp8 1/rm32/ECX 8/disp8 7/imm32
-103
-104
-105
-106 51/push-ECX
-107
-108 e8/call clear-stream/disp32
-109
-110 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-111
-112
-113 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x14/disp8
-114 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
-115 51/push-ECX/num
-116 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8
-117
-118 e8/call get-num/disp32
-119
-120 81 0/subop/add 3/mod/direct 4/rm32/ESP 0x10/imm32
-121
-122
-123
-124
-125
-126
-127
-128 68/push "bb/copy-to-EBX "/imm32
-129 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-130
-131 e8/call write/disp32
-132
-133 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-134
-135
-136 51/push-ECX/num
-137 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-138
-139 e8/call write-stream/disp32
-140
-141 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-142
-143
-144 68/push Newline/imm32
-145 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-146
-147 e8/call write/disp32
-148
-149 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-150
-151
-152 68/push "b8/copy-to-EAX 1/imm32/exit"/imm32
-153 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-154
-155 e8/call write/disp32
-156
-157 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-158
-159
-160 68/push Newline/imm32
-161 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-162
-163 e8/call write/disp32
-164
-165 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-166
-167
-168 68/push "cd/syscall 0x80/imm8"/imm32
-169 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-170
-171 e8/call write/disp32
-172
-173 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-174
-175
-176 68/push Newline/imm32
-177 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-178
-179 e8/call write/disp32
-180
-181 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-182
-183 59/pop-to-ECX
-184 58/pop-to-EAX
-185
-186 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
-187 5d/pop-to-EBP
-188 c3/return
-189
-190
-191
-192
-193 get-num:
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215 55/push-EBP
-216 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
-217
-218
-219
-220 ff 6/subop/push 0/mod/indirect 5/rm32/.disp32 Look/disp32
-221
-222 e8/call is-digit?/disp32
-223
-224 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-225
-226 3d/compare-EAX 0/imm32
-227 75/jump-if-not-equal $get-num:main/disp8
-228
-229
-230 68/push "integer"/imm32
-231 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
-232 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x14/disp8
-233
-234 e8/call expected/disp32
-235
-236 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
-237 $get-num:main:
-238
-239
-240 50/push-EAX
-241 51/push-ECX
-242 52/push-EDX
-243 53/push-EBX
-244 56/push-ESI
-245 57/push-EDI
-246
-247
-248 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 6/r32/ESI 8/disp8
-249
-250 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 7/r32/EDI 0xc/disp8
-251
-252 8b/copy 0/mod/indirect 7/rm32/EDI 1/r32/ECX
-253
-254 8b/copy 1/mod/*+disp8 7/rm32/EDI 2/r32/EDX 8/disp8
-255
-256 3b/compare 3/mod/direct 1/rm32/ECX 2/r32/EDX
-257 7d/jump-if-lesser $get-num:stage2/disp8
-258
-259
-260 68/push "get-num: too many digits in number"/imm32
-261 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
-262 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x14/disp8
-263
-264 e8/call error/disp32
-265
-266 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
-267 $get-num:stage2:
-268
-269 8d/copy-address 1/mod/*+disp8 4/rm32/sib 7/base/EDI 1/index/ECX 3/r32/EBX 0xc/disp8
-270 8b/copy 0/mod/indirect 5/rm32/.disp32 0/r32/EAX Look/disp32
-271 88/copy-byte 0/mod/indirect 3/rm32/EBX 0/r32/AL
-272
-273 41/increment-ECX
-274
-275
-276 56/push-ESI
-277
-278 e8/call get-char/disp32
-279
-280 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-281 $get-num:loop-end:
-282
-283 89/copy 0/mod/indirect 7/rm32/EDI 1/r32/ECX
-284
-285 5f/pop-to-EDI
-286 5e/pop-to-ESI
-287 5b/pop-to-EBX
-288 5a/pop-to-EDX
-289 59/pop-to-ECX
-290 58/pop-to-EAX
-291
-292 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
-293 5d/pop-to-EBP
-294 c3/return
-295
-296 test-get-num-reads-single-digit:
-297
-298
-299 55/push-EBP
-300 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
-301
-302
-303
-304 68/push _test-stream/imm32
-305
-306 e8/call clear-stream/disp32
-307
-308 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-309
-310
-311 b8/copy-to-EAX _test-buffered-file/imm32
-312 05/add-to-EAX 4/imm32
-313 50/push-EAX
-314
-315 e8/call clear-stream/disp32
-316
-317 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-318
-319
-320 68/push _test-output-stream/imm32
-321
-322 e8/call clear-stream/disp32
-323
-324 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-325
-326
-327 68/push _test-error-stream/imm32
-328
-329 e8/call clear-stream/disp32
-330
-331 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-332
-333
-334
-335 68/push "3"/imm32
-336 68/push _test-stream/imm32
-337
-338 e8/call write/disp32
-339
-340 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-341
-342
-343 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 8/imm32
-344 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none 0/r32/EAX
-345
-346
-347 68/push 0x10/imm32/nbytes-of-args-for-get-num
-348 50/push-EAX/ed
-349
-350 e8/call tailor-exit-descriptor/disp32
-351
-352 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-353
-354
-355
-356 68/push _test-buffered-file/imm32
-357
-358 e8/call get-char/disp32
-359
-360 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-361
-362
-363 50/push-EAX/ed
-364 68/push _test-error-stream/imm32
-365 68/push _test-output-stream/imm32
-366 68/push _test-buffered-file/imm32
-367
-368 e8/call get-num/disp32
-369
-370
-371 81 0/subop/add 3/mod/direct 4/rm32/ESP 0x10/imm32
-372
-373
-374 68/push "F - test-get-num-reads-single-digit"/imm32
-375 68/push 0x33/imm32
-376 b8/copy-to-EAX _test-output-stream/imm32
-377 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX 0xc/disp8
-378
-379 e8/call check-ints-equal/disp32
-380
-381 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
-382
-383 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-384 5d/pop-to-EBP
-385 c3/return
-386
-387 test-get-num-aborts-on-non-digit-in-Look:
-388
-389
-390 55/push-EBP
-391 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
-392
-393
-394
-395 68/push _test-stream/imm32
-396
-397 e8/call clear-stream/disp32
-398
-399 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-400
-401
-402 b8/copy-to-EAX _test-buffered-file/imm32
-403 05/add-to-EAX 4/imm32
-404 50/push-EAX
-405
-406 e8/call clear-stream/disp32
-407
-408 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-409
-410
-411 68/push _test-output-stream/imm32
-412
-413 e8/call clear-stream/disp32
-414
-415 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-416
-417
-418 68/push _test-error-stream/imm32
-419
-420 e8/call clear-stream/disp32
-421
-422 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-423
-424
-425
-426 68/push "3"/imm32
-427 68/push _test-stream/imm32
-428
-429 e8/call write/disp32
-430
-431 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-432
-433
-434 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 8/imm32
-435 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none 0/r32/EAX
-436
-437
-438 68/push 0x10/imm32/nbytes-of-args-for-get-num
-439 50/push-EAX/ed
-440
-441 e8/call tailor-exit-descriptor/disp32
-442
-443 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-444
-445
-446
-447 50/push-EAX/ed
-448 68/push _test-error-stream/imm32
-449 68/push _test-output-stream/imm32
-450 68/push _test-buffered-file/imm32
-451
-452 e8/call get-num/disp32
-453
-454
-455 81 0/subop/add 3/mod/direct 4/rm32/ESP 0x10/imm32
-456
-457
-458
-459 68/push "F - test-get-num-aborts-on-non-digit-in-Look"/imm32
-460 68/push 2/imm32
-461
-462 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX 4/disp8
-463
-464 e8/call check-ints-equal/disp32
-465
-466 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
-467
-468 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-469 5d/pop-to-EBP
-470 c3/return
-471
-472
-473
-474
-475 expected:
-476
-477 55/push-EBP
-478 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
-479
-480
-481 68/push "Error: "/imm32
-482 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-483
-484 e8/call write/disp32
-485
-486 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-487
-488
-489 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
-490 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-491
-492 e8/call write/disp32
-493
-494 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-495
-496
-497 68/push " expected"/imm32
-498 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-499
-500 e8/call write/disp32
-501
-502 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-503
-504
-505 68/push Newline/imm32
-506 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-507
-508 e8/call write/disp32
-509
-510 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-511
-512
-513 68/push 1/imm32
-514 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8
-515
-516 e8/call stop/disp32
-517
-518
-519 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
-520 5d/pop-to-EBP
-521 c3/return
-522
-523
-524 error:
-525
-526 55/push-EBP
-527 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
-528
-529
-530 68/push "Error: "/imm32
-531 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-532
-533 e8/call write/disp32
-534
-535 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-536
-537
-538 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
-539 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-540
-541 e8/call write/disp32
-542
-543 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-544
-545
-546 68/push Newline/imm32
-547 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
-548
-549 e8/call write/disp32
-550
-551 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
-552
-553
-554 68/push 1/imm32
-555 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8
-556
-557 e8/call stop/disp32
-558
-559
-560 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
-561 5d/pop-to-EBP
-562 c3/return
-563
-564
-565 get-char:
-566
-567 55/push-EBP
-568 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
-569
-570 50/push-EAX
-571
-572
-573 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x8/disp8
-574
-575 e8/call read-byte/disp32
-576
-577 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
-578
-579 89/copy 0/mod/indirect 5/rm32/.disp32 0/r32/EAX Look/disp32
-580
-581 58/pop-to-EAX
-582
-583 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
-584 5d/pop-to-EBP
-585 c3/return
-586
-587 is-digit?:
-588
-589 55/push-EBP
-590 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
-591
-592 b8/copy-to-EAX 0/imm32
-593
-594 81 7/subop/compare 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x8/disp8 0x30/imm32
-595 7c/jump-if-lesser $is-digit?:end/disp8
-596
-597 81 7/subop/compare 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x8/disp8 0x39/imm32
-598 7f/jump-if-greater $is-digit?:end/disp8
-599
-600 b8/copy-to-EAX 1/imm32
-601 $is-digit?:end:
-602
-603 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
-604 5d/pop-to-EBP
-605 c3/return
-606
-607 == data
-608
-609 Look:
-610 00 00 00 00
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
+ 40
+ 41
+ 42 81 7/subop/compare 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0/disp8 1/imm32
+ 43 7e/jump-if-lesser-or-equal $run-main/disp8
+ 44
+ 45
+ 46 68/push "test"/imm32
+ 47 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x8/disp8
+ 48
+ 49 e8/call kernel-string-equal/disp32
+ 50
+ 51 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+ 52
+ 53 3d/compare-EAX 1/imm32
+ 54 75/jump-if-not-equal $run-main/disp8
+ 55
+ 56 e8/call run-tests/disp32
+ 57 8b/copy 0/mod/indirect 5/rm32/.disp32 3/r32/EBX Num-test-failures/disp32
+ 58 eb/jump $main:end/disp8
+ 59 $run-main:
+ 60
+ 61
+ 62 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 8/imm32
+ 63 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none 0/r32/EAX
+ 64
+ 65
+ 66 c7/copy 0/mod/direct 0/rm32/EAX 0/imm32
+ 67
+ 68
+ 69 50/push-EAX/ed
+ 70 68/push 2/imm32/stderr
+ 71 68/push 1/imm32/stdout
+ 72 68/push Stdin/imm32
+ 73
+ 74 e8/call compile/disp32
+ 75
+ 76 81 0/subop/add 3/mod/direct 4/rm32/ESP 0x10/imm32
+ 77
+ 78 bb/copy-to-EBX 0/imm32
+ 79 $main:end:
+ 80 b8/copy-to-EAX 1/imm32/exit
+ 81 cd/syscall 0x80/imm8
+ 82
+ 83
+ 84 compile:
+ 85
+ 86 55/push-EBP
+ 87 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
+ 88
+ 89 50/push-EAX
+ 90 51/push-ECX
+ 91
+ 92
+ 93 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8
+ 94
+ 95 e8/call get-char/disp32
+ 96
+ 97 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+ 98
+ 99
+100
+101
+102
+103 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 0x13/imm32
+104 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none 1/r32/ECX
+105
+106
+107 c7/copy 1/mod/*+disp8 1/rm32/ECX 8/disp8 7/imm32
+108
+109
+110 51/push-ECX
+111
+112 e8/call clear-stream/disp32
+113
+114 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+115
+116
+117
+118 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x14/disp8
+119 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
+120 51/push-ECX/num
+121 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8
+122
+123 e8/call get-num/disp32
+124
+125 81 0/subop/add 3/mod/direct 4/rm32/ESP 0x10/imm32
+126
+127
+128
+129
+130
+131
+132
+133 68/push "bb/copy-to-EBX "/imm32
+134 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+135
+136 e8/call write/disp32
+137
+138 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+139
+140
+141 51/push-ECX/num
+142 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+143
+144 e8/call write-stream/disp32
+145
+146 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+147
+148
+149 68/push Newline/imm32
+150 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+151
+152 e8/call write/disp32
+153
+154 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+155
+156
+157 68/push "b8/copy-to-EAX 1/imm32/exit"/imm32
+158 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+159
+160 e8/call write/disp32
+161
+162 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+163
+164
+165 68/push Newline/imm32
+166 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+167
+168 e8/call write/disp32
+169
+170 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+171
+172
+173 68/push "cd/syscall 0x80/imm8"/imm32
+174 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+175
+176 e8/call write/disp32
+177
+178 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+179
+180
+181 68/push Newline/imm32
+182 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+183
+184 e8/call write/disp32
+185
+186 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+187
+188 59/pop-to-ECX
+189 58/pop-to-EAX
+190
+191 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
+192 5d/pop-to-EBP
+193 c3/return
+194
+195
+196
+197
+198 get-num:
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220 55/push-EBP
+221 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
+222
+223
+224
+225 ff 6/subop/push 0/mod/indirect 5/rm32/.disp32 Look/disp32
+226
+227 e8/call is-digit?/disp32
+228
+229 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+230
+231 3d/compare-EAX 0/imm32
+232 75/jump-if-not-equal $get-num:main/disp8
+233
+234
+235 68/push "integer"/imm32
+236 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
+237 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x14/disp8
+238
+239 e8/call expected/disp32
+240
+241 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
+242 $get-num:main:
+243
+244
+245 50/push-EAX
+246 51/push-ECX
+247 52/push-EDX
+248 53/push-EBX
+249 56/push-ESI
+250 57/push-EDI
+251
+252
+253 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 6/r32/ESI 8/disp8
+254
+255 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 7/r32/EDI 0xc/disp8
+256
+257 8b/copy 0/mod/indirect 7/rm32/EDI 1/r32/ECX
+258
+259 8b/copy 1/mod/*+disp8 7/rm32/EDI 2/r32/EDX 8/disp8
+260
+261 3b/compare 3/mod/direct 1/rm32/ECX 2/r32/EDX
+262 7d/jump-if-lesser $get-num:stage2/disp8
+263
+264
+265 68/push "get-num: too many digits in number"/imm32
+266 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
+267 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x14/disp8
+268
+269 e8/call error/disp32
+270
+271 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
+272 $get-num:stage2:
+273
+274 8d/copy-address 1/mod/*+disp8 4/rm32/sib 7/base/EDI 1/index/ECX 3/r32/EBX 0xc/disp8
+275 8b/copy 0/mod/indirect 5/rm32/.disp32 0/r32/EAX Look/disp32
+276 88/copy-byte 0/mod/indirect 3/rm32/EBX 0/r32/AL
+277
+278 41/increment-ECX
+279
+280
+281 56/push-ESI
+282
+283 e8/call get-char/disp32
+284
+285 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+286 $get-num:loop-end:
+287
+288 89/copy 0/mod/indirect 7/rm32/EDI 1/r32/ECX
+289
+290 5f/pop-to-EDI
+291 5e/pop-to-ESI
+292 5b/pop-to-EBX
+293 5a/pop-to-EDX
+294 59/pop-to-ECX
+295 58/pop-to-EAX
+296
+297 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
+298 5d/pop-to-EBP
+299 c3/return
+300
+301 test-get-num-reads-single-digit:
+302
+303
+304 55/push-EBP
+305 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
+306
+307
+308
+309 68/push _test-stream/imm32
+310
+311 e8/call clear-stream/disp32
+312
+313 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+314
+315
+316 b8/copy-to-EAX _test-buffered-file/imm32
+317 05/add-to-EAX 4/imm32
+318 50/push-EAX
+319
+320 e8/call clear-stream/disp32
+321
+322 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+323
+324
+325 68/push _test-output-stream/imm32
+326
+327 e8/call clear-stream/disp32
+328
+329 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+330
+331
+332 68/push _test-error-stream/imm32
+333
+334 e8/call clear-stream/disp32
+335
+336 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+337
+338
+339
+340 68/push "3"/imm32
+341 68/push _test-stream/imm32
+342
+343 e8/call write/disp32
+344
+345 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+346
+347
+348 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 8/imm32
+349 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none 0/r32/EAX
+350
+351
+352 68/push 0x10/imm32/nbytes-of-args-for-get-num
+353 50/push-EAX/ed
+354
+355 e8/call tailor-exit-descriptor/disp32
+356
+357 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+358
+359
+360
+361 68/push _test-buffered-file/imm32
+362
+363 e8/call get-char/disp32
+364
+365 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+366
+367
+368 50/push-EAX/ed
+369 68/push _test-error-stream/imm32
+370 68/push _test-output-stream/imm32
+371 68/push _test-buffered-file/imm32
+372
+373 e8/call get-num/disp32
+374
+375
+376 81 0/subop/add 3/mod/direct 4/rm32/ESP 0x10/imm32
+377
+378
+379 68/push "F - test-get-num-reads-single-digit"/imm32
+380 68/push 0x33/imm32
+381 b8/copy-to-EAX _test-output-stream/imm32
+382 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX 0xc/disp8
+383
+384 e8/call check-ints-equal/disp32
+385
+386 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
+387
+388 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+389 5d/pop-to-EBP
+390 c3/return
+391
+392 test-get-num-aborts-on-non-digit-in-Look:
+393
+394
+395 55/push-EBP
+396 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
+397
+398
+399
+400 68/push _test-stream/imm32
+401
+402 e8/call clear-stream/disp32
+403
+404 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+405
+406
+407 b8/copy-to-EAX _test-buffered-file/imm32
+408 05/add-to-EAX 4/imm32
+409 50/push-EAX
+410
+411 e8/call clear-stream/disp32
+412
+413 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+414
+415
+416 68/push _test-output-stream/imm32
+417
+418 e8/call clear-stream/disp32
+419
+420 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+421
+422
+423 68/push _test-error-stream/imm32
+424
+425 e8/call clear-stream/disp32
+426
+427 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+428
+429
+430
+431 68/push "3"/imm32
+432 68/push _test-stream/imm32
+433
+434 e8/call write/disp32
+435
+436 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+437
+438
+439 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 8/imm32
+440 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none 0/r32/EAX
+441
+442
+443 68/push 0x10/imm32/nbytes-of-args-for-get-num
+444 50/push-EAX/ed
+445
+446 e8/call tailor-exit-descriptor/disp32
+447
+448 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+449
+450
+451
+452 50/push-EAX/ed
+453 68/push _test-error-stream/imm32
+454 68/push _test-output-stream/imm32
+455 68/push _test-buffered-file/imm32
+456
+457 e8/call get-num/disp32
+458
+459
+460 81 0/subop/add 3/mod/direct 4/rm32/ESP 0x10/imm32
+461
+462
+463
+464 68/push "F - test-get-num-aborts-on-non-digit-in-Look"/imm32
+465 68/push 2/imm32
+466
+467 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX 4/disp8
+468
+469 e8/call check-ints-equal/disp32
+470
+471 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
+472
+473 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+474 5d/pop-to-EBP
+475 c3/return
+476
+477
+478
+479
+480 expected:
+481
+482 55/push-EBP
+483 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
+484
+485
+486 68/push "Error: "/imm32
+487 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+488
+489 e8/call write/disp32
+490
+491 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+492
+493
+494 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
+495 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+496
+497 e8/call write/disp32
+498
+499 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+500
+501
+502 68/push " expected"/imm32
+503 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+504
+505 e8/call write/disp32
+506
+507 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+508
+509
+510 68/push Newline/imm32
+511 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+512
+513 e8/call write/disp32
+514
+515 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+516
+517
+518 68/push 1/imm32
+519 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8
+520
+521 e8/call stop/disp32
+522
+523
+524 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
+525 5d/pop-to-EBP
+526 c3/return
+527
+528
+529 error:
+530
+531 55/push-EBP
+532 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
+533
+534
+535 68/push "Error: "/imm32
+536 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+537
+538 e8/call write/disp32
+539
+540 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+541
+542
+543 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x10/disp8
+544 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+545
+546 e8/call write/disp32
+547
+548 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+549
+550
+551 68/push Newline/imm32
+552 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
+553
+554 e8/call write/disp32
+555
+556 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
+557
+558
+559 68/push 1/imm32
+560 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8
+561
+562 e8/call stop/disp32
+563
+564
+565 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
+566 5d/pop-to-EBP
+567 c3/return
+568
+569
+570 get-char:
+571
+572 55/push-EBP
+573 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
+574
+575 50/push-EAX
+576
+577
+578 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x8/disp8
+579
+580 e8/call read-byte/disp32
+581
+582 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
+583
+584 89/copy 0/mod/indirect 5/rm32/.disp32 0/r32/EAX Look/disp32
+585
+586 58/pop-to-EAX
+587
+588 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
+589 5d/pop-to-EBP
+590 c3/return
+591
+592 is-digit?:
+593
+594 55/push-EBP
+595 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
+596
+597 b8/copy-to-EAX 0/imm32
+598
+599 81 7/subop/compare 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x8/disp8 0x30/imm32
+600 7c/jump-if-lesser $is-digit?:end/disp8
+601
+602 81 7/subop/compare 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x8/disp8 0x39/imm32
+603 7f/jump-if-greater $is-digit?:end/disp8
+604
+605 b8/copy-to-EAX 1/imm32
+606 $is-digit?:end:
+607
+608 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
+609 5d/pop-to-EBP
+610 c3/return
611
-612 _test-output-stream:
-613
-614 00 00 00 00
-615
-616 00 00 00 00
-617
-618 08 00 00 00
-619
-620 00 00 00 00 00 00 00 00
-621
-622 _test-error-stream:
-623
-624 00 00 00 00
-625
-626 00 00 00 00
-627
-628 08 00 00 00
-629
-630 00 00 00 00 00 00 00 00
-631
-632
+612 == data
+613
+614 Look:
+615 00 00 00 00
+616
+617 _test-output-stream:
+618
+619 00 00 00 00
+620
+621 00 00 00 00
+622
+623 08 00 00 00
+624
+625 00 00 00 00 00 00 00 00
+626
+627 _test-error-stream:
+628
+629 00 00 00 00
+630
+631 00 00 00 00
+632
+633 08 00 00 00
+634
+635 00 00 00 00 00 00 00 00
+636
+637