diff options
Diffstat (limited to 'html/subx/apps')
-rw-r--r-- | html/subx/apps/factorial.subx.html | 78 |
1 files changed, 40 insertions, 38 deletions
diff --git a/html/subx/apps/factorial.subx.html b/html/subx/apps/factorial.subx.html index cbb66b9e..7111a908 100644 --- a/html/subx/apps/factorial.subx.html +++ b/html/subx/apps/factorial.subx.html @@ -95,11 +95,11 @@ if ('onhashchange' in window) { <span id="L39" class="LineNr"> 39 </span> <span class="Comment"># then</span> <span id="L40" class="LineNr"> 40 </span> e8/call run_tests/disp32 <span id="L41" class="LineNr"> 41 </span> eb/jump $main_exit/disp8 -<span id="L42" class="LineNr"> 42 </span> <span class="Comment"># else EAX <- factorial(5)</span> +<span id="L42" class="LineNr"> 42 </span> <span class="Comment"># else EAX = factorial(5)</span> <span id="L43" class="LineNr"> 43 </span>$run_main: <span id="L44" class="LineNr"> 44 </span> <span class="Comment"># push arg</span> <span id="L45" class="LineNr"> 45 </span> 68/push 5/imm32 -<span id="L46" class="LineNr"> 46 </span> <span class="Comment"># EAX <- call</span> +<span id="L46" class="LineNr"> 46 </span> <span class="Comment"># call</span> <span id="L47" class="LineNr"> 47 </span> e8/call factorial/disp32 <span id="L48" class="LineNr"> 48 </span> <span class="Comment"># discard arg</span> <span id="L49" class="LineNr"> 49 </span> 81 0/subop/add 3/mod/direct 4/rm32/ESP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 4/imm32 <span class="Comment"># add to ESP</span> @@ -123,42 +123,44 @@ if ('onhashchange' in window) { <span id="L67" class="LineNr"> 67 </span> <span class="Comment"># EBX: n-1</span> <span id="L68" class="LineNr"> 68 </span> 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 3/r32/EBX 8/disp8 <span class="Delimiter"> . </span> <span class="Comment"># copy *(EBP+8) to EBX</span> <span id="L69" class="LineNr"> 69 </span> 81 5/subop/subtract 3/mod/direct 3/rm32/EBX <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 1/imm32 <span class="Comment"># subtract from EBX</span> -<span id="L70" class="LineNr"> 70 </span> <span class="Comment"># EAX: factorial(n-1)</span> -<span id="L71" class="LineNr"> 71 </span> 53/push-EBX -<span id="L72" class="LineNr"> 72 </span> e8/call <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> factorial/disp32 -<span id="L73" class="LineNr"> 73 </span> <span class="Comment"># discard arg</span> -<span id="L74" class="LineNr"> 74 </span> 81 0/subop/add 3/mod/direct 4/rm32/ESP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 4/imm32 <span class="Comment"># add to ESP</span> -<span id="L75" class="LineNr"> 75 </span> <span class="Comment"># return n * factorial(n-1)</span> -<span id="L76" class="LineNr"> 76 </span> f7 4/subop/multiply 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8 <span class="Delimiter"> . </span> <span class="Comment"># multiply *(EBP+8) into EAX</span> -<span id="L77" class="LineNr"> 77 </span> <span class="Comment"># TODO: check for overflow</span> -<span id="L78" class="LineNr"> 78 </span>$factorial:exit: -<span id="L79" class="LineNr"> 79 </span> <span class="Comment"># epilog</span> -<span id="L80" class="LineNr"> 80 </span> 5b/pop-to-EBX -<span id="L81" class="LineNr"> 81 </span> 89/copy 3/mod/direct 4/rm32/ESP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 5/r32/EBP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Comment"># copy EBP to ESP</span> -<span id="L82" class="LineNr"> 82 </span> 5d/pop-to-EBP -<span id="L83" class="LineNr"> 83 </span> c3/return -<span id="L84" class="LineNr"> 84 </span> -<span id="L85" class="LineNr"> 85 </span>test_factorial: -<span id="L86" class="LineNr"> 86 </span> <span class="Comment"># factorial(5)</span> -<span id="L87" class="LineNr"> 87 </span> <span class="Comment"># push arg</span> -<span id="L88" class="LineNr"> 88 </span> 68/push 5/imm32 -<span id="L89" class="LineNr"> 89 </span> <span class="Comment"># call</span> -<span id="L90" class="LineNr"> 90 </span> e8/call factorial/disp32 -<span id="L91" class="LineNr"> 91 </span> <span class="Comment"># discard arg</span> -<span id="L92" class="LineNr"> 92 </span> 81 0/subop/add 3/mod/direct 4/rm32/ESP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 4/imm32 <span class="Comment"># add to ESP</span> -<span id="L93" class="LineNr"> 93 </span> <span class="Comment"># check_ints_equal(EAX, 120, failure message)</span> -<span id="L94" class="LineNr"> 94 </span> <span class="Comment"># push args</span> -<span id="L95" class="LineNr"> 95 </span> 68/push "F - test_factorial"/imm32 -<span id="L96" class="LineNr"> 96 </span> 68/push 0x78/imm32/expected-120 -<span id="L97" class="LineNr"> 97 </span> 50/push-EAX -<span id="L98" class="LineNr"> 98 </span> <span class="Comment"># call</span> -<span id="L99" class="LineNr"> 99 </span> e8/call check_ints_equal/disp32 -<span id="L100" class="LineNr">100 </span> <span class="Comment"># discard args</span> -<span id="L101" class="LineNr">101 </span> 81 0/subop/add 3/mod/direct 4/rm32/ESP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 0xc/imm32 <span class="Comment"># add to ESP</span> -<span id="L102" class="LineNr">102 </span> <span class="Comment"># end</span> -<span id="L103" class="LineNr">103 </span> c3/return -<span id="L104" class="LineNr">104 </span> -<span id="L105" class="LineNr">105 </span><span class="Comment"># vim:ft=subx:nowrap:so=0</span> +<span id="L70" class="LineNr"> 70 </span> <span class="Comment"># EAX = factorial(n-1)</span> +<span id="L71" class="LineNr"> 71 </span> <span class="Comment"># push args</span> +<span id="L72" class="LineNr"> 72 </span> 53/push-EBX +<span id="L73" class="LineNr"> 73 </span> <span class="Comment"># call</span> +<span id="L74" class="LineNr"> 74 </span> e8/call <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> factorial/disp32 +<span id="L75" class="LineNr"> 75 </span> <span class="Comment"># discard arg</span> +<span id="L76" class="LineNr"> 76 </span> 81 0/subop/add 3/mod/direct 4/rm32/ESP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 4/imm32 <span class="Comment"># add to ESP</span> +<span id="L77" class="LineNr"> 77 </span> <span class="Comment"># return n * factorial(n-1)</span> +<span id="L78" class="LineNr"> 78 </span> f7 4/subop/multiply 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 8/disp8 <span class="Delimiter"> . </span> <span class="Comment"># multiply *(EBP+8) into EAX</span> +<span id="L79" class="LineNr"> 79 </span> <span class="Comment"># TODO: check for overflow</span> +<span id="L80" class="LineNr"> 80 </span>$factorial:exit: +<span id="L81" class="LineNr"> 81 </span> <span class="Comment"># epilog</span> +<span id="L82" class="LineNr"> 82 </span> 5b/pop-to-EBX +<span id="L83" class="LineNr"> 83 </span> 89/copy 3/mod/direct 4/rm32/ESP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 5/r32/EBP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Comment"># copy EBP to ESP</span> +<span id="L84" class="LineNr"> 84 </span> 5d/pop-to-EBP +<span id="L85" class="LineNr"> 85 </span> c3/return +<span id="L86" class="LineNr"> 86 </span> +<span id="L87" class="LineNr"> 87 </span>test_factorial: +<span id="L88" class="LineNr"> 88 </span> <span class="Comment"># factorial(5)</span> +<span id="L89" class="LineNr"> 89 </span> <span class="Comment"># push arg</span> +<span id="L90" class="LineNr"> 90 </span> 68/push 5/imm32 +<span id="L91" class="LineNr"> 91 </span> <span class="Comment"># call</span> +<span id="L92" class="LineNr"> 92 </span> e8/call factorial/disp32 +<span id="L93" class="LineNr"> 93 </span> <span class="Comment"># discard arg</span> +<span id="L94" class="LineNr"> 94 </span> 81 0/subop/add 3/mod/direct 4/rm32/ESP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 4/imm32 <span class="Comment"># add to ESP</span> +<span id="L95" class="LineNr"> 95 </span> <span class="Comment"># check_ints_equal(EAX, 120, failure message)</span> +<span id="L96" class="LineNr"> 96 </span> <span class="Comment"># push args</span> +<span id="L97" class="LineNr"> 97 </span> 68/push "F - test_factorial"/imm32 +<span id="L98" class="LineNr"> 98 </span> 68/push 0x78/imm32/expected-120 +<span id="L99" class="LineNr"> 99 </span> 50/push-EAX +<span id="L100" class="LineNr">100 </span> <span class="Comment"># call</span> +<span id="L101" class="LineNr">101 </span> e8/call check_ints_equal/disp32 +<span id="L102" class="LineNr">102 </span> <span class="Comment"># discard args</span> +<span id="L103" class="LineNr">103 </span> 81 0/subop/add 3/mod/direct 4/rm32/ESP <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> <span class="Delimiter"> . </span> 0xc/imm32 <span class="Comment"># add to ESP</span> +<span id="L104" class="LineNr">104 </span> <span class="Comment"># end</span> +<span id="L105" class="LineNr">105 </span> c3/return +<span id="L106" class="LineNr">106 </span> +<span id="L107" class="LineNr">107 </span><span class="Comment"># vim:ft=subx:nowrap:so=0</span> </pre> </body> </html> |