about summary refs log tree commit diff stats
path: root/html/subx/014indirect_addressing.cc.html
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2018-09-23 22:38:16 -0700
committerKartik Agaram <vc@akkartik.com>2018-09-23 22:38:16 -0700
commit37d53a70958bfe5b1d7946229af9c12f0b865abc (patch)
treeaf209b4fed1411344ad5aa6ead0e168c718b54b5 /html/subx/014indirect_addressing.cc.html
parent76cb753a49974f6bb5a836a52445adf97de4a7cc (diff)
downloadmu-37d53a70958bfe5b1d7946229af9c12f0b865abc.tar.gz
4512
Diffstat (limited to 'html/subx/014indirect_addressing.cc.html')
-rw-r--r--html/subx/014indirect_addressing.cc.html57
1 files changed, 40 insertions, 17 deletions
diff --git a/html/subx/014indirect_addressing.cc.html b/html/subx/014indirect_addressing.cc.html
index 1dc22b7e..b3594524 100644
--- a/html/subx/014indirect_addressing.cc.html
+++ b/html/subx/014indirect_addressing.cc.html
@@ -82,7 +82,7 @@ if ('onhashchange' in window) {
 <span id="L18" class="LineNr"> 18 </span><span class="Normal">case</span> <span class="Constant">0</span>:  <span class="Comment">// indirect addressing</span>
 <span id="L19" class="LineNr"> 19 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>rm<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L20" class="LineNr"> 20 </span>  <span class="Normal">default</span>:  <span class="Comment">// address in register</span>
-<span id="L21" class="LineNr"> 21 </span>    <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; Reg[rm]<span class="Delimiter">.</span>u &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L21" class="LineNr"> 21 </span>    <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; Reg[rm]<span class="Delimiter">.</span>u &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L22" class="LineNr"> 22 </span>    addr = Reg[rm]<span class="Delimiter">.</span>u<span class="Delimiter">;</span>
 <span id="L23" class="LineNr"> 23 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L24" class="LineNr"> 24 </span>  <span class="Comment">// End Mod 0 Special-cases(addr)</span>
@@ -111,7 +111,7 @@ if ('onhashchange' in window) {
 <span id="L47" class="LineNr"> 47 </span><span class="Normal">case</span> <span class="Constant">0x03</span>: <span class="Delimiter">{</span>  <span class="Comment">// add r/m32 to r32</span>
 <span id="L48" class="LineNr"> 48 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
 <span id="L49" class="LineNr"> 49 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
-<span id="L50" class="LineNr"> 50 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;add r/m32 to &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L50" class="LineNr"> 50 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;add r/m32 to &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L51" class="LineNr"> 51 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
 <span id="L52" class="LineNr"> 52 </span>  <a href='010---vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>+<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>i<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
 <span id="L53" class="LineNr"> 53 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -154,7 +154,7 @@ if ('onhashchange' in window) {
 <span id="L90" class="LineNr"> 90 </span><span class="Normal">case</span> <span class="Constant">0x2b</span>: <span class="Delimiter">{</span>  <span class="Comment">// subtract r/m32 from r32</span>
 <span id="L91" class="LineNr"> 91 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
 <span id="L92" class="LineNr"> 92 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
-<span id="L93" class="LineNr"> 93 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subtract r/m32 from &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L93" class="LineNr"> 93 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subtract r/m32 from &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L94" class="LineNr"> 94 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
 <span id="L95" class="LineNr"> 95 </span>  <a href='010---vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>-<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>i<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
 <span id="L96" class="LineNr"> 96 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -197,7 +197,7 @@ if ('onhashchange' in window) {
 <span id="L133" class="LineNr">133 </span><span class="Normal">case</span> <span class="Constant">0x23</span>: <span class="Delimiter">{</span>  <span class="Comment">// and r/m32 with r32</span>
 <span id="L134" class="LineNr">134 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
 <span id="L135" class="LineNr">135 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
-<span id="L136" class="LineNr">136 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;and r/m32 with &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L136" class="LineNr">136 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;and r/m32 with &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L137" class="LineNr">137 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
 <span id="L138" class="LineNr">138 </span>  <a href='010---vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>&amp;<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
 <span id="L139" class="LineNr">139 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -240,7 +240,7 @@ if ('onhashchange' in window) {
 <span id="L176" class="LineNr">176 </span><span class="Normal">case</span> <span class="Constant">0x0b</span>: <span class="Delimiter">{</span>  <span class="Comment">// or r/m32 with r32</span>
 <span id="L177" class="LineNr">177 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
 <span id="L178" class="LineNr">178 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
-<span id="L179" class="LineNr">179 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;or r/m32 with &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L179" class="LineNr">179 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;or r/m32 with &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L180" class="LineNr">180 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
 <span id="L181" class="LineNr">181 </span>  <a href='010---vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>|<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
 <span id="L182" class="LineNr">182 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -283,7 +283,7 @@ if ('onhashchange' in window) {
 <span id="L219" class="LineNr">219 </span><span class="Normal">case</span> <span class="Constant">0x33</span>: <span class="Delimiter">{</span>  <span class="Comment">// xor r/m32 with r32</span>
 <span id="L220" class="LineNr">220 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
 <span id="L221" class="LineNr">221 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
-<span id="L222" class="LineNr">222 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;xor r/m32 with &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L222" class="LineNr">222 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;xor r/m32 with &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L223" class="LineNr">223 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
 <span id="L224" class="LineNr">224 </span>  <a href='010---vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>|<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
 <span id="L225" class="LineNr">225 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -367,7 +367,7 @@ if ('onhashchange' in window) {
 <span id="L303" class="LineNr">303 </span><span class="Normal">case</span> <span class="Constant">0x3b</span>: <span class="Delimiter">{</span>  <span class="Comment">// set SF if r32 &lt; r/m32</span>
 <span id="L304" class="LineNr">304 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
 <span id="L305" class="LineNr">305 </span>  <span class="Normal">uint8_t</span> reg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
-<span id="L306" class="LineNr">306 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compare r/m32 with &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L306" class="LineNr">306 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compare r/m32 with &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L307" class="LineNr">307 </span>  <span class="Normal">int32_t</span> arg1 = Reg[reg1]<span class="Delimiter">.</span>i<span class="Delimiter">;</span>
 <span id="L308" class="LineNr">308 </span>  <span class="Normal">int32_t</span>* arg2 = <a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
 <span id="L309" class="LineNr">309 </span>  <span class="Normal">int32_t</span> tmp1 = arg1 - *arg2<span class="Delimiter">;</span>
@@ -439,7 +439,7 @@ if ('onhashchange' in window) {
 <span id="L375" class="LineNr">375 </span><span class="Normal">case</span> <span class="Constant">0x8b</span>: <span class="Delimiter">{</span>  <span class="Comment">// copy r32 to r/m32</span>
 <span id="L376" class="LineNr">376 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
 <span id="L377" class="LineNr">377 </span>  <span class="Normal">uint8_t</span> reg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
-<span id="L378" class="LineNr">378 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy r/m32 to &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L378" class="LineNr">378 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy r/m32 to &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L379" class="LineNr">379 </span>  <span class="Normal">int32_t</span>* arg2 = <a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
 <span id="L380" class="LineNr">380 </span>  Reg[reg1]<span class="Delimiter">.</span>i = *arg2<span class="Delimiter">;</span>
 <span id="L381" class="LineNr">381 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0x&quot;</span> &lt;&lt; <a href='010---vm.cc.html#L260'>HEXWORD</a> &lt;&lt; *arg2 &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
@@ -469,7 +469,7 @@ if ('onhashchange' in window) {
 <span id="L405" class="LineNr">405 </span><span class="Normal">case</span> <span class="Constant">0x88</span>: <span class="Delimiter">{</span>  <span class="Comment">// copy r/m8 to r8</span>
 <span id="L406" class="LineNr">406 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
 <span id="L407" class="LineNr">407 </span>  <span class="Normal">uint8_t</span> reg2 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
-<span id="L408" class="LineNr">408 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy lowermost byte of &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to r8/m8-at-r32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L408" class="LineNr">408 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy lowermost byte of &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to r8/m8-at-r32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L409" class="LineNr">409 </span>  <span class="Comment">// use unsigned to zero-extend 8-bit value to 32 bits</span>
 <span id="L410" class="LineNr">410 </span>  <span class="Normal">uint8_t</span>* arg1 = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">uint8_t</span>*&gt;<span class="Delimiter">(</span><a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">));</span>
 <span id="L411" class="LineNr">411 </span>  *arg1 = Reg[reg2]<span class="Delimiter">.</span>u<span class="Delimiter">;</span>
@@ -501,12 +501,12 @@ if ('onhashchange' in window) {
 <span id="L437" class="LineNr">437 </span><span class="Normal">case</span> <span class="Constant">0x8a</span>: <span class="Delimiter">{</span>  <span class="Comment">// copy r/m8 to r8</span>
 <span id="L438" class="LineNr">438 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
 <span id="L439" class="LineNr">439 </span>  <span class="Normal">uint8_t</span> reg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
-<span id="L440" class="LineNr">440 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy r8/m8-at-r32 to lowermost byte of &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L440" class="LineNr">440 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy r8/m8-at-r32 to lowermost byte of &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L441" class="LineNr">441 </span>  <span class="Comment">// use unsigned to zero-extend 8-bit value to 32 bits</span>
 <span id="L442" class="LineNr">442 </span>  <span class="Normal">uint8_t</span>* arg2 = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">uint8_t</span>*&gt;<span class="Delimiter">(</span><a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">));</span>
 <span id="L443" class="LineNr">443 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0x&quot;</span> &lt;&lt; <a href='010---vm.cc.html#L259'>HEXBYTE</a> &lt;&lt; <a href='010---vm.cc.html#L262'>NUM</a><span class="Delimiter">(</span>*arg2<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L444" class="LineNr">444 </span>  *<span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">uint8_t</span>*&gt;<span class="Delimiter">(</span>&amp;Reg[reg1]<span class="Delimiter">.</span>u<span class="Delimiter">)</span> = *arg2<span class="Delimiter">;</span>  <span class="Comment">// assumes host is little-endian</span>
-<span id="L445" class="LineNr">445 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; now contains 0x&quot;</span> &lt;&lt; <a href='010---vm.cc.html#L260'>HEXWORD</a> &lt;&lt; Reg[reg1]<span class="Delimiter">.</span>u &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L445" class="LineNr">445 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; now contains 0x&quot;</span> &lt;&lt; <a href='010---vm.cc.html#L260'>HEXWORD</a> &lt;&lt; Reg[reg1]<span class="Delimiter">.</span>u &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L446" class="LineNr">446 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L447" class="LineNr">447 </span><span class="Delimiter">}</span>
 <span id="L448" class="LineNr">448 </span>
@@ -576,7 +576,7 @@ if ('onhashchange' in window) {
 <span id="L512" class="LineNr">512 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 000 (pop r/m32) 000 (dest EAX)</span>
 <span id="L513" class="LineNr">513 </span>== <span class="Constant">0x10</span>  <span class="Comment"># data segment</span>
 <span id="L514" class="LineNr">514 </span><span class="Constant">30</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 0x30</span>
-<span id="L515" class="LineNr">515 </span><span class="traceContains">+run: <a href='013direct_addressing.cc.html#L573'>pop</a> into r/m32</span>
+<span id="L515" class="LineNr">515 </span><span class="traceContains">+run: <a href='013direct_addressing.cc.html#L585'>pop</a> into r/m32</span>
 <span id="L516" class="LineNr">516 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
 <span id="L517" class="LineNr">517 </span><span class="traceContains">+run: popping value 0x00000030</span>
 <span id="L518" class="LineNr">518 </span><span class="traceContains">+run: incrementing <a href='010---vm.cc.html#L17'>ESP</a> to 0x00000014</span>
@@ -589,7 +589,7 @@ if ('onhashchange' in window) {
 <span id="L525" class="LineNr">525 </span>    <span class="Normal">case</span> <span class="Constant">0</span>: <span class="Delimiter">{</span>
 <span id="L526" class="LineNr">526 </span>      <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;pop into r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L527" class="LineNr">527 </span>      <span class="Normal">int32_t</span>* dest = <a href='013direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
-<span id="L528" class="LineNr">528 </span>      *dest = <a href='013direct_addressing.cc.html#L573'>pop</a><span class="Delimiter">();</span>
+<span id="L528" class="LineNr">528 </span>      *dest = <a href='013direct_addressing.cc.html#L585'>pop</a><span class="Delimiter">();</span>
 <span id="L529" class="LineNr">529 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L530" class="LineNr">530 </span>    <span class="Delimiter">}</span>
 <span id="L531" class="LineNr">531 </span>  <span class="Delimiter">}</span>
@@ -612,7 +612,7 @@ if ('onhashchange' in window) {
 <span id="L548" class="LineNr">548 </span>
 <span id="L549" class="LineNr">549 </span><span class="Delimiter">:(before &quot;End Mod 0 Special-cases(addr)&quot;)</span>
 <span id="L550" class="LineNr">550 </span><span class="Normal">case</span> <span class="Constant">5</span>:  <span class="Comment">// exception: mod 0b00 rm 0b101 =&gt; incoming disp32</span>
-<span id="L551" class="LineNr">551 </span>  addr = <a href='011run.cc.html#L302'>next32</a><span class="Delimiter">();</span>
+<span id="L551" class="LineNr">551 </span>  addr = <a href='011run.cc.html#L315'>next32</a><span class="Delimiter">();</span>
 <span id="L552" class="LineNr">552 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (disp32)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L553" class="LineNr">553 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L554" class="LineNr">554 </span>
@@ -637,7 +637,7 @@ if ('onhashchange' in window) {
 <span id="L573" class="LineNr">573 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>rm<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L574" class="LineNr">574 </span>  <span class="Normal">default</span>:
 <span id="L575" class="LineNr">575 </span>    addr = Reg[rm]<span class="Delimiter">.</span>u<span class="Delimiter">;</span>
-<span id="L576" class="LineNr">576 </span>    <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is initially 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L576" class="LineNr">576 </span>    <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is initially 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L577" class="LineNr">577 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L578" class="LineNr">578 </span>  <span class="Comment">// End Mod 1 Special-cases(addr)</span>
 <span id="L579" class="LineNr">579 </span>  <span class="Delimiter">}</span>
@@ -682,12 +682,12 @@ if ('onhashchange' in window) {
 <span id="L618" class="LineNr">618 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>rm<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L619" class="LineNr">619 </span>  <span class="Normal">default</span>:
 <span id="L620" class="LineNr">620 </span>    addr = Reg[rm]<span class="Delimiter">.</span>u<span class="Delimiter">;</span>
-<span id="L621" class="LineNr">621 </span>    <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is initially 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L621" class="LineNr">621 </span>    <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is initially 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L622" class="LineNr">622 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L623" class="LineNr">623 </span>  <span class="Comment">// End Mod 2 Special-cases(addr)</span>
 <span id="L624" class="LineNr">624 </span>  <span class="Delimiter">}</span>
 <span id="L625" class="LineNr">625 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>addr &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L626" class="LineNr">626 </span>    addr += <a href='011run.cc.html#L302'>next32</a><span class="Delimiter">();</span>
+<span id="L626" class="LineNr">626 </span>    addr += <a href='011run.cc.html#L315'>next32</a><span class="Delimiter">();</span>
 <span id="L627" class="LineNr">627 </span>    <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (after adding disp32)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
 <span id="L628" class="LineNr">628 </span>  <span class="Delimiter">}</span>
 <span id="L629" class="LineNr">629 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -705,6 +705,29 @@ if ('onhashchange' in window) {
 <span id="L641" class="LineNr">641 </span><span class="traceContains">+run: effective address is initially 0x61 (EAX)</span>
 <span id="L642" class="LineNr">642 </span><span class="traceContains">+run: effective address is 0x60 (after adding disp32)</span>
 <span id="L643" class="LineNr">643 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L644" class="LineNr">644 </span>
+<span id="L645" class="LineNr">645 </span><span class="SalientComment">//:: lea</span>
+<span id="L646" class="LineNr">646 </span>
+<span id="L647" class="LineNr">647 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L648" class="LineNr">648 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010---vm.cc.html#L228'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;8d&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;load effective address of memory in rm32 into r32&quot;</span><span class="Delimiter">);</span>
+<span id="L649" class="LineNr">649 </span>
+<span id="L650" class="LineNr">650 </span><span class="Delimiter">:(scenario lea)</span>
+<span id="L651" class="LineNr">651 </span><span class="Special">% Reg[EAX].u = 0x60;</span>
+<span id="L652" class="LineNr">652 </span>== <span class="Constant">0x1</span>
+<span id="L653" class="LineNr">653 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L654" class="LineNr">654 </span>  8d  <span class="Constant">18</span>
+<span id="L655" class="LineNr">655 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (dest EBX) 000 (src EAX)</span>
+<span id="L656" class="LineNr">656 </span><span class="traceContains">+run: lea into <a href='010---vm.cc.html#L16'>EBX</a></span>
+<span id="L657" class="LineNr">657 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L658" class="LineNr">658 </span>
+<span id="L659" class="LineNr">659 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L660" class="LineNr">660 </span><span class="Normal">case</span> <span class="Constant">0x8d</span>: <span class="Delimiter">{</span>  <span class="Comment">// lea m32 to r32</span>
+<span id="L661" class="LineNr">661 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L214'>next</a><span class="Delimiter">();</span>
+<span id="L662" class="LineNr">662 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L663" class="LineNr">663 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;lea into &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L664" class="LineNr">664 </span>  Reg[arg1]<span class="Delimiter">.</span>u = <a href='013direct_addressing.cc.html#L43'>effective_address_number</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L665" class="LineNr">665 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L666" class="LineNr">666 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>