about summary refs log blame commit diff stats
path: root/README.md
blob: b075e3f9e1d1241780a53edf02190ee9f1aa5a8b (plain) (tree)



















                                                                                
# aerc

aerc is a *work in progress* email client for your terminal.

It is not yet suitable for daily use.

## Building

    go build

## Usage

Start by copying the example configs, `config/aerc.conf` and
`config/accounts.conf` and editing them to taste, to `~/.config`. Then run
`./aerc2`.

## Contributing

Send patches to
[~sircmpwn/public-inbox@lists.sr.ht](mailto:~sircmpwn/public-inbox@lists.sr.ht).
#n221'>221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Mu - 117write-int-hex.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="colorscheme" content="minimal-light">
<style>
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>

<script>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  var lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/main/117write-int-hex.subx'>https://github.com/akkartik/mu/blob/main/117write-int-hex.subx</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">  1 </span><span class="subxComment"># Write out the (hex) textual representation of numbers.</span>
<span id="L2" class="LineNr">  2 </span>
<span id="L3" class="LineNr">  3 </span>== code
<span id="L4" class="LineNr">  4 </span><span class="subxComment">#   instruction                     effective address                                                   register    displacement    immediate</span>
<span id="L5" class="LineNr">  5 </span><span class="subxS1Comment"># . op          subop               mod             rm32          base        index         scale       r32</span>
<span id="L6" class="LineNr">  6 </span><span class="subxS1Comment"># . 1-3 bytes   3 bits              2 bits          3 bits        3 bits      3 bits        2 bits      2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
<span id="L7" class="LineNr">  7 </span>
<span id="L8" class="LineNr">  8 </span><span class="subxComment"># convert the lowest nibble of eax to ascii and return it in the lowest byte of eax</span>
<span id="L9" class="LineNr">  9 </span><span class="subxFunction">to-hex-char</span>:  <span class="subxComment"># in/eax: int -&gt; out/eax: int</span>
<span id="L10" class="LineNr"> 10 </span>    <span class="subxComment"># no error checking; accepts argument in eax</span>
<span id="L11" class="LineNr"> 11 </span>    <span class="subxComment"># if (eax &lt;= 9) return eax + '0'</span>
<span id="L12" class="LineNr"> 12 </span>    3d/compare-eax-with  0x9/imm32/9
<span id="L13" class="LineNr"> 13 </span>    7f/jump-if-&gt;  $to-hex-char:else/disp8
<span id="L14" class="LineNr"> 14 </span>    05/add-to-eax  0x30/imm32/0
<span id="L15" class="LineNr"> 15 </span>    c3/return
<span id="L16" class="LineNr"> 16 </span><span class="Constant">$to-hex-char:else</span>:
<span id="L17" class="LineNr"> 17 </span>    <span class="subxComment"># otherwise return eax + 'a' - 10</span>
<span id="L18" class="LineNr"> 18 </span>    05/add-to-eax  0x57/imm32/a-10
<span id="L19" class="LineNr"> 19 </span>    c3/return
<span id="L20" class="LineNr"> 20 </span>
<span id="L21" class="LineNr"> 21 </span><span class="subxFunction">append-byte-hex</span>:  <span class="subxComment"># f: (addr stream byte), n: int</span>
<span id="L22" class="LineNr"> 22 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L23" class="LineNr"> 23 </span>    55/push-ebp
<span id="L24" class="LineNr"> 24 </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="L25" class="LineNr"> 25 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L26" class="LineNr"> 26 </span>    50/push-eax
<span id="L27" class="LineNr"> 27 </span>    <span class="subxComment"># AL = convert upper nibble to hex</span>
<span id="L28" class="LineNr"> 28 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+12) to eax</span>
<span id="L29" class="LineNr"> 29 </span>    c1/shift    5/subop/logic-right 3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm8            <span class="subxComment"># shift eax right by 4 bits, while padding zeroes</span>
<span id="L30" class="LineNr"> 30 </span>    25/and-eax  0xf/imm32
<span id="L31" class="LineNr"> 31 </span>    <span class="subxS1Comment"># . AL = to-hex-char(AL)</span>
<span id="L32" class="LineNr"> 32 </span>    e8/call  <a href='117write-int-hex.subx.html#L9'>to-hex-char</a>/disp32
<span id="L33" class="LineNr"> 33 </span>    <span class="subxComment"># append-byte(f, AL)</span>
<span id="L34" class="LineNr"> 34 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L35" class="LineNr"> 35 </span>    50/push-eax
<span id="L36" class="LineNr"> 36 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L37" class="LineNr"> 37 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L38" class="LineNr"> 38 </span>    e8/call  <a href='115write-byte.subx.html#L12'>append-byte</a>/disp32
<span id="L39" class="LineNr"> 39 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L40" class="LineNr"> 40 </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="L41" class="LineNr"> 41 </span>    <span class="subxComment"># AL = convert lower nibble to hex</span>
<span id="L42" class="LineNr"> 42 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+12) to eax</span>
<span id="L43" class="LineNr"> 43 </span>    25/and-eax  0xf/imm32
<span id="L44" class="LineNr"> 44 </span>    <span class="subxS1Comment"># . AL = to-hex-char(AL)</span>
<span id="L45" class="LineNr"> 45 </span>    e8/call  <a href='117write-int-hex.subx.html#L9'>to-hex-char</a>/disp32
<span id="L46" class="LineNr"> 46 </span>    <span class="subxComment"># append-byte(f, AL)</span>
<span id="L47" class="LineNr"> 47 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L48" class="LineNr"> 48 </span>    50/push-eax
<span id="L49" class="LineNr"> 49 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L50" class="LineNr"> 50 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L51" class="LineNr"> 51 </span>    e8/call  <a href='115write-byte.subx.html#L12'>append-byte</a>/disp32
<span id="L52" class="LineNr"> 52 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L53" class="LineNr"> 53 </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="L54" class="LineNr"> 54 </span><span class="Constant">$append-byte-hex:end</span>:
<span id="L55" class="LineNr"> 55 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L56" class="LineNr"> 56 </span>    58/pop-to-eax
<span id="L57" class="LineNr"> 57 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L58" class="LineNr"> 58 </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="L59" class="LineNr"> 59 </span>    5d/pop-to-ebp
<span id="L60" class="LineNr"> 60 </span>    c3/return
<span id="L61" class="LineNr"> 61 </span>
<span id="L62" class="LineNr"> 62 </span><span class="subxTest">test-append-byte-hex</span>:
<span id="L63" class="LineNr"> 63 </span>    <span class="subxH1Comment"># - check that append-byte-hex adds the hex textual representation</span>
<span id="L64" class="LineNr"> 64 </span>    <span class="subxComment"># setup</span>
<span id="L65" class="LineNr"> 65 </span>    <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L66" class="LineNr"> 66 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L67" class="LineNr"> 67 </span>    68/push  <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L68" class="LineNr"> 68 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L69" class="LineNr"> 69 </span>    e8/call  <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L70" class="LineNr"> 70 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L71" class="LineNr"> 71 </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="L72" class="LineNr"> 72 </span>    <span class="subxComment"># append-byte-hex(_test-stream, 0xa)  # exercises digit, non-digit as well as leading zero</span>
<span id="L73" class="LineNr"> 73 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L74" class="LineNr"> 74 </span>    68/push  0xa/imm32
<span id="L75" class="LineNr"> 75 </span>    68/push  <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L76" class="LineNr"> 76 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L77" class="LineNr"> 77 </span>    e8/call  <a href='117write-int-hex.subx.html#L21'>append-byte-hex</a>/disp32
<span id="L78" class="LineNr"> 78 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L79" class="LineNr"> 79 </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="L80" class="LineNr"> 80 </span>    <span class="subxComment"># check-stream-equal(_test-stream, &quot;0a&quot;, msg)</span>
<span id="L81" class="LineNr"> 81 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L82" class="LineNr"> 82 </span>    68/push  <span class="Constant">&quot;F - test-append-byte-hex&quot;</span>/imm32
<span id="L83" class="LineNr"> 83 </span>    68/push  <span class="Constant">&quot;0a&quot;</span>/imm32
<span id="L84" class="LineNr"> 84 </span>    68/push  <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L85" class="LineNr"> 85 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L86" class="LineNr"> 86 </span>    e8/call  <a href='109stream-equal.subx.html#L194'>check-stream-equal</a>/disp32
<span id="L87" class="LineNr"> 87 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L88" class="LineNr"> 88 </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="L89" class="LineNr"> 89 </span>    <span class="subxS1Comment"># . end</span>
<span id="L90" class="LineNr"> 90 </span>    c3/return
<span id="L91" class="LineNr"> 91 </span>
<span id="L92" class="LineNr"> 92 </span><span class="subxFunction">write-int32-hex</span>:  <span class="subxComment"># f: (addr stream byte), n: int</span>
<span id="L93" class="LineNr"> 93 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L94" class="LineNr"> 94 </span>    55/push-ebp
<span id="L95" class="LineNr"> 95 </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="L96" class="LineNr"> 96 </span><span class="Constant">$write-int32-hex:hex-prefix</span>:
<span id="L97" class="LineNr"> 97 </span>    <span class="subxComment"># write(f, &quot;0x&quot;)</span>
<span id="L98" class="LineNr"> 98 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L99" class="LineNr"> 99 </span>    68/push  <span class="Constant">&quot;0x&quot;</span>/imm32
<span id="L100" class="LineNr">100 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L101" class="LineNr">101 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L102" class="LineNr">102 </span>    e8/call  <a href='108write.subx.html#L11'>write</a>/disp32
<span id="L103" class="LineNr">103 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L104" class="LineNr">104 </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="L105" class="LineNr">105 </span><span class="Constant">$write-int32-hex:rest</span>:
<span id="L106" class="LineNr">106 </span>    <span class="subxComment"># write-int32-hex-bits(f, n, 32)</span>
<span id="L107" class="LineNr">107 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L108" class="LineNr">108 </span>    68/push  0x20/imm32
<span id="L109" class="LineNr">109 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L110" class="LineNr">110 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L111" class="LineNr">111 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L112" class="LineNr">112 </span>    e8/call  <a href='117write-int-hex.subx.html#L123'>write-int32-hex-bits</a>/disp32
<span id="L113" class="LineNr">113 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L114" class="LineNr">114 </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="L115" class="LineNr">115 </span><span class="Constant">$write-int32-hex:end</span>:
<span id="L116" class="LineNr">116 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L117" class="LineNr">117 </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="L118" class="LineNr">118 </span>    5d/pop-to-ebp
<span id="L119" class="LineNr">119 </span>    c3/return
<span id="L120" class="LineNr">120 </span>
<span id="L121" class="LineNr">121 </span><span class="subxComment"># print rightmost 'bits' of 'n'</span>
<span id="L122" class="LineNr">122 </span><span class="subxComment"># bits must be multiple of 4</span>
<span id="L123" class="LineNr">123 </span><span class="subxFunction">write-int32-hex-bits</span>:  <span class="subxComment"># f: (addr stream byte), n: int, bits: int</span>
<span id="L124" class="LineNr">124 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L125" class="LineNr">125 </span>    <span class="subxComment">#  bits -= 4</span>
<span id="L126" class="LineNr">126 </span>    <span class="subxComment">#  while true</span>
<span id="L127" class="LineNr">127 </span>    <span class="subxComment">#    if (bits &lt; 0) break</span>
<span id="L128" class="LineNr">128 </span>    <span class="subxComment">#    eax = n &gt;&gt; bits</span>
<span id="L129" class="LineNr">129 </span>    <span class="subxComment">#    eax = eax &amp; 0xf</span>
<span id="L130" class="LineNr">130 </span>    <span class="subxComment">#    append-byte(f, AL)</span>
<span id="L131" class="LineNr">131 </span>    <span class="subxComment">#    bits -= 4</span>
<span id="L132" class="LineNr">132 </span>    <span class="subxComment">#</span>
<span id="L133" class="LineNr">133 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L134" class="LineNr">134 </span>    55/push-ebp
<span id="L135" class="LineNr">135 </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="L136" class="LineNr">136 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L137" class="LineNr">137 </span>    50/push-eax
<span id="L138" class="LineNr">138 </span>    51/push-ecx
<span id="L139" class="LineNr">139 </span>    <span class="subxComment"># ecx = bits-4</span>
<span id="L140" class="LineNr">140 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          1/r32/ecx   0x10/disp8     <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+16) to ecx</span>
<span id="L141" class="LineNr">141 </span>    81          5/subop/subtract    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>              4/imm32           <span class="subxComment"># subtract from ecx</span>
<span id="L142" class="LineNr">142 </span><span class="Constant">$write-int32-hex-bits:loop</span>:
<span id="L143" class="LineNr">143 </span>    <span class="subxComment"># if (bits &lt; 0) break</span>
<span id="L144" class="LineNr">144 </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>              0/imm32           <span class="subxComment"># compare ecx</span>
<span id="L145" class="LineNr">145 </span>    7c/jump-if-&lt;  $write-int32-hex-bits:end/disp8
<span id="L146" class="LineNr">146 </span>    <span class="subxComment"># eax = n &gt;&gt; bits</span>
<span id="L147" class="LineNr">147 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax   0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+12) to eax</span>
<span id="L148" class="LineNr">148 </span>    d3/&gt;&gt;ecx    5/subop/pad-zeroes  3/mod/direct    0/rm32/eax   <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"># shift eax right by ecx bits, padding zeroes</span>
<span id="L149" class="LineNr">149 </span>    <span class="subxComment"># eax = to-hex-char(AL)</span>
<span id="L150" class="LineNr">150 </span>    25/and-eax  0xf/imm32
<span id="L151" class="LineNr">151 </span>    e8/call  <a href='117write-int-hex.subx.html#L9'>to-hex-char</a>/disp32
<span id="L152" class="LineNr">152 </span>    <span class="subxComment"># append-byte(f, AL)</span>
<span id="L153" class="LineNr">153 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L154" class="LineNr">154 </span>    50/push-eax
<span id="L155" class="LineNr">155 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L156" class="LineNr">156 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L157" class="LineNr">157 </span>    e8/call  <a href='115write-byte.subx.html#L12'>append-byte</a>/disp32
<span id="L158" class="LineNr">158 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L159" class="LineNr">159 </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="L160" class="LineNr">160 </span>    <span class="subxComment"># bits -= 4</span>
<span id="L161" class="LineNr">161 </span>    81          5/subop/subtract    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>              4/imm32           <span class="subxComment"># subtract from ecx</span>
<span id="L162" class="LineNr">162 </span>    eb/jump  $write-int32-hex-bits:<span class="Constant">loop</span>/disp8
<span id="L163" class="LineNr">163 </span><span class="Constant">$write-int32-hex-bits:end</span>:
<span id="L164" class="LineNr">164 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L165" class="LineNr">165 </span>    59/pop-to-ecx
<span id="L166" class="LineNr">166 </span>    58/pop-to-eax
<span id="L167" class="LineNr">167 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L168" class="LineNr">168 </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="L169" class="LineNr">169 </span>    5d/pop-to-ebp
<span id="L170" class="LineNr">170 </span>    c3/return
<span id="L171" class="LineNr">171 </span>
<span id="L172" class="LineNr">172 </span><span class="subxTest">test-write-int32-hex</span>:
<span id="L173" class="LineNr">173 </span>    <span class="subxH1Comment"># - check that write-int32-hex prints the hex textual representation</span>
<span id="L174" class="LineNr">174 </span>    <span class="subxComment"># setup</span>
<span id="L175" class="LineNr">175 </span>    <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L176" class="LineNr">176 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L177" class="LineNr">177 </span>    68/push  <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L178" class="LineNr">178 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L179" class="LineNr">179 </span>    e8/call  <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L180" class="LineNr">180 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L181" class="LineNr">181 </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="L182" class="LineNr">182 </span>    <span class="subxComment"># write-int32-hex(_test-stream, 0x8899aa)</span>
<span id="L183" class="LineNr">183 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L184" class="LineNr">184 </span>    68/push  0x8899aa/imm32
<span id="L185" class="LineNr">185 </span>    68/push  <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L186" class="LineNr">186 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L187" class="LineNr">187 </span>    e8/call  <a href='117write-int-hex.subx.html#L92'>write-int32-hex</a>/disp32
<span id="L188" class="LineNr">188 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L189" class="LineNr">189 </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="L190" class="LineNr">190 </span>    <span class="subxComment"># check-stream-equal(_test-stream, &quot;0x008899aa&quot;, msg)</span>
<span id="L191" class="LineNr">191 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L192" class="LineNr">192 </span>    68/push  <span class="Constant">&quot;F - test-write-int32-hex&quot;</span>/imm32
<span id="L193" class="LineNr">193 </span>    68/push  <span class="Constant">&quot;0x008899aa&quot;</span>/imm32
<span id="L194" class="LineNr">194 </span>    68/push  <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L195" class="LineNr">195 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L196" class="LineNr">196 </span>    e8/call  <a href='109stream-equal.subx.html#L194'>check-stream-equal</a>/disp32
<span id="L197" class="LineNr">197 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L198" class="LineNr">198 </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="L199" class="LineNr">199 </span>    <span class="subxS1Comment"># . end</span>
<span id="L200" class="LineNr">200 </span>    c3/return
<span id="L201" class="LineNr">201 </span>
<span id="L202" class="LineNr">202 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->