diff options
Diffstat (limited to 'html/subx/014indirect_addressing.cc.html')
-rw-r--r-- | html/subx/014indirect_addressing.cc.html | 57 |
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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"effective address is 0x"</span> << std::hex << Reg[rm]<span class="Delimiter">.</span>u << <span class="Constant">" ("</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> << <span class="Constant">")"</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"effective address is 0x"</span> << std::hex << Reg[rm]<span class="Delimiter">.</span>u << <span class="Constant">" ("</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> << <span class="Constant">")"</span> << <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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"add r/m32 to "</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"add r/m32 to "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"subtract r/m32 from "</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"subtract r/m32 from "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"and r/m32 with "</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"and r/m32 with "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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>&<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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"or r/m32 with "</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"or r/m32 with "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"xor r/m32 with "</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"xor r/m32 with "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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 < 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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"compare r/m32 with "</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"compare r/m32 with "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> << <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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"copy r/m32 to "</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"copy r/m32 to "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"storing 0x"</span> << <a href='010---vm.cc.html#L260'>HEXWORD</a> << *arg2 << <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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"copy lowermost byte of "</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg2<span class="Delimiter">)</span> << <span class="Constant">" to r8/m8-at-r32"</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"copy lowermost byte of "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg2<span class="Delimiter">)</span> << <span class="Constant">" to r8/m8-at-r32"</span> << <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><<span class="Normal">uint8_t</span>*><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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"copy r8/m8-at-r32 to lowermost byte of "</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"copy r8/m8-at-r32 to lowermost byte of "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> << <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><<span class="Normal">uint8_t</span>*><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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"storing 0x"</span> << <a href='010---vm.cc.html#L259'>HEXBYTE</a> << <a href='010---vm.cc.html#L262'>NUM</a><span class="Delimiter">(</span>*arg2<span class="Delimiter">)</span> << <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><<span class="Normal">uint8_t</span>*><span class="Delimiter">(</span>&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">"run"</span><span class="Delimiter">)</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> << <span class="Constant">" now contains 0x"</span> << <a href='010---vm.cc.html#L260'>HEXWORD</a> << Reg[reg1]<span class="Delimiter">.</span>u << <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">"run"</span><span class="Delimiter">)</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> << <span class="Constant">" now contains 0x"</span> << <a href='010---vm.cc.html#L260'>HEXWORD</a> << Reg[reg1]<span class="Delimiter">.</span>u << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"pop into r/m32"</span> << <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 "End Mod 0 Special-cases(addr)")</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 => 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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"effective address is 0x"</span> << std::hex << addr << <span class="Constant">" (disp32)"</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"effective address is initially 0x"</span> << std::hex << addr << <span class="Constant">" ("</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> << <span class="Constant">")"</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"effective address is initially 0x"</span> << std::hex << addr << <span class="Constant">" ("</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> << <span class="Constant">")"</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"effective address is initially 0x"</span> << std::hex << addr << <span class="Constant">" ("</span> << <a href='013direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> << <span class="Constant">")"</span> << <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"effective address is initially 0x"</span> << std::hex << addr << <span class="Constant">" ("</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> << <span class="Constant">")"</span> << <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 > <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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"effective address is 0x"</span> << std::hex << addr << <span class="Constant">" (after adding disp32)"</span> << <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 "End Initialize Op Names(name)")</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">"8d"</span><span class="Delimiter">,</span> <span class="Constant">"load effective address of memory in rm32 into r32"</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 "End Single-Byte Opcodes")</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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"lea into "</span> << <a href='013direct_addressing.cc.html#L62'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> << <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> |