概要
vistaでquartusやってみた。
cpuを書いてみた。
機械語モニタを作る。トリック編。
俺cpuには、間接アドレッシングが無い。
メモリー関係の命令は、setとgetで、直接アドレシングでオペコードに、アドレスを埋め込んでいる。
0x2000 + アドレスがset
0x3000 + アドレスがget
setは、メモリーに、スタックトップを書き込む命令
getは、メモリーから、スタックトップへ読み込む命令
機械語モニタは、メモリーに書いたり、読む、コマンドがある。
トリック
オペコードを生成してメモリーに書き込み、そこへジャンプ。
メモリー読み込み
0x100から、読み取る場合
push 0x100
get a
+
set b
jmp b
a:
0x2000
b:
0x0000
c:
0x5000
スタックに、0x100を積む。
アドレスaから、0x2000をスタックに積む。
0x2000 + 0x100を実行。
アドレスbに書き込む
アドレスbに、ジャンプ。
アドレス0x100から、読み取る。
メモリー書き込み
0x100に0xffffを、書き込む場合
push 0x100
get d
+
set f
get e
jmp f
d:
0x3000
e:
0xffff
f:
0x0000
g:
0x5000
アドレスeに、0xffffを入れておく。
スタックに、0x100を積む。
アドレスdから、0x3000をスタックに積む。
0x3000 + 0x100を実行。
アドレスfに書き込む
アドレスeから、読み込む
アドレスfに、ジャンプ
アドレス0x100に、書き込む。
アドレス0x100に、ジャンプ
push 0x100
get j
+
set k
jmp k
j:
0x5000
k:
0x0000
スタックに、0x100を積む。
アドレスjから、0x5000をスタックに積む。
0x5000 + 0x100を実行。
アドレスkに書き込む
アドレスkに、ジャンプ
アドレス0x100に、ジャンプ
以上。