From 044b4130214f9dbe0d9d9990a3b9c3fa2f0a1e45 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Fri, 28 Dec 2018 02:07:11 -0800 Subject: [PATCH] 4879 --- html/subx/057stop.subx.html | 2 +- html/subx/065error-byte.subx.html | 2 +- html/subx/apps/crenshaw2-1.subx.html | 12 +++++------ html/subx/apps/crenshaw2-1b.subx.html | 16 +++++++-------- html/subx/apps/factorial.subx.html | 4 ++-- html/subx/apps/hex.subx.html | 28 +++++++++++++------------- subx/057stop.subx | 2 +- subx/065error-byte.subx | 2 +- subx/apps/crenshaw2-1 | Bin 7870 -> 7865 bytes subx/apps/crenshaw2-1.subx | 8 ++++---- subx/apps/crenshaw2-1b | Bin 8431 -> 8424 bytes subx/apps/crenshaw2-1b.subx | 12 +++++------ subx/apps/factorial | Bin 6761 -> 6760 bytes subx/apps/hex | Bin 11385 -> 11372 bytes subx/apps/hex.subx | 24 +++++++++++----------- 15 files changed, 56 insertions(+), 56 deletions(-) diff --git a/html/subx/057stop.subx.html b/html/subx/057stop.subx.html index cc58ac3e..704ce18a 100644 --- a/html/subx/057stop.subx.html +++ b/html/subx/057stop.subx.html @@ -196,7 +196,7 @@ if ('onhashchange' in window) { 131 # containing function returns we'll need a new exit descriptor. 132 # var ed/EAX : (address exit-descriptor) 133 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -134 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX +134 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 135 # Size the exit-descriptor precisely for the next call below, to _test-stop-1. 136 # tailor-exit-descriptor(ed, 4) 137 # . . push args diff --git a/html/subx/065error-byte.subx.html b/html/subx/065error-byte.subx.html index 7e3f437d..130c6da9 100644 --- a/html/subx/065error-byte.subx.html +++ b/html/subx/065error-byte.subx.html @@ -72,7 +72,7 @@ if ('onhashchange' in window) { 9 # manual test 10 #? # . var ed/EAX : exit-descriptor 11 #? 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 12 #? 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 12 #? 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 13 #? # . configure ed to really exit() 14 #? # . . ed->target = 0 15 #? c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32 # copy to *EAX diff --git a/html/subx/apps/crenshaw2-1.subx.html b/html/subx/apps/crenshaw2-1.subx.html index 5372b93c..d741c108 100644 --- a/html/subx/apps/crenshaw2-1.subx.html +++ b/html/subx/apps/crenshaw2-1.subx.html @@ -24,10 +24,10 @@ body { font-size:12pt; font-family: monospace; color: #aaaaaa; background-color: .subxS1Comment { color:#2d8cff; } .CommentedCode { color: #6c6c6c; } .Constant { color:#00a0a0; } -.subxFunction { color: #ff8700; } +.subxFunction { color: #af5f00; text-decoration: underline; } .subxMinorFunction { color: #875f5f; } .subxTest { color: #5f8700; } -.SpecialChar { color: #ff0000; } +.SpecialChar { color: #d70000; } .subxH1Comment { color:#00ffff; } --> @@ -126,7 +126,7 @@ if ('onhashchange' in window) { 60 # - otherwise read a program from stdin and emit its translation to stdout 61 # var ed/EAX : exit-descriptor 62 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 63 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 63 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 64 # configure ed to really exit() 65 # . ed->target = 0 66 c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32 # copy to *EAX @@ -168,7 +168,7 @@ if ('onhashchange' in window) { 102 # Add 12 bytes for 'read', 'write' and 'length' fields, for a total of 19 bytes, or 0x13 in hex. 103 # The stack pointer is no longer aligned, so dump_stack() can be misleading past this point. 104 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 0x13/imm32 # subtract from ESP -105 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX +105 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 106 # initialize the stream 107 # . num->length = 7 108 c7/copy 1/mod/*+disp8 1/rm32/ECX . . . . 8/disp8 7/imm32 # copy to *(ECX+8) @@ -415,7 +415,7 @@ if ('onhashchange' in window) { 349 # initialize exit-descriptor 'ed' for the call to 'get-num' below 350 # . var ed/EAX : exit-descriptor 351 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -352 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX +352 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 353 # . tailor-exit-descriptor(ed, 16) 354 # . . push args 355 68/push 0x10/imm32/nbytes-of-args-for-get-num @@ -506,7 +506,7 @@ if ('onhashchange' in window) { 440 # initialize exit-descriptor 'ed' for the call to 'get-num' below 441 # . var ed/EAX : (address exit-descriptor) 442 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -443 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX +443 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 444 # . tailor-exit-descriptor(ed, 16) 445 # . . push args 446 68/push 0x10/imm32/nbytes-of-args-for-get-num diff --git a/html/subx/apps/crenshaw2-1b.subx.html b/html/subx/apps/crenshaw2-1b.subx.html index 37e36821..041f573f 100644 --- a/html/subx/apps/crenshaw2-1b.subx.html +++ b/html/subx/apps/crenshaw2-1b.subx.html @@ -24,10 +24,10 @@ body { font-size:12pt; font-family: monospace; color: #aaaaaa; background-color: .subxS1Comment { color:#2d8cff; } .CommentedCode { color: #6c6c6c; } .Constant { color:#00a0a0; } -.subxFunction { color: #ff8700; } +.subxFunction { color: #af5f00; text-decoration: underline; } .subxMinorFunction { color: #875f5f; } .subxTest { color: #5f8700; } -.SpecialChar { color: #ff0000; } +.SpecialChar { color: #d70000; } .subxH1Comment { color:#00ffff; } --> @@ -126,7 +126,7 @@ if ('onhashchange' in window) { 60 # - otherwise read a program from stdin and emit its translation to stdout 61 # var ed/EAX : exit-descriptor 62 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 63 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 63 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 64 # configure ed to really exit() 65 # . ed->target = 0 66 c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32 # copy to *EAX @@ -168,7 +168,7 @@ if ('onhashchange' in window) { 102 # Add 12 bytes for 'read', 'write' and 'length' fields, for a total of 19 bytes, or 0x13 in hex. 103 # The stack pointer is no longer aligned, so dump_stack() can be misleading past this point. 104 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 0x13/imm32 # subtract from ESP -105 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX +105 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 106 # initialize the stream 107 # . num->length = 7 108 c7/copy 1/mod/*+disp8 1/rm32/ECX . . . . 8/disp8 7/imm32 # copy to *(ECX+8) @@ -432,7 +432,7 @@ if ('onhashchange' in window) { 366 # initialize exit-descriptor 'ed' for the call to 'get-num' below 367 # . var ed/EAX : exit-descriptor 368 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -369 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX +369 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 370 # . tailor-exit-descriptor(ed, 16) 371 # . . push args 372 68/push 0x10/imm32/nbytes-of-args-for-get-num @@ -523,7 +523,7 @@ if ('onhashchange' in window) { 457 # initialize exit-descriptor 'ed' for the call to 'get-num' below 458 # . var ed/EAX : (address exit-descriptor) 459 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -460 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX +460 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 461 # . tailor-exit-descriptor(ed, 16) 462 # . . push args 463 68/push 0x10/imm32/nbytes-of-args-for-get-num @@ -608,7 +608,7 @@ if ('onhashchange' in window) { 542 # initialize exit-descriptor 'ed' for the call to 'get-num' below 543 # . var ed/EAX : (address exit-descriptor) 544 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -545 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX +545 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 546 # . tailor-exit-descriptor(ed, 16) 547 # . . push args 548 68/push 0x10/imm32/nbytes-of-args-for-get-num @@ -699,7 +699,7 @@ if ('onhashchange' in window) { 633 # initialize exit-descriptor 'ed' for the call to 'get-num' below 634 # . var ed/EAX : (address exit-descriptor) 635 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -636 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX +636 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 637 # . tailor-exit-descriptor(ed, 16) 638 # . . push args 639 68/push 0x10/imm32/nbytes-of-args-for-get-num diff --git a/html/subx/apps/factorial.subx.html b/html/subx/apps/factorial.subx.html index 8383b297..026db18a 100644 --- a/html/subx/apps/factorial.subx.html +++ b/html/subx/apps/factorial.subx.html @@ -24,9 +24,9 @@ body { font-size:12pt; font-family: monospace; color: #aaaaaa; background-color: .subxS1Comment { color:#2d8cff; } .CommentedCode { color: #6c6c6c; } .Constant { color:#00a0a0; } -.subxFunction { color: #ff8700; } +.subxFunction { color: #af5f00; text-decoration: underline; } .subxTest { color: #5f8700; } -.SpecialChar { color: #ff0000; } +.SpecialChar { color: #d70000; } .subxH1Comment { color:#00ffff; } --> diff --git a/html/subx/apps/hex.subx.html b/html/subx/apps/hex.subx.html index a97b1f11..43714f63 100644 --- a/html/subx/apps/hex.subx.html +++ b/html/subx/apps/hex.subx.html @@ -24,10 +24,10 @@ body { font-size:12pt; font-family: monospace; color: #aaaaaa; background-color: .subxS1Comment { color:#2d8cff; } .CommentedCode { color: #6c6c6c; } .Constant { color:#00a0a0; } -.subxFunction { color: #ff8700; } +.subxFunction { color: #af5f00; text-decoration: underline; } .subxMinorFunction { color: #875f5f; } .subxTest { color: #5f8700; } -.SpecialChar { color: #ff0000; } +.SpecialChar { color: #d70000; } .subxH1Comment { color:#00ffff; } --> @@ -120,7 +120,7 @@ if ('onhashchange' in window) { 54 # - otherwise convert stdin 55 # var ed/EAX : exit-descriptor 56 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 57 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 57 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX 58 # configure ed to really exit() 59 # . ed->target = 0 60 c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32 # copy to *EAX @@ -317,7 +317,7 @@ if ('onhashchange' in window) { 251 # initialize exit-descriptor 'ed' for the call to 'convert-next-octet' below 252 # . var ed/ECX : exit-descriptor 253 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 254 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 254 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 255 # . tailor-exit-descriptor(ed, 12) 256 # . . push args 257 68/push 0xc/imm32/nbytes-of-args-for-convert-next-octet @@ -411,7 +411,7 @@ if ('onhashchange' in window) { 345 # initialize exit-descriptor 'ed' for the call to 'convert-next-octet' below 346 # . var ed/ECX : exit-descriptor 347 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 348 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 348 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 349 # . tailor-exit-descriptor(ed, 12) 350 # . . push args 351 68/push 0xc/imm32/nbytes-of-args-for-convert-next-octet @@ -513,7 +513,7 @@ if ('onhashchange' in window) { 447 # initialize exit-descriptor 'ed' for the call to 'convert-next-octet' below 448 # . var ed/ECX : exit-descriptor 449 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 450 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 450 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 451 # . tailor-exit-descriptor(ed, 12) 452 # . . push args 453 68/push 0xc/imm32/nbytes-of-args-for-convert-next-octet @@ -686,7 +686,7 @@ if ('onhashchange' in window) { 620 # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below 621 # . var ed/ECX : exit-descriptor 622 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 623 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 623 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 624 # . tailor-exit-descriptor(ed, 12) 625 # . . push args 626 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -788,7 +788,7 @@ if ('onhashchange' in window) { 722 # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below 723 # . var ed/ECX : exit-descriptor 724 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 725 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 725 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 726 # . tailor-exit-descriptor(ed, 12) 727 # . . push args 728 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -906,7 +906,7 @@ if ('onhashchange' in window) { 840 # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below 841 # . var ed/ECX : exit-descriptor 842 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 843 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 843 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 844 # . tailor-exit-descriptor(ed, 12) 845 # . . push args 846 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -1024,7 +1024,7 @@ if ('onhashchange' in window) { 958 # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below 959 # . var ed/ECX : exit-descriptor 960 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 961 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 961 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 962 # . tailor-exit-descriptor(ed, 12) 963 # . . push args 964 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -1142,7 +1142,7 @@ if ('onhashchange' in window) { 1076 # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below 1077 # . var ed/ECX : exit-descriptor 1078 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -1079 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX +1079 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 1080 # . tailor-exit-descriptor(ed, 12) 1081 # . . push args 1082 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -1244,7 +1244,7 @@ if ('onhashchange' in window) { 1178 # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below 1179 # . var ed/ECX : exit-descriptor 1180 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -1181 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX +1181 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 1182 # . tailor-exit-descriptor(ed, 12) 1183 # . . push args 1184 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -1338,7 +1338,7 @@ if ('onhashchange' in window) { 1272 # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below 1273 # . var ed/ECX : exit-descriptor 1274 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -1275 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX +1275 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 1276 # . tailor-exit-descriptor(ed, 12) 1277 # . . push args 1278 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -1440,7 +1440,7 @@ if ('onhashchange' in window) { 1374 # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below 1375 # . var ed/ECX : exit-descriptor 1376 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -1377 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX +1377 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX 1378 # . tailor-exit-descriptor(ed, 12) 1379 # . . push args 1380 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte diff --git a/subx/057stop.subx b/subx/057stop.subx index ff4a52b4..92938d53 100644 --- a/subx/057stop.subx +++ b/subx/057stop.subx @@ -131,7 +131,7 @@ test-stop-skips-returns-on-exit: # containing function returns we'll need a new exit descriptor. # var ed/EAX : (address exit-descriptor) 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX # Size the exit-descriptor precisely for the next call below, to _test-stop-1. # tailor-exit-descriptor(ed, 4) # . . push args diff --git a/subx/065error-byte.subx b/subx/065error-byte.subx index dd14df4c..13a828be 100644 --- a/subx/065error-byte.subx +++ b/subx/065error-byte.subx @@ -9,7 +9,7 @@ # manual test #? # . var ed/EAX : exit-descriptor #? 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -#? 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX +#? 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX #? # . configure ed to really exit() #? # . . ed->target = 0 #? c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32 # copy to *EAX diff --git a/subx/apps/crenshaw2-1 b/subx/apps/crenshaw2-1 index b7bdc148c33b89a239318b188f87b986436f1c36..383f1b1670c9cf6ff8186ed772f15bbcb5cf8c73 100755 GIT binary patch literal 7865 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 diff --git a/subx/apps/crenshaw2-1.subx b/subx/apps/crenshaw2-1.subx index 6feabcfb..abb9c9c2 100644 --- a/subx/apps/crenshaw2-1.subx +++ b/subx/apps/crenshaw2-1.subx @@ -60,7 +60,7 @@ $run-main: # - otherwise read a program from stdin and emit its translation to stdout # var ed/EAX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX # configure ed to really exit() # . ed->target = 0 c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32 # copy to *EAX @@ -102,7 +102,7 @@ compile: # in : (address buffered-file), out : fd or (address stream), err : fd # Add 12 bytes for 'read', 'write' and 'length' fields, for a total of 19 bytes, or 0x13 in hex. # The stack pointer is no longer aligned, so dump_stack() can be misleading past this point. 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 0x13/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # initialize the stream # . num->length = 7 c7/copy 1/mod/*+disp8 1/rm32/ECX . . . . 8/disp8 7/imm32 # copy to *(ECX+8) @@ -349,7 +349,7 @@ test-get-num-reads-single-digit: # initialize exit-descriptor 'ed' for the call to 'get-num' below # . var ed/EAX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX # . tailor-exit-descriptor(ed, 16) # . . push args 68/push 0x10/imm32/nbytes-of-args-for-get-num @@ -440,7 +440,7 @@ test-get-num-aborts-on-non-digit-in-Look: # initialize exit-descriptor 'ed' for the call to 'get-num' below # . var ed/EAX : (address exit-descriptor) 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX # . tailor-exit-descriptor(ed, 16) # . . push args 68/push 0x10/imm32/nbytes-of-args-for-get-num diff --git a/subx/apps/crenshaw2-1b b/subx/apps/crenshaw2-1b index 6f05f0f6771c428ffe109f3943d48b266a358749..4989d59e33d91395cece0da9f56a2f95f3e2c8af 100755 GIT binary patch literal 8424 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 = 0 c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32 # copy to *EAX @@ -102,7 +102,7 @@ compile: # in : (address buffered-file), out : fd or (address stream), err : fd # Add 12 bytes for 'read', 'write' and 'length' fields, for a total of 19 bytes, or 0x13 in hex. # The stack pointer is no longer aligned, so dump_stack() can be misleading past this point. 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 0x13/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # initialize the stream # . num->length = 7 c7/copy 1/mod/*+disp8 1/rm32/ECX . . . . 8/disp8 7/imm32 # copy to *(ECX+8) @@ -366,7 +366,7 @@ test-get-num-reads-single-digit: # initialize exit-descriptor 'ed' for the call to 'get-num' below # . var ed/EAX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX # . tailor-exit-descriptor(ed, 16) # . . push args 68/push 0x10/imm32/nbytes-of-args-for-get-num @@ -457,7 +457,7 @@ test-get-num-aborts-on-non-digit-in-Look: # initialize exit-descriptor 'ed' for the call to 'get-num' below # . var ed/EAX : (address exit-descriptor) 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX # . tailor-exit-descriptor(ed, 16) # . . push args 68/push 0x10/imm32/nbytes-of-args-for-get-num @@ -542,7 +542,7 @@ test-get-num-reads-multiple-digits: # initialize exit-descriptor 'ed' for the call to 'get-num' below # . var ed/EAX : (address exit-descriptor) 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX # . tailor-exit-descriptor(ed, 16) # . . push args 68/push 0x10/imm32/nbytes-of-args-for-get-num @@ -633,7 +633,7 @@ test-get-num-reads-multiple-digits-followed-by-nondigit: # initialize exit-descriptor 'ed' for the call to 'get-num' below # . var ed/EAX : (address exit-descriptor) 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX # . tailor-exit-descriptor(ed, 16) # . . push args 68/push 0x10/imm32/nbytes-of-args-for-get-num diff --git a/subx/apps/factorial b/subx/apps/factorial index 1222b82378d7ef7bc5483986cfdd0f8a0dbc4b61..d4575e16412d5ec1e81c1e7406ffba350f6150bb 100755 GIT binary patch literal 6760 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 Wcsd*Jah;y+Sg`5DicnypFZ@4HdoEM} diff --git a/subx/apps/hex.subx b/subx/apps/hex.subx index e88bfb55..c544a27c 100644 --- a/subx/apps/hex.subx +++ b/subx/apps/hex.subx @@ -54,7 +54,7 @@ $run-main: # - otherwise convert stdin # var ed/EAX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX . . # copy ESP to EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 4/r32/ESP . . # copy ESP to EAX # configure ed to really exit() # . ed->target = 0 c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32 # copy to *EAX @@ -251,7 +251,7 @@ test-convert-next-octet: # initialize exit-descriptor 'ed' for the call to 'convert-next-octet' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-convert-next-octet @@ -345,7 +345,7 @@ test-convert-next-octet-handles-eof: # initialize exit-descriptor 'ed' for the call to 'convert-next-octet' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-convert-next-octet @@ -447,7 +447,7 @@ test-convert-next-octet-aborts-on-single-hex-byte: # initialize exit-descriptor 'ed' for the call to 'convert-next-octet' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-convert-next-octet @@ -620,7 +620,7 @@ test-scan-next-byte: # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -722,7 +722,7 @@ test-scan-next-byte-skips-whitespace: # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -840,7 +840,7 @@ test-scan-next-byte-skips-comment: # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -958,7 +958,7 @@ test-scan-next-byte-skips-comment-and-whitespace: # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -1076,7 +1076,7 @@ test-scan-next-byte-skips-whitespace-and-comment: # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -1178,7 +1178,7 @@ test-scan-next-byte-reads-final-byte: # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -1272,7 +1272,7 @@ test-scan-next-byte-handles-eof: # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte @@ -1374,7 +1374,7 @@ test-scan-next-byte-aborts-on-invalid-byte: # initialize exit-descriptor 'ed' for the call to 'scan-next-byte' below # . var ed/ECX : exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP - 8d/copy-address 0/mod/indirect 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX . . # copy ESP to ECX + 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX # . tailor-exit-descriptor(ed, 12) # . . push args 68/push 0xc/imm32/nbytes-of-args-for-scan-next-byte