diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-06-21 17:13:21 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-06-21 17:13:21 -0700 |
commit | 47fe226b7e5841d25b3392f40bb3698d405e39f2 (patch) | |
tree | b307579d14ed0dbd72b7d59f45c23838ebb7f05a /html/apps/pack.subx.html | |
parent | 6bfb565819288770eea9b0cfe1f7a44abd8a45d1 (diff) | |
download | mu-47fe226b7e5841d25b3392f40bb3698d405e39f2.tar.gz |
6571
Diffstat (limited to 'html/apps/pack.subx.html')
-rw-r--r-- | html/apps/pack.subx.html | 549 |
1 files changed, 308 insertions, 241 deletions
diff --git a/html/apps/pack.subx.html b/html/apps/pack.subx.html index a181b332..308f2031 100644 --- a/html/apps/pack.subx.html +++ b/html/apps/pack.subx.html @@ -2121,7 +2121,7 @@ if ('onhashchange' in window) { <span id="L2422" class="LineNr">2422 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2423" class="LineNr">2423 </span> 51/push-ecx <span id="L2424" class="LineNr">2424 </span> <span class="subxS2Comment"># . . call</span> -<span id="L2425" class="LineNr">2425 </span> e8/call <a href='pack.subx.html#L5831'>parse-datum-of-word</a>/disp32 +<span id="L2425" class="LineNr">2425 </span> e8/call <a href='pack.subx.html#L5923'>parse-datum-of-word</a>/disp32 <span id="L2426" class="LineNr">2426 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L2427" class="LineNr">2427 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2428" class="LineNr">2428 </span> <span class="subxS1Comment"># . mod = eax</span> @@ -2149,7 +2149,7 @@ if ('onhashchange' in window) { <span id="L2450" class="LineNr">2450 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2451" class="LineNr">2451 </span> 51/push-ecx <span id="L2452" class="LineNr">2452 </span> <span class="subxS2Comment"># . . call</span> -<span id="L2453" class="LineNr">2453 </span> e8/call <a href='pack.subx.html#L5831'>parse-datum-of-word</a>/disp32 +<span id="L2453" class="LineNr">2453 </span> e8/call <a href='pack.subx.html#L5923'>parse-datum-of-word</a>/disp32 <span id="L2454" class="LineNr">2454 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L2455" class="LineNr">2455 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2456" class="LineNr">2456 </span> <span class="subxS1Comment"># . rm32 = eax</span> @@ -2177,7 +2177,7 @@ if ('onhashchange' in window) { <span id="L2478" class="LineNr">2478 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2479" class="LineNr">2479 </span> 51/push-ecx <span id="L2480" class="LineNr">2480 </span> <span class="subxS2Comment"># . . call</span> -<span id="L2481" class="LineNr">2481 </span> e8/call <a href='pack.subx.html#L5831'>parse-datum-of-word</a>/disp32 +<span id="L2481" class="LineNr">2481 </span> e8/call <a href='pack.subx.html#L5923'>parse-datum-of-word</a>/disp32 <span id="L2482" class="LineNr">2482 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L2483" class="LineNr">2483 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2484" class="LineNr">2484 </span> <span class="subxS1Comment"># . r32 = eax</span> @@ -2205,7 +2205,7 @@ if ('onhashchange' in window) { <span id="L2506" class="LineNr">2506 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2507" class="LineNr">2507 </span> 51/push-ecx <span id="L2508" class="LineNr">2508 </span> <span class="subxS2Comment"># . . call</span> -<span id="L2509" class="LineNr">2509 </span> e8/call <a href='pack.subx.html#L5831'>parse-datum-of-word</a>/disp32 +<span id="L2509" class="LineNr">2509 </span> e8/call <a href='pack.subx.html#L5923'>parse-datum-of-word</a>/disp32 <span id="L2510" class="LineNr">2510 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L2511" class="LineNr">2511 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2512" class="LineNr">2512 </span> <span class="subxS1Comment"># . r32 = eax</span> @@ -2275,7 +2275,7 @@ if ('onhashchange' in window) { <span id="L2576" class="LineNr">2576 </span> <span class="subxComment"># has-sib? = true</span> <span id="L2577" class="LineNr">2577 </span> <span class="subxComment"># if has-sib?</span> <span id="L2578" class="LineNr">2578 </span> <span class="subxComment"># var sib = scale & 0b11</span> -<span id="L2579" class="LineNr">2579 </span> <span class="subxComment"># sib <<= 2</span> +<span id="L2579" class="LineNr">2579 </span> <span class="subxComment"># sib <<= 3</span> <span id="L2580" class="LineNr">2580 </span> <span class="subxComment"># sib |= index & 0b111</span> <span id="L2581" class="LineNr">2581 </span> <span class="subxComment"># sib <<= 3</span> <span id="L2582" class="LineNr">2582 </span> <span class="subxComment"># sib |= base & 0b111</span> @@ -2366,7 +2366,7 @@ if ('onhashchange' in window) { <span id="L2731" class="LineNr">2731 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2732" class="LineNr">2732 </span> 51/push-ecx <span id="L2733" class="LineNr">2733 </span> <span class="subxS2Comment"># . . call</span> -<span id="L2734" class="LineNr">2734 </span> e8/call <a href='pack.subx.html#L5831'>parse-datum-of-word</a>/disp32 +<span id="L2734" class="LineNr">2734 </span> e8/call <a href='pack.subx.html#L5923'>parse-datum-of-word</a>/disp32 <span id="L2735" class="LineNr">2735 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L2736" class="LineNr">2736 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2737" class="LineNr">2737 </span> <span class="subxS1Comment"># . scale = eax</span> @@ -2394,7 +2394,7 @@ if ('onhashchange' in window) { <span id="L2759" class="LineNr">2759 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2760" class="LineNr">2760 </span> 51/push-ecx <span id="L2761" class="LineNr">2761 </span> <span class="subxS2Comment"># . . call</span> -<span id="L2762" class="LineNr">2762 </span> e8/call <a href='pack.subx.html#L5831'>parse-datum-of-word</a>/disp32 +<span id="L2762" class="LineNr">2762 </span> e8/call <a href='pack.subx.html#L5923'>parse-datum-of-word</a>/disp32 <span id="L2763" class="LineNr">2763 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L2764" class="LineNr">2764 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2765" class="LineNr">2765 </span> <span class="subxS1Comment"># . base = eax</span> @@ -2422,7 +2422,7 @@ if ('onhashchange' in window) { <span id="L2787" class="LineNr">2787 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2788" class="LineNr">2788 </span> 51/push-ecx <span id="L2789" class="LineNr">2789 </span> <span class="subxS2Comment"># . . call</span> -<span id="L2790" class="LineNr">2790 </span> e8/call <a href='pack.subx.html#L5831'>parse-datum-of-word</a>/disp32 +<span id="L2790" class="LineNr">2790 </span> e8/call <a href='pack.subx.html#L5923'>parse-datum-of-word</a>/disp32 <span id="L2791" class="LineNr">2791 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L2792" class="LineNr">2792 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2793" class="LineNr">2793 </span> <span class="subxS1Comment"># . index = eax</span> @@ -2439,7 +2439,7 @@ if ('onhashchange' in window) { <span id="L2804" class="LineNr">2804 </span> <span class="subxComment"># var sib/ebx: byte = scale & 0b11</span> <span id="L2805" class="LineNr">2805 </span> 81 4/subop/and 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/imm32/0b11 <span class="subxComment"># bitwise and of ebx</span> <span id="L2806" class="LineNr">2806 </span> <span class="subxComment"># sib <<= 2</span> -<span id="L2807" class="LineNr">2807 </span> c1/shift 4/subop/left 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/imm8 <span class="subxComment"># shift ebx left by 2 bits</span> +<span id="L2807" class="LineNr">2807 </span> c1/shift 4/subop/left 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/imm8 <span class="subxComment"># shift ebx left by 3 bits</span> <span id="L2808" class="LineNr">2808 </span> <span class="subxComment"># sib |= index & 0b111</span> <span id="L2809" class="LineNr">2809 </span> 81 4/subop/and 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 7/imm32/0b111 <span class="subxComment"># bitwise and of edi</span> <span id="L2810" class="LineNr">2810 </span> 09/or 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 7/r32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># ebx = bitwise OR with edi</span> @@ -4012,8 +4012,8 @@ if ('onhashchange' in window) { <span id="L4905" class="LineNr">4905 </span> 5d/pop-to-ebp <span id="L4906" class="LineNr">4906 </span> c3/return <span id="L4907" class="LineNr">4907 </span> -<span id="L4908" class="LineNr">4908 </span><span class="subxTest">test-convert-instruction-emits-sib-byte-with-missing-base</span>: -<span id="L4909" class="LineNr">4909 </span> <span class="subxComment"># pack index and scale operands into SIB byte</span> +<span id="L4908" class="LineNr">4908 </span><span class="subxTest">test-convert-instruction-emits-scale</span>: +<span id="L4909" class="LineNr">4909 </span> <span class="subxComment"># pack base, index and scale operands into SIB byte</span> <span id="L4910" class="LineNr">4910 </span> <span class="subxS1Comment"># . prologue</span> <span id="L4911" class="LineNr">4911 </span> 55/push-ebp <span id="L4912" class="LineNr">4912 </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> @@ -4040,9 +4040,9 @@ if ('onhashchange' in window) { <span id="L4933" class="LineNr">4933 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L4934" class="LineNr">4934 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L4935" class="LineNr">4935 </span> <span class="subxComment"># initialize input</span> -<span id="L4936" class="LineNr">4936 </span> <span class="subxS1Comment"># . write(_test-input-stream, "8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale")</span> +<span id="L4936" class="LineNr">4936 </span> <span class="subxS1Comment"># . write(_test-input-stream, "8b/copy 0/mod 4/rm32 1/scale")</span> <span id="L4937" class="LineNr">4937 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L4938" class="LineNr">4938 </span> 68/push <span class="Constant">"8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale"</span>/imm32 +<span id="L4938" class="LineNr">4938 </span> 68/push <span class="Constant">"8b/copy 0/mod 4/rm32 1/scale"</span>/imm32 <span id="L4939" class="LineNr">4939 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span id="L4940" class="LineNr">4940 </span> <span class="subxS2Comment"># . . call</span> <span id="L4941" class="LineNr">4941 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 @@ -4065,10 +4065,10 @@ if ('onhashchange' in window) { <span id="L4958" class="LineNr">4958 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L4959" class="LineNr">4959 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L4960" class="Folded">4960 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L4986" class="LineNr">4986 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale", msg)</span> +<span id="L4986" class="LineNr">4986 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "8b 04 40 # 8b/copy 0/mod 4/rm32 1/scale", msg)</span> <span id="L4987" class="LineNr">4987 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L4988" class="LineNr">4988 </span> 68/push <span class="Constant">"F - test-convert-instruction-emits-sib-byte-with-missing-base"</span>/imm32 -<span id="L4989" class="LineNr">4989 </span> 68/push <span class="Constant">"8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale"</span>/imm32 +<span id="L4988" class="LineNr">4988 </span> 68/push <span class="Constant">"F - test-convert-instruction-emits-scale"</span>/imm32 +<span id="L4989" class="LineNr">4989 </span> 68/push <span class="Constant">"8b 04 40 # 8b/copy 0/mod 4/rm32 1/scale"</span>/imm32 <span id="L4990" class="LineNr">4990 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 <span id="L4991" class="LineNr">4991 </span> <span class="subxS2Comment"># . . call</span> <span id="L4992" class="LineNr">4992 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 @@ -4079,8 +4079,8 @@ if ('onhashchange' in window) { <span id="L4997" class="LineNr">4997 </span> 5d/pop-to-ebp <span id="L4998" class="LineNr">4998 </span> c3/return <span id="L4999" class="LineNr">4999 </span> -<span id="L5000" class="LineNr">5000 </span><span class="subxTest">test-convert-instruction-emits-sib-byte-with-missing-index</span>: -<span id="L5001" class="LineNr">5001 </span> <span class="subxComment"># pack base and scale operands into SIB byte</span> +<span id="L5000" class="LineNr">5000 </span><span class="subxTest">test-convert-instruction-emits-sib-byte-with-missing-base</span>: +<span id="L5001" class="LineNr">5001 </span> <span class="subxComment"># pack index and scale operands into SIB byte</span> <span id="L5002" class="LineNr">5002 </span> <span class="subxS1Comment"># . prologue</span> <span id="L5003" class="LineNr">5003 </span> 55/push-ebp <span id="L5004" class="LineNr">5004 </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> @@ -4107,9 +4107,9 @@ if ('onhashchange' in window) { <span id="L5025" class="LineNr">5025 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5026" class="LineNr">5026 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5027" class="LineNr">5027 </span> <span class="subxComment"># initialize input</span> -<span id="L5028" class="LineNr">5028 </span> <span class="subxS1Comment"># . write(_test-input-stream, "8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale")</span> +<span id="L5028" class="LineNr">5028 </span> <span class="subxS1Comment"># . write(_test-input-stream, "8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale")</span> <span id="L5029" class="LineNr">5029 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5030" class="LineNr">5030 </span> 68/push <span class="Constant">"8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale"</span>/imm32 +<span id="L5030" class="LineNr">5030 </span> 68/push <span class="Constant">"8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale"</span>/imm32 <span id="L5031" class="LineNr">5031 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span id="L5032" class="LineNr">5032 </span> <span class="subxS2Comment"># . . call</span> <span id="L5033" class="LineNr">5033 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 @@ -4132,10 +4132,10 @@ if ('onhashchange' in window) { <span id="L5050" class="LineNr">5050 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5051" class="LineNr">5051 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5052" class="Folded">5052 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L5078" class="LineNr">5078 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale", msg)</span> +<span id="L5078" class="LineNr">5078 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale", msg)</span> <span id="L5079" class="LineNr">5079 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5080" class="LineNr">5080 </span> 68/push <span class="Constant">"F - test-convert-instruction-emits-sib-byte-with-missing-index"</span>/imm32 -<span id="L5081" class="LineNr">5081 </span> 68/push <span class="Constant">"8b 0c 00 # 8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale"</span>/imm32 +<span id="L5080" class="LineNr">5080 </span> 68/push <span class="Constant">"F - test-convert-instruction-emits-sib-byte-with-missing-base"</span>/imm32 +<span id="L5081" class="LineNr">5081 </span> 68/push <span class="Constant">"8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale"</span>/imm32 <span id="L5082" class="LineNr">5082 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 <span id="L5083" class="LineNr">5083 </span> <span class="subxS2Comment"># . . call</span> <span id="L5084" class="LineNr">5084 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 @@ -4146,8 +4146,8 @@ if ('onhashchange' in window) { <span id="L5089" class="LineNr">5089 </span> 5d/pop-to-ebp <span id="L5090" class="LineNr">5090 </span> c3/return <span id="L5091" class="LineNr">5091 </span> -<span id="L5092" class="LineNr">5092 </span><span class="subxTest">test-convert-instruction-emits-sib-byte-with-missing-scale</span>: -<span id="L5093" class="LineNr">5093 </span> <span class="subxComment"># pack base and index operands into SIB byte</span> +<span id="L5092" class="LineNr">5092 </span><span class="subxTest">test-convert-instruction-emits-sib-byte-with-missing-index</span>: +<span id="L5093" class="LineNr">5093 </span> <span class="subxComment"># pack base and scale operands into SIB byte</span> <span id="L5094" class="LineNr">5094 </span> <span class="subxS1Comment"># . prologue</span> <span id="L5095" class="LineNr">5095 </span> 55/push-ebp <span id="L5096" class="LineNr">5096 </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> @@ -4174,9 +4174,9 @@ if ('onhashchange' in window) { <span id="L5117" class="LineNr">5117 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5118" class="LineNr">5118 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5119" class="LineNr">5119 </span> <span class="subxComment"># initialize input</span> -<span id="L5120" class="LineNr">5120 </span> <span class="subxS1Comment"># . write(_test-input-stream, "8b/copy 0/mod 4/rm32 1/r32 0/base 1/index")</span> +<span id="L5120" class="LineNr">5120 </span> <span class="subxS1Comment"># . write(_test-input-stream, "8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale")</span> <span id="L5121" class="LineNr">5121 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5122" class="LineNr">5122 </span> 68/push <span class="Constant">"8b/copy 0/mod 4/rm32 1/r32 0/base 1/index"</span>/imm32 +<span id="L5122" class="LineNr">5122 </span> 68/push <span class="Constant">"8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale"</span>/imm32 <span id="L5123" class="LineNr">5123 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span id="L5124" class="LineNr">5124 </span> <span class="subxS2Comment"># . . call</span> <span id="L5125" class="LineNr">5125 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 @@ -4199,10 +4199,10 @@ if ('onhashchange' in window) { <span id="L5142" class="LineNr">5142 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5143" class="LineNr">5143 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5144" class="Folded">5144 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L5170" class="LineNr">5170 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 0/base 1/index", msg)</span> +<span id="L5170" class="LineNr">5170 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale", msg)</span> <span id="L5171" class="LineNr">5171 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5172" class="LineNr">5172 </span> 68/push <span class="Constant">"F - test-convert-instruction-emits-sib-byte-with-missing-scale"</span>/imm32 -<span id="L5173" class="LineNr">5173 </span> 68/push <span class="Constant">"8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 0/base 1/index"</span>/imm32 +<span id="L5172" class="LineNr">5172 </span> 68/push <span class="Constant">"F - test-convert-instruction-emits-sib-byte-with-missing-index"</span>/imm32 +<span id="L5173" class="LineNr">5173 </span> 68/push <span class="Constant">"8b 0c 00 # 8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale"</span>/imm32 <span id="L5174" class="LineNr">5174 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 <span id="L5175" class="LineNr">5175 </span> <span class="subxS2Comment"># . . call</span> <span id="L5176" class="LineNr">5176 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 @@ -4213,8 +4213,8 @@ if ('onhashchange' in window) { <span id="L5181" class="LineNr">5181 </span> 5d/pop-to-ebp <span id="L5182" class="LineNr">5182 </span> c3/return <span id="L5183" class="LineNr">5183 </span> -<span id="L5184" class="LineNr">5184 </span><span class="subxTest">test-convert-instruction-handles-disp32-operand</span>: -<span id="L5185" class="LineNr">5185 </span> <span class="subxComment"># expand /disp32 operand into 4 bytes</span> +<span id="L5184" class="LineNr">5184 </span><span class="subxTest">test-convert-instruction-emits-sib-byte-with-missing-scale</span>: +<span id="L5185" class="LineNr">5185 </span> <span class="subxComment"># pack base and index operands into SIB byte</span> <span id="L5186" class="LineNr">5186 </span> <span class="subxS1Comment"># . prologue</span> <span id="L5187" class="LineNr">5187 </span> 55/push-ebp <span id="L5188" class="LineNr">5188 </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> @@ -4241,9 +4241,9 @@ if ('onhashchange' in window) { <span id="L5209" class="LineNr">5209 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5210" class="LineNr">5210 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5211" class="LineNr">5211 </span> <span class="subxComment"># initialize input</span> -<span id="L5212" class="LineNr">5212 </span> <span class="subxS1Comment"># . write(_test-input-stream, "e8/call 20/disp32")</span> +<span id="L5212" class="LineNr">5212 </span> <span class="subxS1Comment"># . write(_test-input-stream, "8b/copy 0/mod 4/rm32 1/r32 0/base 1/index")</span> <span id="L5213" class="LineNr">5213 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5214" class="LineNr">5214 </span> 68/push <span class="Constant">"e8/call 20/disp32"</span>/imm32 +<span id="L5214" class="LineNr">5214 </span> 68/push <span class="Constant">"8b/copy 0/mod 4/rm32 1/r32 0/base 1/index"</span>/imm32 <span id="L5215" class="LineNr">5215 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span id="L5216" class="LineNr">5216 </span> <span class="subxS2Comment"># . . call</span> <span id="L5217" class="LineNr">5217 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 @@ -4266,10 +4266,10 @@ if ('onhashchange' in window) { <span id="L5234" class="LineNr">5234 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5235" class="LineNr">5235 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5236" class="Folded">5236 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L5262" class="LineNr">5262 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "e8 20 00 00 00 # e8/call 20/disp32", msg)</span> +<span id="L5262" class="LineNr">5262 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 0/base 1/index", msg)</span> <span id="L5263" class="LineNr">5263 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5264" class="LineNr">5264 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-disp32-operand"</span>/imm32 -<span id="L5265" class="LineNr">5265 </span> 68/push <span class="Constant">"e8 20 00 00 00 # e8/call 20/disp32"</span>/imm32 +<span id="L5264" class="LineNr">5264 </span> 68/push <span class="Constant">"F - test-convert-instruction-emits-sib-byte-with-missing-scale"</span>/imm32 +<span id="L5265" class="LineNr">5265 </span> 68/push <span class="Constant">"8b 0c 08 # 8b/copy 0/mod 4/rm32 1/r32 0/base 1/index"</span>/imm32 <span id="L5266" class="LineNr">5266 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 <span id="L5267" class="LineNr">5267 </span> <span class="subxS2Comment"># . . call</span> <span id="L5268" class="LineNr">5268 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 @@ -4280,8 +4280,8 @@ if ('onhashchange' in window) { <span id="L5273" class="LineNr">5273 </span> 5d/pop-to-ebp <span id="L5274" class="LineNr">5274 </span> c3/return <span id="L5275" class="LineNr">5275 </span> -<span id="L5276" class="LineNr">5276 </span><span class="subxTest">test-convert-instruction-handles-disp16-operand</span>: -<span id="L5277" class="LineNr">5277 </span> <span class="subxComment"># expand /disp16 operand into 2 bytes</span> +<span id="L5276" class="LineNr">5276 </span><span class="subxTest">test-convert-instruction-handles-disp32-operand</span>: +<span id="L5277" class="LineNr">5277 </span> <span class="subxComment"># expand /disp32 operand into 4 bytes</span> <span id="L5278" class="LineNr">5278 </span> <span class="subxS1Comment"># . prologue</span> <span id="L5279" class="LineNr">5279 </span> 55/push-ebp <span id="L5280" class="LineNr">5280 </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> @@ -4308,9 +4308,9 @@ if ('onhashchange' in window) { <span id="L5301" class="LineNr">5301 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5302" class="LineNr">5302 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5303" class="LineNr">5303 </span> <span class="subxComment"># initialize input</span> -<span id="L5304" class="LineNr">5304 </span> <span class="subxS1Comment"># . write(_test-input-stream, "e8/call 20/disp16")</span> +<span id="L5304" class="LineNr">5304 </span> <span class="subxS1Comment"># . write(_test-input-stream, "e8/call 20/disp32")</span> <span id="L5305" class="LineNr">5305 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5306" class="LineNr">5306 </span> 68/push <span class="Constant">"e8/call 20/disp16"</span>/imm32 <span class="subxComment"># not a valid instruction</span> +<span id="L5306" class="LineNr">5306 </span> 68/push <span class="Constant">"e8/call 20/disp32"</span>/imm32 <span id="L5307" class="LineNr">5307 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span id="L5308" class="LineNr">5308 </span> <span class="subxS2Comment"># . . call</span> <span id="L5309" class="LineNr">5309 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 @@ -4333,10 +4333,10 @@ if ('onhashchange' in window) { <span id="L5326" class="LineNr">5326 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5327" class="LineNr">5327 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5328" class="Folded">5328 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L5354" class="LineNr">5354 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "e8 20 00 # e8/call 20/disp16", msg)</span> +<span id="L5354" class="LineNr">5354 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "e8 20 00 00 00 # e8/call 20/disp32", msg)</span> <span id="L5355" class="LineNr">5355 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5356" class="LineNr">5356 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-disp16-operand"</span>/imm32 -<span id="L5357" class="LineNr">5357 </span> 68/push <span class="Constant">"e8 20 00 # e8/call 20/disp16"</span>/imm32 +<span id="L5356" class="LineNr">5356 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-disp32-operand"</span>/imm32 +<span id="L5357" class="LineNr">5357 </span> 68/push <span class="Constant">"e8 20 00 00 00 # e8/call 20/disp32"</span>/imm32 <span id="L5358" class="LineNr">5358 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 <span id="L5359" class="LineNr">5359 </span> <span class="subxS2Comment"># . . call</span> <span id="L5360" class="LineNr">5360 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 @@ -4347,8 +4347,8 @@ if ('onhashchange' in window) { <span id="L5365" class="LineNr">5365 </span> 5d/pop-to-ebp <span id="L5366" class="LineNr">5366 </span> c3/return <span id="L5367" class="LineNr">5367 </span> -<span id="L5368" class="LineNr">5368 </span><span class="subxTest">test-convert-instruction-handles-disp8-operand</span>: -<span id="L5369" class="LineNr">5369 </span> <span class="subxComment"># expand /disp8 operand into 1 byte</span> +<span id="L5368" class="LineNr">5368 </span><span class="subxTest">test-convert-instruction-handles-disp16-operand</span>: +<span id="L5369" class="LineNr">5369 </span> <span class="subxComment"># expand /disp16 operand into 2 bytes</span> <span id="L5370" class="LineNr">5370 </span> <span class="subxS1Comment"># . prologue</span> <span id="L5371" class="LineNr">5371 </span> 55/push-ebp <span id="L5372" class="LineNr">5372 </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> @@ -4375,9 +4375,9 @@ if ('onhashchange' in window) { <span id="L5393" class="LineNr">5393 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5394" class="LineNr">5394 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5395" class="LineNr">5395 </span> <span class="subxComment"># initialize input</span> -<span id="L5396" class="LineNr">5396 </span> <span class="subxS1Comment"># . write(_test-input-stream, "eb/jump 20/disp8")</span> +<span id="L5396" class="LineNr">5396 </span> <span class="subxS1Comment"># . write(_test-input-stream, "e8/call 20/disp16")</span> <span id="L5397" class="LineNr">5397 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5398" class="LineNr">5398 </span> 68/push <span class="Constant">"eb/jump 20/disp8"</span>/imm32 +<span id="L5398" class="LineNr">5398 </span> 68/push <span class="Constant">"e8/call 20/disp16"</span>/imm32 <span class="subxComment"># not a valid instruction</span> <span id="L5399" class="LineNr">5399 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span id="L5400" class="LineNr">5400 </span> <span class="subxS2Comment"># . . call</span> <span id="L5401" class="LineNr">5401 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 @@ -4400,10 +4400,10 @@ if ('onhashchange' in window) { <span id="L5418" class="LineNr">5418 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5419" class="LineNr">5419 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5420" class="Folded">5420 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L5446" class="LineNr">5446 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "eb 20 # eb/jump 20/disp8", msg)</span> +<span id="L5446" class="LineNr">5446 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "e8 20 00 # e8/call 20/disp16", msg)</span> <span id="L5447" class="LineNr">5447 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5448" class="LineNr">5448 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-disp8-operand"</span>/imm32 -<span id="L5449" class="LineNr">5449 </span> 68/push <span class="Constant">"eb 20 # eb/jump 20/disp8"</span>/imm32 +<span id="L5448" class="LineNr">5448 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-disp16-operand"</span>/imm32 +<span id="L5449" class="LineNr">5449 </span> 68/push <span class="Constant">"e8 20 00 # e8/call 20/disp16"</span>/imm32 <span id="L5450" class="LineNr">5450 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 <span id="L5451" class="LineNr">5451 </span> <span class="subxS2Comment"># . . call</span> <span id="L5452" class="LineNr">5452 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 @@ -4414,8 +4414,8 @@ if ('onhashchange' in window) { <span id="L5457" class="LineNr">5457 </span> 5d/pop-to-ebp <span id="L5458" class="LineNr">5458 </span> c3/return <span id="L5459" class="LineNr">5459 </span> -<span id="L5460" class="LineNr">5460 </span><span class="subxTest">test-convert-instruction-handles-disp8-name</span>: -<span id="L5461" class="LineNr">5461 </span> <span class="subxComment"># pass /disp8 name directly through</span> +<span id="L5460" class="LineNr">5460 </span><span class="subxTest">test-convert-instruction-handles-disp8-operand</span>: +<span id="L5461" class="LineNr">5461 </span> <span class="subxComment"># expand /disp8 operand into 1 byte</span> <span id="L5462" class="LineNr">5462 </span> <span class="subxS1Comment"># . prologue</span> <span id="L5463" class="LineNr">5463 </span> 55/push-ebp <span id="L5464" class="LineNr">5464 </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> @@ -4442,9 +4442,9 @@ if ('onhashchange' in window) { <span id="L5485" class="LineNr">5485 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5486" class="LineNr">5486 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5487" class="LineNr">5487 </span> <span class="subxComment"># initialize input</span> -<span id="L5488" class="LineNr">5488 </span> <span class="subxS1Comment"># . write(_test-input-stream, "eb/jump xyz/disp8")</span> +<span id="L5488" class="LineNr">5488 </span> <span class="subxS1Comment"># . write(_test-input-stream, "eb/jump 20/disp8")</span> <span id="L5489" class="LineNr">5489 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5490" class="LineNr">5490 </span> 68/push <span class="Constant">"eb/jump xyz/disp8"</span>/imm32 +<span id="L5490" class="LineNr">5490 </span> 68/push <span class="Constant">"eb/jump 20/disp8"</span>/imm32 <span id="L5491" class="LineNr">5491 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span id="L5492" class="LineNr">5492 </span> <span class="subxS2Comment"># . . call</span> <span id="L5493" class="LineNr">5493 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 @@ -4467,10 +4467,10 @@ if ('onhashchange' in window) { <span id="L5510" class="LineNr">5510 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5511" class="LineNr">5511 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5512" class="Folded">5512 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L5538" class="LineNr">5538 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "eb xyz/disp8 # eb/jump xyz/disp8", msg)</span> +<span id="L5538" class="LineNr">5538 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "eb 20 # eb/jump 20/disp8", msg)</span> <span id="L5539" class="LineNr">5539 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5540" class="LineNr">5540 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-disp8-name"</span>/imm32 -<span id="L5541" class="LineNr">5541 </span> 68/push <span class="Constant">"eb xyz/disp8 # eb/jump xyz/disp8"</span>/imm32 +<span id="L5540" class="LineNr">5540 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-disp8-operand"</span>/imm32 +<span id="L5541" class="LineNr">5541 </span> 68/push <span class="Constant">"eb 20 # eb/jump 20/disp8"</span>/imm32 <span id="L5542" class="LineNr">5542 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 <span id="L5543" class="LineNr">5543 </span> <span class="subxS2Comment"># . . call</span> <span id="L5544" class="LineNr">5544 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 @@ -4481,8 +4481,8 @@ if ('onhashchange' in window) { <span id="L5549" class="LineNr">5549 </span> 5d/pop-to-ebp <span id="L5550" class="LineNr">5550 </span> c3/return <span id="L5551" class="LineNr">5551 </span> -<span id="L5552" class="LineNr">5552 </span><span class="subxTest">test-convert-instruction-handles-imm32-operand</span>: -<span id="L5553" class="LineNr">5553 </span> <span class="subxComment"># expand /imm32 operand into 4 bytes</span> +<span id="L5552" class="LineNr">5552 </span><span class="subxTest">test-convert-instruction-handles-disp8-name</span>: +<span id="L5553" class="LineNr">5553 </span> <span class="subxComment"># pass /disp8 name directly through</span> <span id="L5554" class="LineNr">5554 </span> <span class="subxS1Comment"># . prologue</span> <span id="L5555" class="LineNr">5555 </span> 55/push-ebp <span id="L5556" class="LineNr">5556 </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> @@ -4509,9 +4509,9 @@ if ('onhashchange' in window) { <span id="L5577" class="LineNr">5577 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5578" class="LineNr">5578 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5579" class="LineNr">5579 </span> <span class="subxComment"># initialize input</span> -<span id="L5580" class="LineNr">5580 </span> <span class="subxS1Comment"># . write(_test-input-stream, "68/push 0x20/imm32")</span> +<span id="L5580" class="LineNr">5580 </span> <span class="subxS1Comment"># . write(_test-input-stream, "eb/jump xyz/disp8")</span> <span id="L5581" class="LineNr">5581 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5582" class="LineNr">5582 </span> 68/push <span class="Constant">"68/push 0x20/imm32"</span>/imm32 +<span id="L5582" class="LineNr">5582 </span> 68/push <span class="Constant">"eb/jump xyz/disp8"</span>/imm32 <span id="L5583" class="LineNr">5583 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 <span id="L5584" class="LineNr">5584 </span> <span class="subxS2Comment"># . . call</span> <span id="L5585" class="LineNr">5585 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 @@ -4534,10 +4534,10 @@ if ('onhashchange' in window) { <span id="L5602" class="LineNr">5602 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5603" class="LineNr">5603 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L5604" class="Folded">5604 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L5630" class="LineNr">5630 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "68 20 00 00 00 # 68/push 0x20/imm32", msg)</span> +<span id="L5630" class="LineNr">5630 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "eb xyz/disp8 # eb/jump xyz/disp8", msg)</span> <span id="L5631" class="LineNr">5631 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5632" class="LineNr">5632 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-imm32-operand"</span>/imm32 -<span id="L5633" class="LineNr">5633 </span> 68/push <span class="Constant">"68 20 00 00 00 # 68/push 0x20/imm32"</span>/imm32 +<span id="L5632" class="LineNr">5632 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-disp8-name"</span>/imm32 +<span id="L5633" class="LineNr">5633 </span> 68/push <span class="Constant">"eb xyz/disp8 # eb/jump xyz/disp8"</span>/imm32 <span id="L5634" class="LineNr">5634 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 <span id="L5635" class="LineNr">5635 </span> <span class="subxS2Comment"># . . call</span> <span id="L5636" class="LineNr">5636 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 @@ -4548,185 +4548,252 @@ if ('onhashchange' in window) { <span id="L5641" class="LineNr">5641 </span> 5d/pop-to-ebp <span id="L5642" class="LineNr">5642 </span> c3/return <span id="L5643" class="LineNr">5643 </span> -<span id="L5644" class="LineNr">5644 </span><span class="subxTest">test-convert-instruction-handles-imm16-operand</span>: -<span id="L5645" class="LineNr">5645 </span> <span class="subxComment"># expand /imm16 operand into 2 bytes</span> -<span id="L5646" class="LineNr">5646 </span> <span class="subxComment"># we don't have one of these at the moment, so this expands to an invalid instruction</span> -<span id="L5647" class="LineNr">5647 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L5648" class="LineNr">5648 </span> 55/push-ebp -<span id="L5649" class="LineNr">5649 </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="L5650" class="LineNr">5650 </span> <span class="subxComment"># setup</span> -<span id="L5651" class="LineNr">5651 </span> <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span> -<span id="L5652" class="LineNr">5652 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5653" class="LineNr">5653 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 -<span id="L5654" class="LineNr">5654 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5655" class="LineNr">5655 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 -<span id="L5656" class="LineNr">5656 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5657" class="LineNr">5657 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L5658" class="LineNr">5658 </span> <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span> -<span id="L5659" class="LineNr">5659 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5660" class="LineNr">5660 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 -<span id="L5661" class="LineNr">5661 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5662" class="LineNr">5662 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 -<span id="L5663" class="LineNr">5663 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5664" class="LineNr">5664 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L5665" class="LineNr">5665 </span> <span class="subxS1Comment"># . clear-stream($_test-output-buffered-file->buffer)</span> -<span id="L5666" class="LineNr">5666 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5667" class="LineNr">5667 </span> 68/push $_test-output-buffered-file->buffer/imm32 -<span id="L5668" class="LineNr">5668 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5669" class="LineNr">5669 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 -<span id="L5670" class="LineNr">5670 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5671" class="LineNr">5671 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L5672" class="LineNr">5672 </span> <span class="subxComment"># initialize input</span> -<span id="L5673" class="LineNr">5673 </span> <span class="subxS1Comment"># . write(_test-input-stream, "68/push 0x20/imm16")</span> -<span id="L5674" class="LineNr">5674 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5675" class="LineNr">5675 </span> 68/push <span class="Constant">"68/push 0x20/imm16"</span>/imm32 <span class="subxComment"># not a valid instruction</span> -<span id="L5676" class="LineNr">5676 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 -<span id="L5677" class="LineNr">5677 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5678" class="LineNr">5678 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 -<span id="L5679" class="LineNr">5679 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5680" class="LineNr">5680 </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="L5681" class="LineNr">5681 </span> <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span> -<span id="L5682" class="LineNr">5682 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5683" class="LineNr">5683 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 -<span id="L5684" class="LineNr">5684 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 -<span id="L5685" class="LineNr">5685 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5686" class="LineNr">5686 </span> e8/call <a href='pack.subx.html#L1803'>convert-instruction</a>/disp32 -<span id="L5687" class="LineNr">5687 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5688" class="LineNr">5688 </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="L5689" class="LineNr">5689 </span> <span class="subxComment"># check output</span> -<span id="L5690" class="LineNr">5690 </span> <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span> -<span id="L5691" class="LineNr">5691 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5692" class="LineNr">5692 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 -<span id="L5693" class="LineNr">5693 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5694" class="LineNr">5694 </span> e8/call <a href='../064write-byte.subx.html#L81'>flush</a>/disp32 -<span id="L5695" class="LineNr">5695 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5696" class="LineNr">5696 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L5697" class="Folded">5697 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L5723" class="LineNr">5723 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "68 20 00 # 68/push 0x20/imm16", msg)</span> -<span id="L5724" class="LineNr">5724 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5725" class="LineNr">5725 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-imm16-operand"</span>/imm32 -<span id="L5726" class="LineNr">5726 </span> 68/push <span class="Constant">"68 20 00 # 68/push 0x20/imm16"</span>/imm32 -<span id="L5727" class="LineNr">5727 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 -<span id="L5728" class="LineNr">5728 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5729" class="LineNr">5729 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 -<span id="L5730" class="LineNr">5730 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5731" class="LineNr">5731 </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="L5732" class="LineNr">5732 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L5733" class="LineNr">5733 </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="L5734" class="LineNr">5734 </span> 5d/pop-to-ebp -<span id="L5735" class="LineNr">5735 </span> c3/return -<span id="L5736" class="LineNr">5736 </span> -<span id="L5737" class="LineNr">5737 </span><span class="subxTest">test-convert-instruction-handles-imm8-operand</span>: -<span id="L5738" class="LineNr">5738 </span> <span class="subxComment"># expand /imm8 operand into 1 byte</span> -<span id="L5739" class="LineNr">5739 </span> <span class="subxComment"># we don't have one of these at the moment, so this expands to an invalid instruction</span> -<span id="L5740" class="LineNr">5740 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L5741" class="LineNr">5741 </span> 55/push-ebp -<span id="L5742" class="LineNr">5742 </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="L5743" class="LineNr">5743 </span> <span class="subxComment"># setup</span> -<span id="L5744" class="LineNr">5744 </span> <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span> -<span id="L5745" class="LineNr">5745 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5746" class="LineNr">5746 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 -<span id="L5747" class="LineNr">5747 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5748" class="LineNr">5748 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 -<span id="L5749" class="LineNr">5749 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5750" class="LineNr">5750 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L5751" class="LineNr">5751 </span> <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span> -<span id="L5752" class="LineNr">5752 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5753" class="LineNr">5753 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 -<span id="L5754" class="LineNr">5754 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5755" class="LineNr">5755 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 -<span id="L5756" class="LineNr">5756 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5757" class="LineNr">5757 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L5758" class="LineNr">5758 </span> <span class="subxS1Comment"># . clear-stream($_test-output-buffered-file->buffer)</span> -<span id="L5759" class="LineNr">5759 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5760" class="LineNr">5760 </span> 68/push $_test-output-buffered-file->buffer/imm32 -<span id="L5761" class="LineNr">5761 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5762" class="LineNr">5762 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 -<span id="L5763" class="LineNr">5763 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5764" class="LineNr">5764 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L5765" class="LineNr">5765 </span> <span class="subxComment"># initialize input</span> -<span id="L5766" class="LineNr">5766 </span> <span class="subxS1Comment"># . write(_test-input-stream, "68/push 0x20/imm8")</span> -<span id="L5767" class="LineNr">5767 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5768" class="LineNr">5768 </span> 68/push <span class="Constant">"68/push 0x20/imm8"</span>/imm32 -<span id="L5769" class="LineNr">5769 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 -<span id="L5770" class="LineNr">5770 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5771" class="LineNr">5771 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 -<span id="L5772" class="LineNr">5772 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5773" class="LineNr">5773 </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="L5774" class="LineNr">5774 </span> <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span> -<span id="L5775" class="LineNr">5775 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5776" class="LineNr">5776 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 -<span id="L5777" class="LineNr">5777 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 -<span id="L5778" class="LineNr">5778 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5779" class="LineNr">5779 </span> e8/call <a href='pack.subx.html#L1803'>convert-instruction</a>/disp32 -<span id="L5780" class="LineNr">5780 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5781" class="LineNr">5781 </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="L5782" class="LineNr">5782 </span> <span class="subxComment"># check output</span> -<span id="L5783" class="LineNr">5783 </span> <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span> -<span id="L5784" class="LineNr">5784 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5785" class="LineNr">5785 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 -<span id="L5786" class="LineNr">5786 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5787" class="LineNr">5787 </span> e8/call <a href='../064write-byte.subx.html#L81'>flush</a>/disp32 -<span id="L5788" class="LineNr">5788 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5789" class="LineNr">5789 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L5790" class="Folded">5790 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L5816" class="LineNr">5816 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "68 20 # 68/push 0x20/imm8", msg)</span> -<span id="L5817" class="LineNr">5817 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5818" class="LineNr">5818 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-imm8-operand"</span>/imm32 -<span id="L5819" class="LineNr">5819 </span> 68/push <span class="Constant">"68 20 # 68/push 0x20/imm8"</span>/imm32 -<span id="L5820" class="LineNr">5820 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 -<span id="L5821" class="LineNr">5821 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5822" class="LineNr">5822 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 -<span id="L5823" class="LineNr">5823 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5824" class="LineNr">5824 </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="L5825" class="LineNr">5825 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L5826" class="LineNr">5826 </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="L5827" class="LineNr">5827 </span> 5d/pop-to-ebp -<span id="L5828" class="LineNr">5828 </span> c3/return -<span id="L5829" class="LineNr">5829 </span> -<span id="L5830" class="LineNr">5830 </span><span class="subxComment"># shortcut for parse-hex-int-from-slice(next-token-from-slice(word->start, word->end, '/'))</span> -<span id="L5831" class="LineNr">5831 </span><span class="subxFunction">parse-datum-of-word</span>: <span class="subxComment"># word: (addr slice) -> value/eax: int</span> +<span id="L5644" class="LineNr">5644 </span><span class="subxTest">test-convert-instruction-handles-imm32-operand</span>: +<span id="L5645" class="LineNr">5645 </span> <span class="subxComment"># expand /imm32 operand into 4 bytes</span> +<span id="L5646" class="LineNr">5646 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L5647" class="LineNr">5647 </span> 55/push-ebp +<span id="L5648" class="LineNr">5648 </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="L5649" class="LineNr">5649 </span> <span class="subxComment"># setup</span> +<span id="L5650" class="LineNr">5650 </span> <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span> +<span id="L5651" class="LineNr">5651 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5652" class="LineNr">5652 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 +<span id="L5653" class="LineNr">5653 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5654" class="LineNr">5654 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 +<span id="L5655" class="LineNr">5655 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5656" class="LineNr">5656 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5657" class="LineNr">5657 </span> <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span> +<span id="L5658" class="LineNr">5658 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5659" class="LineNr">5659 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 +<span id="L5660" class="LineNr">5660 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5661" class="LineNr">5661 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 +<span id="L5662" class="LineNr">5662 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5663" class="LineNr">5663 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5664" class="LineNr">5664 </span> <span class="subxS1Comment"># . clear-stream($_test-output-buffered-file->buffer)</span> +<span id="L5665" class="LineNr">5665 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5666" class="LineNr">5666 </span> 68/push $_test-output-buffered-file->buffer/imm32 +<span id="L5667" class="LineNr">5667 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5668" class="LineNr">5668 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 +<span id="L5669" class="LineNr">5669 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5670" class="LineNr">5670 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5671" class="LineNr">5671 </span> <span class="subxComment"># initialize input</span> +<span id="L5672" class="LineNr">5672 </span> <span class="subxS1Comment"># . write(_test-input-stream, "68/push 0x20/imm32")</span> +<span id="L5673" class="LineNr">5673 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5674" class="LineNr">5674 </span> 68/push <span class="Constant">"68/push 0x20/imm32"</span>/imm32 +<span id="L5675" class="LineNr">5675 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 +<span id="L5676" class="LineNr">5676 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5677" class="LineNr">5677 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 +<span id="L5678" class="LineNr">5678 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5679" class="LineNr">5679 </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="L5680" class="LineNr">5680 </span> <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span> +<span id="L5681" class="LineNr">5681 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5682" class="LineNr">5682 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 +<span id="L5683" class="LineNr">5683 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 +<span id="L5684" class="LineNr">5684 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5685" class="LineNr">5685 </span> e8/call <a href='pack.subx.html#L1803'>convert-instruction</a>/disp32 +<span id="L5686" class="LineNr">5686 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5687" class="LineNr">5687 </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="L5688" class="LineNr">5688 </span> <span class="subxComment"># check output</span> +<span id="L5689" class="LineNr">5689 </span> <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span> +<span id="L5690" class="LineNr">5690 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5691" class="LineNr">5691 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 +<span id="L5692" class="LineNr">5692 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5693" class="LineNr">5693 </span> e8/call <a href='../064write-byte.subx.html#L81'>flush</a>/disp32 +<span id="L5694" class="LineNr">5694 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5695" class="LineNr">5695 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5696" class="Folded">5696 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L5722" class="LineNr">5722 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "68 20 00 00 00 # 68/push 0x20/imm32", msg)</span> +<span id="L5723" class="LineNr">5723 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5724" class="LineNr">5724 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-imm32-operand"</span>/imm32 +<span id="L5725" class="LineNr">5725 </span> 68/push <span class="Constant">"68 20 00 00 00 # 68/push 0x20/imm32"</span>/imm32 +<span id="L5726" class="LineNr">5726 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 +<span id="L5727" class="LineNr">5727 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5728" class="LineNr">5728 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 +<span id="L5729" class="LineNr">5729 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5730" class="LineNr">5730 </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="L5731" class="LineNr">5731 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L5732" class="LineNr">5732 </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="L5733" class="LineNr">5733 </span> 5d/pop-to-ebp +<span id="L5734" class="LineNr">5734 </span> c3/return +<span id="L5735" class="LineNr">5735 </span> +<span id="L5736" class="LineNr">5736 </span><span class="subxTest">test-convert-instruction-handles-imm16-operand</span>: +<span id="L5737" class="LineNr">5737 </span> <span class="subxComment"># expand /imm16 operand into 2 bytes</span> +<span id="L5738" class="LineNr">5738 </span> <span class="subxComment"># we don't have one of these at the moment, so this expands to an invalid instruction</span> +<span id="L5739" class="LineNr">5739 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L5740" class="LineNr">5740 </span> 55/push-ebp +<span id="L5741" class="LineNr">5741 </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="L5742" class="LineNr">5742 </span> <span class="subxComment"># setup</span> +<span id="L5743" class="LineNr">5743 </span> <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span> +<span id="L5744" class="LineNr">5744 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5745" class="LineNr">5745 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 +<span id="L5746" class="LineNr">5746 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5747" class="LineNr">5747 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 +<span id="L5748" class="LineNr">5748 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5749" class="LineNr">5749 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5750" class="LineNr">5750 </span> <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span> +<span id="L5751" class="LineNr">5751 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5752" class="LineNr">5752 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 +<span id="L5753" class="LineNr">5753 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5754" class="LineNr">5754 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 +<span id="L5755" class="LineNr">5755 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5756" class="LineNr">5756 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5757" class="LineNr">5757 </span> <span class="subxS1Comment"># . clear-stream($_test-output-buffered-file->buffer)</span> +<span id="L5758" class="LineNr">5758 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5759" class="LineNr">5759 </span> 68/push $_test-output-buffered-file->buffer/imm32 +<span id="L5760" class="LineNr">5760 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5761" class="LineNr">5761 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 +<span id="L5762" class="LineNr">5762 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5763" class="LineNr">5763 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5764" class="LineNr">5764 </span> <span class="subxComment"># initialize input</span> +<span id="L5765" class="LineNr">5765 </span> <span class="subxS1Comment"># . write(_test-input-stream, "68/push 0x20/imm16")</span> +<span id="L5766" class="LineNr">5766 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5767" class="LineNr">5767 </span> 68/push <span class="Constant">"68/push 0x20/imm16"</span>/imm32 <span class="subxComment"># not a valid instruction</span> +<span id="L5768" class="LineNr">5768 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 +<span id="L5769" class="LineNr">5769 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5770" class="LineNr">5770 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 +<span id="L5771" class="LineNr">5771 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5772" class="LineNr">5772 </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="L5773" class="LineNr">5773 </span> <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span> +<span id="L5774" class="LineNr">5774 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5775" class="LineNr">5775 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 +<span id="L5776" class="LineNr">5776 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 +<span id="L5777" class="LineNr">5777 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5778" class="LineNr">5778 </span> e8/call <a href='pack.subx.html#L1803'>convert-instruction</a>/disp32 +<span id="L5779" class="LineNr">5779 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5780" class="LineNr">5780 </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="L5781" class="LineNr">5781 </span> <span class="subxComment"># check output</span> +<span id="L5782" class="LineNr">5782 </span> <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span> +<span id="L5783" class="LineNr">5783 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5784" class="LineNr">5784 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 +<span id="L5785" class="LineNr">5785 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5786" class="LineNr">5786 </span> e8/call <a href='../064write-byte.subx.html#L81'>flush</a>/disp32 +<span id="L5787" class="LineNr">5787 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5788" class="LineNr">5788 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5789" class="Folded">5789 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L5815" class="LineNr">5815 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "68 20 00 # 68/push 0x20/imm16", msg)</span> +<span id="L5816" class="LineNr">5816 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5817" class="LineNr">5817 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-imm16-operand"</span>/imm32 +<span id="L5818" class="LineNr">5818 </span> 68/push <span class="Constant">"68 20 00 # 68/push 0x20/imm16"</span>/imm32 +<span id="L5819" class="LineNr">5819 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 +<span id="L5820" class="LineNr">5820 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5821" class="LineNr">5821 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 +<span id="L5822" class="LineNr">5822 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5823" class="LineNr">5823 </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="L5824" class="LineNr">5824 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L5825" class="LineNr">5825 </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="L5826" class="LineNr">5826 </span> 5d/pop-to-ebp +<span id="L5827" class="LineNr">5827 </span> c3/return +<span id="L5828" class="LineNr">5828 </span> +<span id="L5829" class="LineNr">5829 </span><span class="subxTest">test-convert-instruction-handles-imm8-operand</span>: +<span id="L5830" class="LineNr">5830 </span> <span class="subxComment"># expand /imm8 operand into 1 byte</span> +<span id="L5831" class="LineNr">5831 </span> <span class="subxComment"># we don't have one of these at the moment, so this expands to an invalid instruction</span> <span id="L5832" class="LineNr">5832 </span> <span class="subxS1Comment"># . prologue</span> <span id="L5833" class="LineNr">5833 </span> 55/push-ebp <span id="L5834" class="LineNr">5834 </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="L5835" class="LineNr">5835 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L5836" class="LineNr">5836 </span> 51/push-ecx -<span id="L5837" class="LineNr">5837 </span> 56/push-esi -<span id="L5838" class="LineNr">5838 </span> <span class="subxComment"># esi = word</span> -<span id="L5839" class="LineNr">5839 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to esi</span> -<span id="L5840" class="LineNr">5840 </span> <span class="subxComment"># var slice/ecx: slice</span> -<span id="L5841" class="LineNr">5841 </span> 68/push 0/imm32/end -<span id="L5842" class="LineNr">5842 </span> 68/push 0/imm32/start -<span id="L5843" class="LineNr">5843 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span> -<span id="L5844" class="LineNr">5844 </span> <span class="subxComment"># slice = next-token-from-slice(word->start, word->end, '/')</span> -<span id="L5845" class="LineNr">5845 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5846" class="LineNr">5846 </span> 51/push-ecx -<span id="L5847" class="LineNr">5847 </span> 68/push 0x2f/imm32/slash -<span id="L5848" class="LineNr">5848 </span> ff 6/subop/push 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(esi+4)</span> -<span id="L5849" class="LineNr">5849 </span> ff 6/subop/push 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># push *esi</span> -<span id="L5850" class="LineNr">5850 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5851" class="LineNr">5851 </span> e8/call <a href='../073next-token.subx.html#L163'>next-token-from-slice</a>/disp32 -<span id="L5852" class="LineNr">5852 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5853" class="LineNr">5853 </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> 0x10/imm32 <span class="subxComment"># add to esp</span> -<span id="L5854" class="LineNr">5854 </span> <span class="subxComment"># return parse-hex-int-from-slice(slice)</span> -<span id="L5855" class="LineNr">5855 </span> <span class="subxS2Comment"># . . push args</span> -<span id="L5856" class="LineNr">5856 </span> 51/push-ecx -<span id="L5857" class="LineNr">5857 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5858" class="LineNr">5858 </span> e8/call <a href='../067parse-hex.subx.html#L387'>parse-hex-int-from-slice</a>/disp32 -<span id="L5859" class="LineNr">5859 </span> <span class="subxS2Comment"># . . discard args</span> -<span id="L5860" class="LineNr">5860 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L5861" class="LineNr">5861 </span><span class="Constant">$parse-datum-of-word:end</span>: -<span id="L5862" class="LineNr">5862 </span> <span class="subxS1Comment"># . reclaim locals</span> -<span id="L5863" class="LineNr">5863 </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="L5864" class="LineNr">5864 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L5865" class="LineNr">5865 </span> 5e/pop-to-esi -<span id="L5866" class="LineNr">5866 </span> 59/pop-to-ecx -<span id="L5867" class="LineNr">5867 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L5868" class="LineNr">5868 </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="L5869" class="LineNr">5869 </span> 5d/pop-to-ebp -<span id="L5870" class="LineNr">5870 </span> c3/return -<span id="L5871" class="LineNr">5871 </span> -<span id="L5872" class="LineNr">5872 </span><span class="subxS2Comment"># . . vim:nowrap:textwidth=0</span> +<span id="L5835" class="LineNr">5835 </span> <span class="subxComment"># setup</span> +<span id="L5836" class="LineNr">5836 </span> <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span> +<span id="L5837" class="LineNr">5837 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5838" class="LineNr">5838 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 +<span id="L5839" class="LineNr">5839 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5840" class="LineNr">5840 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 +<span id="L5841" class="LineNr">5841 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5842" class="LineNr">5842 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5843" class="LineNr">5843 </span> <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span> +<span id="L5844" class="LineNr">5844 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5845" class="LineNr">5845 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 +<span id="L5846" class="LineNr">5846 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5847" class="LineNr">5847 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 +<span id="L5848" class="LineNr">5848 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5849" class="LineNr">5849 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5850" class="LineNr">5850 </span> <span class="subxS1Comment"># . clear-stream($_test-output-buffered-file->buffer)</span> +<span id="L5851" class="LineNr">5851 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5852" class="LineNr">5852 </span> 68/push $_test-output-buffered-file->buffer/imm32 +<span id="L5853" class="LineNr">5853 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5854" class="LineNr">5854 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 +<span id="L5855" class="LineNr">5855 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5856" class="LineNr">5856 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5857" class="LineNr">5857 </span> <span class="subxComment"># initialize input</span> +<span id="L5858" class="LineNr">5858 </span> <span class="subxS1Comment"># . write(_test-input-stream, "68/push 0x20/imm8")</span> +<span id="L5859" class="LineNr">5859 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5860" class="LineNr">5860 </span> 68/push <span class="Constant">"68/push 0x20/imm8"</span>/imm32 +<span id="L5861" class="LineNr">5861 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 +<span id="L5862" class="LineNr">5862 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5863" class="LineNr">5863 </span> e8/call <a href='../057write.subx.html#L24'>write</a>/disp32 +<span id="L5864" class="LineNr">5864 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5865" class="LineNr">5865 </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="L5866" class="LineNr">5866 </span> <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span> +<span id="L5867" class="LineNr">5867 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5868" class="LineNr">5868 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 +<span id="L5869" class="LineNr">5869 </span> 68/push <a href='../061read-byte.subx.html#L287'>_test-input-stream</a>/imm32 +<span id="L5870" class="LineNr">5870 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5871" class="LineNr">5871 </span> e8/call <a href='pack.subx.html#L1803'>convert-instruction</a>/disp32 +<span id="L5872" class="LineNr">5872 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5873" class="LineNr">5873 </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="L5874" class="LineNr">5874 </span> <span class="subxComment"># check output</span> +<span id="L5875" class="LineNr">5875 </span> <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span> +<span id="L5876" class="LineNr">5876 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5877" class="LineNr">5877 </span> 68/push <a href='../064write-byte.subx.html#L359'>_test-output-buffered-file</a>/imm32 +<span id="L5878" class="LineNr">5878 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5879" class="LineNr">5879 </span> e8/call <a href='../064write-byte.subx.html#L81'>flush</a>/disp32 +<span id="L5880" class="LineNr">5880 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5881" class="LineNr">5881 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5882" class="Folded">5882 </span><span class="Folded">+-- 26 lines: #? # dump output ------------------------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L5908" class="LineNr">5908 </span> <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, "68 20 # 68/push 0x20/imm8", msg)</span> +<span id="L5909" class="LineNr">5909 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5910" class="LineNr">5910 </span> 68/push <span class="Constant">"F - test-convert-instruction-handles-imm8-operand"</span>/imm32 +<span id="L5911" class="LineNr">5911 </span> 68/push <span class="Constant">"68 20 # 68/push 0x20/imm8"</span>/imm32 +<span id="L5912" class="LineNr">5912 </span> 68/push <a href='../064write-byte.subx.html#L285'>_test-output-stream</a>/imm32 +<span id="L5913" class="LineNr">5913 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5914" class="LineNr">5914 </span> e8/call <a href='../058stream-equal.subx.html#L194'>check-stream-equal</a>/disp32 +<span id="L5915" class="LineNr">5915 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5916" class="LineNr">5916 </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="L5917" class="LineNr">5917 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L5918" class="LineNr">5918 </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="L5919" class="LineNr">5919 </span> 5d/pop-to-ebp +<span id="L5920" class="LineNr">5920 </span> c3/return +<span id="L5921" class="LineNr">5921 </span> +<span id="L5922" class="LineNr">5922 </span><span class="subxComment"># shortcut for parse-hex-int-from-slice(next-token-from-slice(word->start, word->end, '/'))</span> +<span id="L5923" class="LineNr">5923 </span><span class="subxFunction">parse-datum-of-word</span>: <span class="subxComment"># word: (addr slice) -> value/eax: int</span> +<span id="L5924" class="LineNr">5924 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L5925" class="LineNr">5925 </span> 55/push-ebp +<span id="L5926" class="LineNr">5926 </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="L5927" class="LineNr">5927 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L5928" class="LineNr">5928 </span> 51/push-ecx +<span id="L5929" class="LineNr">5929 </span> 56/push-esi +<span id="L5930" class="LineNr">5930 </span> <span class="subxComment"># esi = word</span> +<span id="L5931" class="LineNr">5931 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to esi</span> +<span id="L5932" class="LineNr">5932 </span> <span class="subxComment"># var slice/ecx: slice</span> +<span id="L5933" class="LineNr">5933 </span> 68/push 0/imm32/end +<span id="L5934" class="LineNr">5934 </span> 68/push 0/imm32/start +<span id="L5935" class="LineNr">5935 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span> +<span id="L5936" class="LineNr">5936 </span> <span class="subxComment"># slice = next-token-from-slice(word->start, word->end, '/')</span> +<span id="L5937" class="LineNr">5937 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5938" class="LineNr">5938 </span> 51/push-ecx +<span id="L5939" class="LineNr">5939 </span> 68/push 0x2f/imm32/slash +<span id="L5940" class="LineNr">5940 </span> ff 6/subop/push 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(esi+4)</span> +<span id="L5941" class="LineNr">5941 </span> ff 6/subop/push 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># push *esi</span> +<span id="L5942" class="LineNr">5942 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5943" class="LineNr">5943 </span> e8/call <a href='../073next-token.subx.html#L163'>next-token-from-slice</a>/disp32 +<span id="L5944" class="LineNr">5944 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5945" class="LineNr">5945 </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> 0x10/imm32 <span class="subxComment"># add to esp</span> +<span id="L5946" class="LineNr">5946 </span> <span class="subxComment"># return parse-hex-int-from-slice(slice)</span> +<span id="L5947" class="LineNr">5947 </span> <span class="subxS2Comment"># . . push args</span> +<span id="L5948" class="LineNr">5948 </span> 51/push-ecx +<span id="L5949" class="LineNr">5949 </span> <span class="subxS2Comment"># . . call</span> +<span id="L5950" class="LineNr">5950 </span> e8/call <a href='../067parse-hex.subx.html#L387'>parse-hex-int-from-slice</a>/disp32 +<span id="L5951" class="LineNr">5951 </span> <span class="subxS2Comment"># . . discard args</span> +<span id="L5952" class="LineNr">5952 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> +<span id="L5953" class="LineNr">5953 </span><span class="Constant">$parse-datum-of-word:end</span>: +<span id="L5954" class="LineNr">5954 </span> <span class="subxS1Comment"># . reclaim locals</span> +<span id="L5955" class="LineNr">5955 </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="L5956" class="LineNr">5956 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L5957" class="LineNr">5957 </span> 5e/pop-to-esi +<span id="L5958" class="LineNr">5958 </span> 59/pop-to-ecx +<span id="L5959" class="LineNr">5959 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L5960" class="LineNr">5960 </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="L5961" class="LineNr">5961 </span> 5d/pop-to-ebp +<span id="L5962" class="LineNr">5962 </span> c3/return +<span id="L5963" class="LineNr">5963 </span> +<span id="L5964" class="LineNr">5964 </span><span class="subxS2Comment"># . . vim:nowrap:textwidth=0</span> </pre> </body> </html> |