about summary refs log tree commit diff stats
path: root/html/015immediate_addressing.cc.html
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-03-06 18:39:16 -0800
committerKartik Agaram <vc@akkartik.com>2020-03-06 18:39:16 -0800
commitee0e67b9d7c275480827d856b926d2c403057bb8 (patch)
tree4c64d0b7bd4f25292fa73868a7ad3a7820ae4644 /html/015immediate_addressing.cc.html
parent8f256f1f2ee6a2a49816dd23d26cd120f526bf0b (diff)
downloadmu-ee0e67b9d7c275480827d856b926d2c403057bb8.tar.gz
6091
Diffstat (limited to 'html/015immediate_addressing.cc.html')
-rw-r--r--html/015immediate_addressing.cc.html39
1 files changed, 39 insertions, 0 deletions
diff --git a/html/015immediate_addressing.cc.html b/html/015immediate_addressing.cc.html
index 34f08f0c..0ca822f8 100644
--- a/html/015immediate_addressing.cc.html
+++ b/html/015immediate_addressing.cc.html
@@ -1331,6 +1331,45 @@ if ('onhashchange' in window) {
 <span id="L1270" class="LineNr">1270 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;contents at <a href='010---vm.cc.html#L14'>ESP</a>: 0x&quot;</span> &lt;&lt; <a href='010---vm.cc.html#L395'>HEXWORD</a> &lt;&lt; <a href='010---vm.cc.html#L172'>read_mem_u32</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L25'>Reg</a></span>[ESP]<span class="Delimiter">.</span>u<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L1271" class="LineNr">1271 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L1272" class="LineNr">1272 </span><span class="Delimiter">}</span>
+<span id="L1273" class="LineNr">1273 </span>
+<span id="L1274" class="LineNr">1274 </span><span class="SalientComment">//:: multiply</span>
+<span id="L1275" class="LineNr">1275 </span>
+<span id="L1276" class="LineNr">1276 </span><span class="Delimiter">:(before &quot;End Initialize Op Names&quot;)</span>
+<span id="L1277" class="LineNr">1277 </span><a href='001help.cc.html#L239'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L342'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;69&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;multiply rm32 by imm32 and store result in r32&quot;</span><span class="Delimiter">);</span>
+<span id="L1278" class="LineNr">1278 </span>
+<span id="L1279" class="LineNr">1279 </span><span class="Delimiter">:(code)</span>
+<span id="L1280" class="LineNr">1280 </span><span class="Normal">void</span> <a href='015immediate_addressing.cc.html#L1280'>test_multiply_imm32</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L1281" class="LineNr">1281 </span>  <span class="Special"><a href='010---vm.cc.html#L25'>Reg</a></span>[EAX]<span class="Delimiter">.</span>i = <span class="Constant">2</span><span class="Delimiter">;</span>
+<span id="L1282" class="LineNr">1282 </span>  <span class="Special"><a href='010---vm.cc.html#L25'>Reg</a></span>[EBX]<span class="Delimiter">.</span>i = <span class="Constant">3</span><span class="Delimiter">;</span>
+<span id="L1283" class="LineNr">1283 </span>  <a href='011run.cc.html#L82'>run</a><span class="Delimiter">(</span>
+<span id="L1284" class="LineNr">1284 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
+<span id="L1285" class="LineNr">1285 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
+<span id="L1286" class="LineNr">1286 </span>      <span class="Constant">&quot;  69     c3                          04 00 00 00 \n&quot;</span>  <span class="Comment">// EAX = EBX * 4</span>
+<span id="L1287" class="LineNr">1287 </span>      <span class="Comment">// ModR/M in binary: 11 (direct) 000 (dest EAX) 011 (src EBX)</span>
+<span id="L1288" class="LineNr">1288 </span>  <span class="Delimiter">);</span>
+<span id="L1289" class="LineNr">1289 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
+<span id="L1290" class="LineNr">1290 </span>      <span class="Constant">&quot;run: multiply r/m32 by 0x00000004 and store result in EAX\n&quot;</span>
+<span id="L1291" class="LineNr">1291 </span>      <span class="Constant">&quot;run: r/m32 is EBX\n&quot;</span>
+<span id="L1292" class="LineNr">1292 </span>      <span class="Constant">&quot;run: storing 0x0000000c\n&quot;</span>
+<span id="L1293" class="LineNr">1293 </span>  <span class="Delimiter">);</span>
+<span id="L1294" class="LineNr">1294 </span><span class="Delimiter">}</span>
+<span id="L1295" class="LineNr">1295 </span>
+<span id="L1296" class="LineNr">1296 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L1297" class="LineNr">1297 </span><span class="Normal">case</span> <span class="Constant">0x69</span>: <span class="Delimiter">{</span>
+<span id="L1298" class="LineNr">1298 </span>  <span class="Normal">const</span> <span class="Normal">uint8_t</span> modrm = <a href='010---vm.cc.html#L325'>next</a><span class="Delimiter">();</span>
+<span id="L1299" class="LineNr">1299 </span>  <span class="Normal">const</span> <span class="Normal">uint8_t</span> rdest = <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="L1300" class="LineNr">1300 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span> val = <a href='011run.cc.html#L433'>next32</a><span class="Delimiter">();</span>
+<span id="L1301" class="LineNr">1301 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;multiply r/m32 by 0x&quot;</span> &lt;&lt; <a href='010---vm.cc.html#L395'>HEXWORD</a> &lt;&lt; val &lt;&lt; <span class="Constant">&quot; and store result in &quot;</span> &lt;&lt; <a href='013direct_addressing.cc.html#L136'>rname</a><span class="Delimiter">(</span>rdest<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L1302" class="LineNr">1302 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* signed_arg1 = <a href='013direct_addressing.cc.html#L101'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L1303" class="LineNr">1303 </span>  <span class="Normal">int32_t</span> result = *signed_arg1 * val<span class="Delimiter">;</span>
+<span id="L1304" class="LineNr">1304 </span>  <span class="Normal">int64_t</span> full_result = <span class="Normal">static_cast</span>&lt;<span class="Normal">int64_t</span>&gt;<span class="Delimiter">(</span>*signed_arg1<span class="Delimiter">)</span> * val<span class="Delimiter">;</span>
+<span id="L1305" class="LineNr">1305 </span>  <a href='010---vm.cc.html#L82'>OF</a> = <span class="Delimiter">(</span>result != full_result<span class="Delimiter">);</span>
+<span id="L1306" class="LineNr">1306 </span>  <a href='010---vm.cc.html#L81'>CF</a> = <a href='010---vm.cc.html#L82'>OF</a><span class="Delimiter">;</span>
+<span id="L1307" class="LineNr">1307 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;SF=&quot;</span> &lt;&lt; SF &lt;&lt; <span class="Constant">&quot;; ZF=&quot;</span> &lt;&lt; <a href='010---vm.cc.html#L80'>ZF</a> &lt;&lt; <span class="Constant">&quot;; CF=&quot;</span> &lt;&lt; <a href='010---vm.cc.html#L81'>CF</a> &lt;&lt; <span class="Constant">&quot;; OF=&quot;</span> &lt;&lt; <a href='010---vm.cc.html#L82'>OF</a> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L1308" class="LineNr">1308 </span>  <span class="Special"><a href='010---vm.cc.html#L25'>Reg</a></span>[rdest]<span class="Delimiter">.</span>i = result<span class="Delimiter">;</span>
+<span id="L1309" class="LineNr">1309 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</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#L395'>HEXWORD</a> &lt;&lt; <span class="Special"><a href='010---vm.cc.html#L25'>Reg</a></span>[rdest]<span class="Delimiter">.</span>i &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L1310" class="LineNr">1310 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L1311" class="LineNr">1311 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>