2021:コア内部 演算命令とフラグ

 ロードストアアーキテクチャでは汎用レジスタ=メモリ間のデータ転送と汎用レジスタ間でのデータ加工を区別することができる。コア内部でのデータの操作は演算命令に分類できる。もうひとつ、命令列の流れを変えたりサブルーチンを読んだりするための分岐命令(制御転送命令)を追加する。さきほどの演算命令の結果によって分岐先を変える条件分岐命令も含まれる。
 汎用レジスタはどのようなサイズが妥当か?8bit→16bit→32bit→64bit…という流れから考えると2のn乗バイト(n≧0)が良さそう。一回に処理できるデータサイズが大きくなるほど演算に関わる回路は大きくなるので、ここが大きくなりすぎないような命令定義を意識する。また、時間はかかっても良いから小さい演算器で大きなデータの演算をエミュレーションできる方法も合わせて検討する。

 演算命令は論理演算命令、算術演算命令、ビット操作命令に分類できる。
論理演算命令は扱う値をビット列とみなし、AND/OR/NOTなどの論理演算を行う。算術演算命令は扱う値を数値とみなし、加減乗除などの算術演算を行う。ビット操作命令は扱う値をビット列とみなし、左右シフト、ローテートなどのビット操作とPopulation Countなどのビットからの情報取得を行う。
 条件分岐命令は演算の結果を見て実行するかしないかを決定する。簡単な例では汎用レジスタAの値から汎用レジスタBの値を減算し、結果が0かどうかでAとBの値の一致/不一致を判定し、その後分岐するかしないかを決定する。この演算による比較結果は条件フラグに反映される。条件フラグの集まりは特別なレジスタであり、これを嫌って比較結果を汎用レジスタに反映し、汎用レジスタの内容で分岐するアーキテクチャも存在する(MIPS,Alpha)。また、比較結果を複数の専用レジスタに分散させ任意のタイミングで参照できるようにしたアーキテクチャもある(POWER,IA-64,SH3/SH4)。


https://keisanki.at.webry.info/201201/article_6.html


 比較した結果が値からすぐわかるのは、オールゼロかどうかのゼロフラグ(Z)、2の補数とみなしマイナスの値であるネガティブフラグ(N)。演算の過程でわかるものに、結果が2の補数の範囲を超えたオーバーフローフラグ(V)、符号なし整数とみなしたときのキャリー(加算)/ボロー(減算)発生時のキャリーフラグ(C)がある。その他最下位ビットを反映した奇数/偶数を判定するフラグや浮動小数点演算の結果に関するフラグが存在する。


以上から考えた必要なもの:
・ロードストアアーキテクチャはメモリ操作とレジスタの演算を分ける
・コア内部で処理するのはデータを加工する演算と命令の流れを変える分岐
・演算命令の三分類(論理、算術、ビット操作)
・演算結果と比較結果の保存手段

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント