diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-03-06 18:39:16 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-03-06 18:39:16 -0800 |
commit | ee0e67b9d7c275480827d856b926d2c403057bb8 (patch) | |
tree | 4c64d0b7bd4f25292fa73868a7ad3a7820ae4644 /html/015immediate_addressing.cc.html | |
parent | 8f256f1f2ee6a2a49816dd23d26cd120f526bf0b (diff) | |
download | mu-ee0e67b9d7c275480827d856b926d2c403057bb8.tar.gz |
6091
Diffstat (limited to 'html/015immediate_addressing.cc.html')
-rw-r--r-- | html/015immediate_addressing.cc.html | 39 |
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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"contents at <a href='010---vm.cc.html#L14'>ESP</a>: 0x"</span> << <a href='010---vm.cc.html#L395'>HEXWORD</a> << <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> << 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 "End Initialize Op Names")</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">"69"</span><span class="Delimiter">,</span> <span class="Constant">"multiply rm32 by imm32 and store result in r32"</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">"== code 0x1\n"</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">" 69 c3 04 00 00 00 \n"</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">"run: multiply r/m32 by 0x00000004 and store result in EAX\n"</span> +<span id="L1291" class="LineNr">1291 </span> <span class="Constant">"run: r/m32 is EBX\n"</span> +<span id="L1292" class="LineNr">1292 </span> <span class="Constant">"run: storing 0x0000000c\n"</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 "End Single-Byte Opcodes")</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>><span class="Constant">3</span><span class="Delimiter">)</span>&<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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"multiply r/m32 by 0x"</span> << <a href='010---vm.cc.html#L395'>HEXWORD</a> << val << <span class="Constant">" and store result in "</span> << <a href='013direct_addressing.cc.html#L136'>rname</a><span class="Delimiter">(</span>rdest<span class="Delimiter">)</span> << 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><<span class="Normal">int64_t</span>><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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"SF="</span> << SF << <span class="Constant">"; ZF="</span> << <a href='010---vm.cc.html#L80'>ZF</a> << <span class="Constant">"; CF="</span> << <a href='010---vm.cc.html#L81'>CF</a> << <span class="Constant">"; OF="</span> << <a href='010---vm.cc.html#L82'>OF</a> << 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">"run"</span><span class="Delimiter">)</span> << <span class="Constant">"storing 0x"</span> << <a href='010---vm.cc.html#L395'>HEXWORD</a> << <span class="Special"><a href='010---vm.cc.html#L25'>Reg</a></span>[rdest]<span class="Delimiter">.</span>i << 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> |