306 lines
No EOL
19 KiB
HTML
306 lines
No EOL
19 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<title>NestedCall.tst — Stack Frames</title>
|
|
<style type="text/css">
|
|
.stack {border-collapse:collapse; font-size:80%;}
|
|
.stack td {padding-left:.25em;padding-right:.25em;white-space:nowrap;}
|
|
.stack td:first-child {text-align:right;}
|
|
.stack td:first-child + td {text-align:right;}
|
|
.stack td:first-child + td + td {text-align:left;}
|
|
.stack td:first-child + td + td + td {text-align:left;}
|
|
.stack .reg {border-left:1px solid; border-right:1px solid;}
|
|
.stack .reg th {border:1px solid;}
|
|
.stack .stack {border-left:1px solid; border-right:1px solid;}
|
|
.stack .stack th {border:1px solid;}
|
|
.stack .tos {border-left:1px solid; border-right:1px solid;border-bottom:1px solid;}
|
|
.stack .frame {border-left:1px solid; border-right:1px solid;}
|
|
.stack .frame td:first-child + td {border-left:1px solid;}
|
|
.stack .frame td:first-child + td + td {border-right:1px solid;}
|
|
.stack .framet {border-left:1px solid; border-right:1px solid;}
|
|
.stack .framet td:first-child + td {border-left:1px solid;border-top:1px solid;}
|
|
.stack .framet td:first-child + td + td {border-right:1px solid;border-top:1px solid;}
|
|
.stack .bframe {border-left:1px solid; border-right:1px solid;}
|
|
.stack .bframe td:first-child + td {border-left:2px solid;}
|
|
.stack .bframe td:first-child + td + td {border-right:2px solid;}
|
|
.stack .bframet {border-left:1px solid; border-right:1px solid;}
|
|
.stack .bframet td:first-child + td {border-left:2px solid;border-top:2px solid;}
|
|
.stack .bframet td:first-child + td + td {border-right:2px solid;border-top:2px solid;}
|
|
.stack .bframeb {border-left:1px solid; border-right:1px solid;}
|
|
.stack .bframeb td:first-child + td {border-left:2px solid;border-bottom:2px solid;}
|
|
.stack .bframeb td:first-child + td + td {border-right:2px solid;border-bottom:2px solid;}
|
|
.stack .note td {padding-left:.5em;padding-right:.5em;white-space:normal;text-align:justify;}
|
|
.stack .fid {font-style:italic}
|
|
.master {width: 10%;}
|
|
.master td {vertical-align:top;padding-right:.5em; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
|
<table class="master">
|
|
<tr>
|
|
<td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">Bootstrap init</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>256</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>-1</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>-2</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>-3</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>-4</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="tos"><td>256</td><td>???</td><td></td><td>←SP</td></tr>
|
|
<tr class="note"><td colspan="4"><br>
|
|
This is how my boot­strap code initial­izes the pointers before calling Sys.init().
|
|
<p>
|
|
Setting the LCL, ARG, THIS and THAT point­ers to known illegal values helps identify
|
|
when a pointer is used before it is initial­ized.
|
|
<p>
|
|
(If you are running the NestedCall test with­out boot­strap code, you will not see this state.)</td></tr>
|
|
</table>
|
|
</td><td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">Entry to Sys.init()</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>261</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>261</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>256</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>-3</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>-4</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="bframet"><td>256</td><td>*</td><td>Return IP</td><td>←ARG</td></tr>
|
|
<tr class="bframe"><td>257</td><td>-1</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="bframe"><td>258</td><td>-2</td><td>Saved ARG</td><td class="fid">Sys.init</td></tr>
|
|
<tr class="bframe"><td>259</td><td>-3</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="bframeb"><td>260</td><td>-4</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="tos"><td>261</td><td>???</td><td></td><td>←LCL, SP</td></tr>
|
|
<tr class="note"><td colspan="4"><br>
|
|
This is how NestedCall.tst initial­izes the pointers and stack. This is what RAM looks
|
|
like after my boot­strap calls Sys.init().
|
|
<p>
|
|
(If your VM trans­lation includes the boot­strap, the -1 through -4 values may be
|
|
different if your boot­strap initial­izes them.)</td></tr>
|
|
</table>
|
|
</td><td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">Entry to Sys.main()</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>266</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>266</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>261</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>4000</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>5000</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="framet"><td>256</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="frame"><td>257</td><td>-1</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="frame"><td>258</td><td>-2</td><td>Saved ARG</td><td class="fid">Sys.init</td></tr>
|
|
<tr class="frame"><td>259</td><td>-3</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="frame"><td>260</td><td>-4</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="bframet"><td>261</td><td>*</td><td>Return IP</td><td>←ARG</td></tr>
|
|
<tr class="bframe"><td>262</td><td>261</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="bframe"><td>263</td><td>256</td><td>Saved ARG</td><td class="fid">Sys.main</td></tr>
|
|
<tr class="bframe"><td>264</td><td>4000</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="bframeb"><td>265</td><td>5000</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="tos"><td>266</td><td>???</td><td></td><td>←LCL, SP</td></tr>
|
|
</table>
|
|
</td><td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">After Sys.main() prologue</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>271</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>266</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>261</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>4000</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>5000</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="framet"><td>256</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="frame"><td>257</td><td>-1</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="frame"><td>258</td><td>-2</td><td>Saved ARG</td><td class="fid">Sys.init</td></tr>
|
|
<tr class="frame"><td>259</td><td>-3</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="frame"><td>260</td><td>-4</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="bframet"><td>261</td><td>*</td><td>Return IP</td><td>←ARG</td></tr>
|
|
<tr class="bframe"><td>262</td><td>261</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="bframe"><td>263</td><td>256</td><td>Saved ARG</td><td class="fid">Sys.main</td></tr>
|
|
<tr class="bframe"><td>264</td><td>4000</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="bframe"><td>265</td><td>5000</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="bframe"><td>266</td><td>0</td><td>local 0</td><td>←LCL</td></tr>
|
|
<tr class="bframe"><td>267</td><td>0</td><td>local 1</td><td></td></tr>
|
|
<tr class="bframe"><td>268</td><td>0</td><td>local 2</td><td></td></tr>
|
|
<tr class="bframe"><td>269</td><td>0</td><td>local 3</td><td></td></tr>
|
|
<tr class="bframeb"><td>270</td><td>0</td><td>local 4</td><td></td></tr>
|
|
<tr class="tos"><td>271</td><td>???</td><td></td><td>←SP</td></tr>
|
|
<tr class="note"><td colspan="4"><br>
|
|
The <i>function prologue</i> is the assembly language code generated for the
|
|
"function" VM command.
|
|
</table>
|
|
</td><td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">Entry to Sys.add12(123)</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>277</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>277</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>271</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>4001</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>5001</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="framet"><td>256</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="frame"><td>257</td><td>-1</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="frame"><td>258</td><td>-2</td><td>Saved ARG</td><td class="fid">Sys.init</td></tr>
|
|
<tr class="frame"><td>259</td><td>-3</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="frame"><td>260</td><td>-4</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="framet"><td>261</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="frame"><td>262</td><td>261</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="frame"><td>263</td><td>256</td><td>Saved ARG</td><td class="fid">Sys.main</td></tr>
|
|
<tr class="frame"><td>264</td><td>4000</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="frame"><td>265</td><td>5000</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="frame"><td>266</td><td>0</td><td>local 0</td><td></td></tr>
|
|
<tr class="frame"><td>267</td><td>200</td><td>local 1</td><td></td></tr>
|
|
<tr class="frame"><td>268</td><td>40</td><td>local 2</td><td></td></tr>
|
|
<tr class="frame"><td>269</td><td>6</td><td>local 3</td><td></td></tr>
|
|
<tr class="frame"><td>270</td><td>0</td><td>local 4</td><td></td></tr>
|
|
<tr class="bframet"><td>271</td><td>123</td><td>argument 0</td><td>←ARG</td></tr>
|
|
<tr class="bframe"><td>272</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="bframe"><td>273</td><td>266</td><td>Saved LCL</td><td class="fid">Sys.add12</td></tr>
|
|
<tr class="bframe"><td>274</td><td>261</td><td>Saved ARG</td><td class="fid"> frame</td></tr>
|
|
<tr class="bframe"><td>275</td><td>4001</td><td>Saved THIS</td><td></td></tr>
|
|
<tr class="bframeb"><td>276</td><td>5001</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="tos"><td>277</td><td>???</td><td></td><td>←LCL, SP</td></tr>
|
|
</table>
|
|
</td>
|
|
</tr></table>
|
|
|
|
<p>
|
|
|
|
<table class="master">
|
|
<tr>
|
|
<td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">Before Sys.add12() return</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>278</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>277</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>271</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>4002</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>5002</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="framet"><td>256</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="frame"><td>257</td><td>-1</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="frame"><td>258</td><td>-2</td><td>Saved ARG</td><td class="fid">Sys.init</td></tr>
|
|
<tr class="frame"><td>259</td><td>-3</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="frame"><td>260</td><td>-4</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="framet"><td>261</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="frame"><td>262</td><td>261</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="frame"><td>263</td><td>256</td><td>Saved ARG</td><td class="fid">Sys.main</td></tr>
|
|
<tr class="frame"><td>264</td><td>4000</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="frame"><td>265</td><td>5000</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="frame"><td>266</td><td>0</td><td>local 0</td><td></td></tr>
|
|
<tr class="frame"><td>267</td><td>200</td><td>local 1</td><td></td></tr>
|
|
<tr class="frame"><td>268</td><td>40</td><td>local 2</td><td></td></tr>
|
|
<tr class="frame"><td>269</td><td>6</td><td>local 3</td><td></td></tr>
|
|
<tr class="frame"><td>270</td><td>0</td><td>local 4</td><td></td></tr>
|
|
<tr class="bframet"><td>271</td><td>123</td><td>argument 0</td><td>←ARG</td></tr>
|
|
<tr class="bframe"><td>272</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="bframe"><td>273</td><td>266</td><td>Saved LCL</td><td class="fid">Sys.add12</td></tr>
|
|
<tr class="bframe"><td>274</td><td>261</td><td>Saved ARG</td><td class="fid"> frame</td></tr>
|
|
<tr class="bframe"><td>275</td><td>4001</td><td>Saved THIS</td><td></td></tr>
|
|
<tr class="bframe"><td>276</td><td>5001</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="bframeb"><td>277</td><td>135</td><td>Return value</td><td>←LCL</td></tr>
|
|
<tr class="tos"><td>278</td><td>???</td><td></td><td>←SP</td></tr>
|
|
</table>
|
|
</td><td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">After Sys.add12() return</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>272</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>266</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>261</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>4001</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>5001</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="framet"><td>256</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="frame"><td>257</td><td>-1</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="frame"><td>258</td><td>-2</td><td>Saved ARG</td><td class="fid">Sys.init</td></tr>
|
|
<tr class="frame"><td>259</td><td>-3</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="frame"><td>260</td><td>-4</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="bframet"><td>261</td><td>*</td><td>Return IP</td><td>←ARG</td></tr>
|
|
<tr class="bframe"><td>262</td><td>261</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="bframe"><td>263</td><td>256</td><td>Saved ARG</td><td class="fid">Sys.main</td></tr>
|
|
<tr class="bframe"><td>264</td><td>4000</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="bframe"><td>265</td><td>5000</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="bframe"><td>266</td><td>0</td><td>local 0</td><td>←LCL</td></tr>
|
|
<tr class="bframe"><td>267</td><td>200</td><td>local 1</td><td></td></tr>
|
|
<tr class="bframe"><td>268</td><td>40</td><td>local 2</td><td></td></tr>
|
|
<tr class="bframe"><td>269</td><td>6</td><td>local 3</td><td></td></tr>
|
|
<tr class="bframe"><td>270</td><td>0</td><td>local 4</td><td></td></tr>
|
|
<tr class="bframeb"><td>271</td><td>135</td><td>Return value</td><td></td></tr>
|
|
<tr class="tos"><td>272</td><td>???</td><td></td><td>←SP</td></tr>
|
|
</table>
|
|
</td><td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">Before Sys.main() return</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>272</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>266</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>261</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>4001</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>5001</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="framet"><td>256</td><td>*</td><td>Return IP</td><td></td></tr>
|
|
<tr class="frame"><td>257</td><td>-1</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="frame"><td>258</td><td>-2</td><td>Saved ARG</td><td class="fid">Sys.init</td></tr>
|
|
<tr class="frame"><td>259</td><td>-3</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="frame"><td>260</td><td>-4</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="bframet"><td>261</td><td>*</td><td>Return IP</td><td>←ARG</td></tr>
|
|
<tr class="bframe"><td>262</td><td>261</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="bframe"><td>263</td><td>256</td><td>Saved ARG</td><td class="fid">Sys.main</td></tr>
|
|
<tr class="bframe"><td>264</td><td>4000</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="bframe"><td>265</td><td>5000</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="bframe"><td>266</td><td>0</td><td>local 0</td><td>←LCL</td></tr>
|
|
<tr class="bframe"><td>267</td><td>200</td><td>local 1</td><td></td></tr>
|
|
<tr class="bframe"><td>268</td><td>40</td><td>local 2</td><td></td></tr>
|
|
<tr class="bframe"><td>269</td><td>6</td><td>local 3</td><td></td></tr>
|
|
<tr class="bframe"><td>270</td><td>0</td><td>local 4</td><td></td></tr>
|
|
<tr class="bframeb"><td>271</td><td>246</td><td>Return value</td><td></td></tr>
|
|
<tr class="tos"><td>272</td><td>???</td><td></td><td>←SP</td></tr>
|
|
</table>
|
|
</td><td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">After Sys.main() return</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>262</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>261</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>256</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>4000</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>5000</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="bframet"><td>256</td><td>*</td><td>Return IP</td><td>←ARG</td></tr>
|
|
<tr class="bframe"><td>257</td><td>-1</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="bframe"><td>258</td><td>-2</td><td>Saved ARG</td><td class="fid">Sys.init</td></tr>
|
|
<tr class="bframe"><td>259</td><td>-3</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="bframe"><td>260</td><td>-4</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="bframeb"><td>261</td><td>246</td><td>Return value</td><td>←LCL</td></tr>
|
|
<tr class="tos"><td>262</td><td>???</td><td></td><td>←SP</td></tr>
|
|
</table>
|
|
</td><td>
|
|
<table class="stack">
|
|
<tr><th colspan="4">In Sys.init() halt loop</th></tr>
|
|
<tr class="reg"><th colspan="4">Pointers</th></tr>
|
|
<tr class="reg"><td>0</td><td>261</td><td>SP</td><td></td></tr>
|
|
<tr class="reg"><td>1</td><td>261</td><td>LCL</td><td></td></tr>
|
|
<tr class="reg"><td>2</td><td>256</td><td>ARG</td><td></td></tr>
|
|
<tr class="reg"><td>3</td><td>4000</td><td>THIS</td><td></td></tr>
|
|
<tr class="reg"><td>4</td><td>5000</td><td>THAT</td><td></td></tr>
|
|
<tr class="stack"><th colspan="4">Stack</th></tr>
|
|
<tr class="bframet"><td>256</td><td>*</td><td>Return IP</td><td>←ARG</td></tr>
|
|
<tr class="bframe"><td>257</td><td>-1</td><td>Saved LCL</td><td></td></tr>
|
|
<tr class="bframe"><td>258</td><td>-2</td><td>Saved ARG</td><td class="fid">Sys.init</td></tr>
|
|
<tr class="bframe"><td>259</td><td>-3</td><td>Saved THIS</td><td class="fid"> frame</td></tr>
|
|
<tr class="bframeb"><td>260</td><td>-4</td><td>Saved THAT</td><td></td></tr>
|
|
<tr class="tos"><td>261</td><td>???</td><td></td><td>←LCL, SP</td></tr>
|
|
</table>
|
|
</td>
|
|
</tr></table>
|
|
|
|
</body>
|
|
</html> |