#PowerPC64Simulator
情報科学基礎実験の課題のPowerPC64のシミュレーター。 x86_64-linux-gnuのgccに依存するコードを含む(ちなみに自分はgcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2で動作のテストをしている)。
- signed型の算術右シフト
- ビットフィールドの順序
- short, int, long longを2, 4, 8バイトの整数型として扱っている
他にもあるかも
- PowerPCの命令を一つずつシミュレートして、レジスタの内容の変化を追えるようなプログラムにする
- 算術演算、論理演算、分岐命令、比較などを中心に実装
- 浮動小数点数は(面倒なので)実装しない
- 例外処理、メモリアクセスの際のアドレス変換、特権モードなども(今のところの予定では)実装しない
testにあるMakefileを参照、というかコピーして必要なとこだけ書き換えればいい
make
./powerpc64sim <PPC64のアセンブリコード>
| コマンド | 説明 |
|---|---|
| h | ヘルプの表示 |
| r <レジスタ番号> | GPRの中身を表示 |
| n | 次の命令を実行 |
| d | 全てのレジスタの中身を表示する |
| m <サイズ> <アドレス(16進数)> | メモリの中身の表示 |
| b <命令のアドレス(16進数)> | ブレークポイントの設定 |
| c | ブレークポイントまでシミュレーションする(continue) |
| q | 終了する |
- addi
- addis
- add
- subf
- addic
- addic.
- subfic
- addc
- subfc
- adde
- subfe
- addme
- subfme
- addze
- subfze
- neg
- mulli
- mulhw
- mullw
- mulhwu
- divw
- divwu
- divwe
- divweu
- mulld
- mulhd
- mulhdu
- divd
- divdu
- divde
- divdeu
- andi
- andis
- ori
- oris
- xori
- xoris
- and
- or
- xor
- nand
- nor
- eqv
- andc
- orc
- extsb
- extsh
- cntlzw
- cmpb
- popcntb
- popcntw
- prtyd
- prtyw
- extsw
- popcntd
- cntlzd
- bpermd
- rlwinm
- rlwnm
- rlwimi
- rldicl
- rldicr
- rldic
- rldcl
- rldcr
- rldimi
- slw
- srw
- srawi
- sraw
- sld
- srd
- sradi
- srad
- b
- bc
- bclr
- bcctr
- stb
- stbx
- stbu
- stbux
- sth
- sthx
- sthu
- sthux
- stw
- stwx
- stwu
- stwux
- std
- stdx
- stdu
- stdux
- lbz
- lbzx
- lbzu
- lbzux
- lhz
- lhzx
- lhzu
- lhzux
- lha
- lhax
- lhau
- lhaux
- lwz
- lwzx
- lwzu
- lwzux
- lwa
- lwax
- lwaux
- ld
- ldx
- ldu
- ldux
- mtspr
- mfspr
- mtcrf
- mfcr
- mtocrf
- mfocrf
- mcrxr
- mtdcrux
- mfdcrux
- cmpi
- cmp
- cmpli
- cmpl
- crand
- crnand
- cror
- crxor
- crnor
- creqv
- crandc
- crorc
- mcrf
- GPR(General Purpose Register)
- CR(Condition Register)
- LR(Link Register)
- CTR(Count Register)
- XER(Fixed-Point Exception Register)
- エントリーポイントは0x10000000固定(そのうち何とかしたい)
- 掛け算割り算は面倒なので実装しないかも
- ニーモニックの表示と命令の実行は別なので、実行できてもmnemonic unknownのことがある