diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-01-16 18:31:12 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-01-16 18:31:12 -0800 |
commit | 6070c23e5e1c60d3bb169e43bddfa59b1d322427 (patch) | |
tree | 9a70e378c33c15e4779cf94abda8f37c35a5d1da /html/067parse-hex.subx.html | |
parent | 5a6601aba973ba1d1ef30b7b64438c25623b89c5 (diff) | |
download | mu-6070c23e5e1c60d3bb169e43bddfa59b1d322427.tar.gz |
5897 - rename comparison instructions
Signed and unsigned don't quite capture the essence of what the different combinations of x86 flags are doing for SubX. The crucial distinction is that one set of comparison operators is for integers and the second is for addresses.
Diffstat (limited to 'html/067parse-hex.subx.html')
-rw-r--r-- | html/067parse-hex.subx.html | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/html/067parse-hex.subx.html b/html/067parse-hex.subx.html index 1eefdb0a..227519e1 100644 --- a/html/067parse-hex.subx.html +++ b/html/067parse-hex.subx.html @@ -83,13 +83,13 @@ if ('onhashchange' in window) { <span id="L23" class="LineNr"> 23 </span> <span class="subxComment"># if s is empty return false</span> <span id="L24" class="LineNr"> 24 </span> b8/copy-to-eax 0/imm32/false <span id="L25" class="LineNr"> 25 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L26" class="LineNr"> 26 </span> 73/jump-if-greater-or-equal-unsigned $is-hex-int?:end/disp8 +<span id="L26" class="LineNr"> 26 </span> 73/jump-if-addr>= $is-hex-int?:end/disp8 <span id="L27" class="LineNr"> 27 </span> <span class="subxComment"># skip past leading '-'</span> <span id="L28" class="LineNr"> 28 </span> <span class="subxS1Comment"># . if (*curr == '-') ++curr</span> <span id="L29" class="LineNr"> 29 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span> <span id="L30" class="LineNr"> 30 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span> <span id="L31" class="LineNr"> 31 </span> 81 7/subop/compare 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> 0x2d/imm32/- <span class="subxComment"># compare ebx</span> -<span id="L32" class="LineNr"> 32 </span> 75/jump-if-not-equal $is-hex-int?:initial-0/disp8 +<span id="L32" class="LineNr"> 32 </span> 75/jump-if-!= $is-hex-int?:initial-0/disp8 <span id="L33" class="LineNr"> 33 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L34" class="LineNr"> 34 </span> 41/increment-ecx <span id="L35" class="LineNr"> 35 </span> <span class="subxComment"># skip past leading '0x'</span> @@ -98,24 +98,24 @@ if ('onhashchange' in window) { <span id="L38" class="LineNr"> 38 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span> <span id="L39" class="LineNr"> 39 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span> <span id="L40" class="LineNr"> 40 </span> 81 7/subop/compare 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> 0x30/imm32/0 <span class="subxComment"># compare ebx</span> -<span id="L41" class="LineNr"> 41 </span> 75/jump-if-not-equal $is-hex-int?:<span class="Constant">loop</span>/disp8 +<span id="L41" class="LineNr"> 41 </span> 75/jump-if-!= $is-hex-int?:<span class="Constant">loop</span>/disp8 <span id="L42" class="LineNr"> 42 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L43" class="LineNr"> 43 </span> 41/increment-ecx <span id="L44" class="LineNr"> 44 </span><span class="Constant">$is-hex-int?:initial-0x</span>: <span id="L45" class="LineNr"> 45 </span> <span class="subxS1Comment"># . if (curr >= in->end) return true</span> <span id="L46" class="LineNr"> 46 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L47" class="LineNr"> 47 </span> 73/jump-if-greater-or-equal-unsigned $is-hex-int?:true/disp8 +<span id="L47" class="LineNr"> 47 </span> 73/jump-if-addr>= $is-hex-int?:true/disp8 <span id="L48" class="LineNr"> 48 </span> <span class="subxS1Comment"># . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again</span> <span id="L49" class="LineNr"> 49 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span> <span id="L50" class="LineNr"> 50 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span> <span id="L51" class="LineNr"> 51 </span> 81 7/subop/compare 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> 0x78/imm32/x <span class="subxComment"># compare ebx</span> -<span id="L52" class="LineNr"> 52 </span> 75/jump-if-not-equal $is-hex-int?:<span class="Constant">loop</span>/disp8 +<span id="L52" class="LineNr"> 52 </span> 75/jump-if-!= $is-hex-int?:<span class="Constant">loop</span>/disp8 <span id="L53" class="LineNr"> 53 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L54" class="LineNr"> 54 </span> 41/increment-ecx <span id="L55" class="LineNr"> 55 </span><span class="Constant">$is-hex-int?:loop</span>: <span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># if (curr >= in->end) return true</span> <span id="L57" class="LineNr"> 57 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L58" class="LineNr"> 58 </span> 73/jump-if-greater-or-equal-unsigned $is-hex-int?:true/disp8 +<span id="L58" class="LineNr"> 58 </span> 73/jump-if-addr>= $is-hex-int?:true/disp8 <span id="L59" class="LineNr"> 59 </span> <span class="subxComment"># var eax : boolean = is-hex-digit?(*curr)</span> <span id="L60" class="LineNr"> 60 </span> <span class="subxS2Comment"># . . push args</span> <span id="L61" class="LineNr"> 61 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> @@ -126,7 +126,7 @@ if ('onhashchange' in window) { <span id="L66" class="LineNr"> 66 </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="L67" class="LineNr"> 67 </span> <span class="subxComment"># if (eax == false) return false</span> <span id="L68" class="LineNr"> 68 </span> 3d/compare-eax-and 0/imm32 -<span id="L69" class="LineNr"> 69 </span> 74/jump-if-equal $is-hex-int?:end/disp8 +<span id="L69" class="LineNr"> 69 </span> 74/jump-if-= $is-hex-int?:end/disp8 <span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># ++curr</span> <span id="L71" class="LineNr"> 71 </span> 41/increment-ecx <span id="L72" class="LineNr"> 72 </span> <span class="subxComment"># loop</span> @@ -435,7 +435,7 @@ if ('onhashchange' in window) { <span id="L375" class="LineNr">375 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span> <span id="L376" class="LineNr">376 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L377" class="LineNr">377 </span> 3d/compare-eax-and 0x2d/imm32/- -<span id="L378" class="LineNr">378 </span> 75/jump-if-not-equal $parse-hex-int:initial-0/disp8 +<span id="L378" class="LineNr">378 </span> 75/jump-if-!= $parse-hex-int:initial-0/disp8 <span id="L379" class="LineNr">379 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L380" class="LineNr">380 </span> 41/increment-ecx <span id="L381" class="LineNr">381 </span> <span class="subxS1Comment"># . negate = true</span> @@ -445,24 +445,24 @@ if ('onhashchange' in window) { <span id="L385" class="LineNr">385 </span> <span class="subxS1Comment"># . if (*curr != '0') jump to loop</span> <span id="L386" class="LineNr">386 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L387" class="LineNr">387 </span> 3d/compare-eax-and 0x30/imm32/0 -<span id="L388" class="LineNr">388 </span> 75/jump-if-not-equal $parse-hex-int:<span class="Constant">loop</span>/disp8 +<span id="L388" class="LineNr">388 </span> 75/jump-if-!= $parse-hex-int:<span class="Constant">loop</span>/disp8 <span id="L389" class="LineNr">389 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L390" class="LineNr">390 </span> 41/increment-ecx <span id="L391" class="LineNr">391 </span><span class="Constant">$parse-hex-int:initial-0x</span>: <span id="L392" class="LineNr">392 </span> <span class="subxS1Comment"># . if (curr >= in->end) return result</span> <span id="L393" class="LineNr">393 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L394" class="LineNr">394 </span> 73/jump-if-greater-or-equal-unsigned $parse-hex-int:end/disp8 +<span id="L394" class="LineNr">394 </span> 73/jump-if-addr>= $parse-hex-int:end/disp8 <span id="L395" class="LineNr">395 </span> <span class="subxS1Comment"># . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again</span> <span id="L396" class="LineNr">396 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span> <span id="L397" class="LineNr">397 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L398" class="LineNr">398 </span> 3d/compare-eax-and 0x78/imm32/x -<span id="L399" class="LineNr">399 </span> 75/jump-if-not-equal $parse-hex-int:<span class="Constant">loop</span>/disp8 +<span id="L399" class="LineNr">399 </span> 75/jump-if-!= $parse-hex-int:<span class="Constant">loop</span>/disp8 <span id="L400" class="LineNr">400 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L401" class="LineNr">401 </span> 41/increment-ecx <span id="L402" class="LineNr">402 </span><span class="Constant">$parse-hex-int:loop</span>: <span id="L403" class="LineNr">403 </span> <span class="subxComment"># if (curr >= in->end) break</span> <span id="L404" class="LineNr">404 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L405" class="LineNr">405 </span> 73/jump-if-greater-or-equal-unsigned $parse-hex-int:negate/disp8 +<span id="L405" class="LineNr">405 </span> 73/jump-if-addr>= $parse-hex-int:negate/disp8 <span id="L406" class="LineNr">406 </span> <span class="subxComment"># var eax : int = from-hex-char(*curr)</span> <span id="L407" class="LineNr">407 </span> <span class="subxS2Comment"># . . copy arg to eax</span> <span id="L408" class="LineNr">408 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> @@ -478,7 +478,7 @@ if ('onhashchange' in window) { <span id="L418" class="LineNr">418 </span><span class="Constant">$parse-hex-int:negate</span>: <span id="L419" class="LineNr">419 </span> <span class="subxComment"># if (negate?) result = -result</span> <span id="L420" class="LineNr">420 </span> 81 7/subop/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32/false <span class="subxComment"># compare esi</span> -<span id="L421" class="LineNr">421 </span> 74/jump-if-equal $parse-hex-int:end/disp8 +<span id="L421" class="LineNr">421 </span> 74/jump-if-= $parse-hex-int:end/disp8 <span id="L422" class="LineNr">422 </span> f7 3/subop/negate 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> <span class="Normal"> . </span> <span class="subxComment"># negate ebx</span> <span id="L423" class="LineNr">423 </span><span class="Constant">$parse-hex-int:end</span>: <span id="L424" class="LineNr">424 </span> <span class="subxComment"># return result</span> @@ -707,18 +707,18 @@ if ('onhashchange' in window) { <span id="L647" class="LineNr">647 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to ecx</span> <span id="L648" class="LineNr">648 </span> <span class="subxComment"># return false if c < '0'</span> <span id="L649" class="LineNr">649 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x30/imm32 <span class="subxComment"># compare ecx</span> -<span id="L650" class="LineNr">650 </span> 7c/jump-if-lesser $is-hex-digit?:false/disp8 +<span id="L650" class="LineNr">650 </span> 7c/jump-if-< $is-hex-digit?:false/disp8 <span id="L651" class="LineNr">651 </span> <span class="subxComment"># return true if c <= '9'</span> <span id="L652" class="LineNr">652 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x39/imm32 <span class="subxComment"># compare ecx</span> -<span id="L653" class="LineNr">653 </span> 7e/jump-if-lesser-or-equal $is-hex-digit?:true/disp8 +<span id="L653" class="LineNr">653 </span> 7e/jump-if-<= $is-hex-digit?:true/disp8 <span id="L654" class="LineNr">654 </span> <span class="subxComment"># drop case</span> <span id="L655" class="LineNr">655 </span> 25/and-eax-with 0x5f/imm32 <span id="L656" class="LineNr">656 </span> <span class="subxComment"># return false if c > 'f'</span> <span id="L657" class="LineNr">657 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x66/imm32 <span class="subxComment"># compare ecx</span> -<span id="L658" class="LineNr">658 </span> 7f/jump-if-greater $is-hex-digit?:false/disp8 +<span id="L658" class="LineNr">658 </span> 7f/jump-if-> $is-hex-digit?:false/disp8 <span id="L659" class="LineNr">659 </span> <span class="subxComment"># return true if c >= 'a'</span> <span id="L660" class="LineNr">660 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x61/imm32 <span class="subxComment"># compare ecx</span> -<span id="L661" class="LineNr">661 </span> 7d/jump-if-greater-or-equal $is-hex-digit?:true/disp8 +<span id="L661" class="LineNr">661 </span> 7d/jump-if->= $is-hex-digit?:true/disp8 <span id="L662" class="LineNr">662 </span> <span class="subxComment"># otherwise return false</span> <span id="L663" class="LineNr">663 </span><span class="Constant">$is-hex-digit?:false</span>: <span id="L664" class="LineNr">664 </span> b8/copy-to-eax 0/imm32/false @@ -864,15 +864,15 @@ if ('onhashchange' in window) { <span id="L804" class="LineNr">804 </span><span class="Constant">$from-hex-char:check0</span>: <span id="L805" class="LineNr">805 </span> <span class="subxComment"># if (eax < '0') goto abort</span> <span id="L806" class="LineNr">806 </span> 3d/compare-eax-with 0x30/imm32/0 -<span id="L807" class="LineNr">807 </span> 7c/jump-if-lesser $from-hex-char:abort/disp8 +<span id="L807" class="LineNr">807 </span> 7c/jump-if-< $from-hex-char:abort/disp8 <span id="L808" class="LineNr">808 </span><span class="Constant">$from-hex-char:check1</span>: <span id="L809" class="LineNr">809 </span> <span class="subxComment"># if (eax > 'f') goto abort</span> <span id="L810" class="LineNr">810 </span> 3d/compare-eax-with 0x66/imm32/f -<span id="L811" class="LineNr">811 </span> 7f/jump-if-greater $from-hex-char:abort/disp8 +<span id="L811" class="LineNr">811 </span> 7f/jump-if-> $from-hex-char:abort/disp8 <span id="L812" class="LineNr">812 </span><span class="Constant">$from-hex-char:check2</span>: <span id="L813" class="LineNr">813 </span> <span class="subxComment"># if (eax > '9') goto next check</span> <span id="L814" class="LineNr">814 </span> 3d/compare-eax-with 0x39/imm32/9 -<span id="L815" class="LineNr">815 </span> 7f/jump-if-greater $from-hex-char:check3/disp8 +<span id="L815" class="LineNr">815 </span> 7f/jump-if-> $from-hex-char:check3/disp8 <span id="L816" class="LineNr">816 </span><span class="Constant">$from-hex-char:digit</span>: <span id="L817" class="LineNr">817 </span> <span class="subxComment"># return eax - '0'</span> <span id="L818" class="LineNr">818 </span> 2d/subtract-from-eax 0x30/imm32/0 @@ -880,7 +880,7 @@ if ('onhashchange' in window) { <span id="L820" class="LineNr">820 </span><span class="Constant">$from-hex-char:check3</span>: <span id="L821" class="LineNr">821 </span> <span class="subxComment"># if (eax < 'a') goto abort</span> <span id="L822" class="LineNr">822 </span> 3d/compare-eax-with 0x61/imm32/a -<span id="L823" class="LineNr">823 </span> 7c/jump-if-lesser $from-hex-char:abort/disp8 +<span id="L823" class="LineNr">823 </span> 7c/jump-if-< $from-hex-char:abort/disp8 <span id="L824" class="LineNr">824 </span><span class="Constant">$from-hex-char:letter</span>: <span id="L825" class="LineNr">825 </span> <span class="subxComment"># return eax - ('a'-10)</span> <span id="L826" class="LineNr">826 </span> 2d/subtract-from-eax 0x57/imm32/a-10 |