たぶん結構難しい内容かもだけど、
をやっていこう。
開発環境や実行環境は何を用意すればいいんだろう?😔
まぁとりあえず重要そうなキーワードをメモしておこう
#01:CPUとアセンブラの関係を理解しよう
- 学習内容
- マシン語とアセンブラについて学習
- CASL IIとCOMET IIを題材にする
- アセンブラの役割
- マシン語:
- 2進数で記述
- CPUが直接実行
- アセンブラ言語:マシン語と、ほぼ1対1で対応したプログラミング言語
- CPUの種類によって違う
- アセンブラ:アセンブラ言語のコードをマシン語に変換するプログラム
- マシン語:
- COMETⅡとCASLⅡ
- IPAの基本情報技術者試験のために開発
- COMETⅡ:16ビットの仮想コンピュータ
- CASLⅡ:COMETⅡ用のアセンブラ
- paizaで利用するツール
PyCOMET2:仮想コンピュータ
PyCASL2:アセンブラ
- IPAの基本情報技術者試験のために開発
↑どうやらこれが実行環境らしい。
COMETⅡとCASLⅡをググってみると、
どうやらVSCodeでできるらしいってことで、
下記を参考に拡張機能をインストール。
でもこれは実行環境ではなく、エディタの整備(開発環境)だったみたい。
そこで、さらに検索したところ、perlで実装したものが以下にあったので、
インストールしてみた。
perlは使ったことがないけど、Ubutuにはperlが既にインストールされているっぽいので、
そのまま書いてある通りに、CASL2/COMET2をインストール・・・
ただ、ビルドはできたが、インストールがうまくいかなかったので、
手動でcasl2とcomet2をbinフォルダにコピーしたところ、
コマンドを呼び出すことができるようになった。
→TipsにPyCASL2&PyCOMET2の情報が紹介されてた!😜
動作環境は、Python2(2.4以降)とのこと。
それはそうと大阪大学ってCASL2とCOMET2の聖地なのか?
#02:はじめてのアセンブラ
- アセンブル・実行コマンド(paizaの場合)
$ pycasl hello.cas
$ pycomet -r hello.com- pycometは-rを付けずに実行すると対話モード
※ ただし、pycaslとpycometはそれぞれエイリアスされたコマンド名
- アセンブル・実行コマンド(paizaの場合)
$ casl2 hello.cas
$ comet2 -q hello.com- come2は-qを付けずに実行すると対話モードになる。
s(step)でステップ実行、r(run)で実行
- come2は-qを付けずに実行すると対話モードになる。
#03:CASLⅡのコードの書式を理解しよう
- コメント:「;」(セミコロン)
- CASLⅡのコーディング書式:3つのエリアに分けて記述
- ラベル欄:その行のアドレスをあらわす。
長さ1-8文字、先頭は英大文字、2文字目以降は、英大文字か数字 - 命令コード欄:マシン語の命令やアセンブラへの指示を記述
機械語命令、アセンブラ命令、マクロ命令 - オペランド:命令コードの処理対象を記述
- ラベル欄:その行のアドレスをあらわす。
- コード領域とデータ領域からなる
- コード領域:STARTからRETまで
- データ領域:RETの次の行からENDまで
#04:COMETⅡの基本操作を理解しよう
- PyCOMET2の主な実行時オプション
r: 対話モードに入らず、すぐに結果を表示
v: バージョン情報を表示
h: ヘルプを表示 - 対話モードの主なコマンド
h: ヘルプ
s: ステップ実行
q: 対話モードの終了
#05:2進数と16進数をおさらいしよう
- 2進数の数え方
・「0」と「1」だけを使って数える
・ビット:2進数の1桁 - 16進数
0 ~ 9, A B C D E Fを使って数える
#06:CPUの動作を理解する - その1
- COMET2のレジスタ構成
- プログラムレジスタ(PR):次に実行すべき命令のアドレスを指定
- 汎用レジスタ(GR0 - GR7):演算やアドレス指定のために一時的にデータを格納(General Register)
- スタックポインタ(SP):メモリにデータを一時的に退避したり、一時的に別のコードを呼び出したりする、スタック領域のアドレスを指定する
- フラグレジスタ(FR):演算結果に合わせて設定される
- オーバーフローフラグ(OF):演算結果が16ビットを超えた時に1、それ以外では0
- サインフラグ(SF):演算結果がマイナスになったとき1、それ以外では0
- ゼロフラグ(ZF):演算結果がゼロのときに1、それ以外では0
#07:CPUの動作を理解する - その2
- アセンブル・実行コマンド$ pycasl hello.cas
$ pycomet -d hello.com- -d:プログラム終了時に、CPUとメモリの状態を出力する
#08:マシン語で足し算する
- LD:メモリからデータをロード(LOAD)する機械語命令
- DC:メモリにデータを配置するアセンブラ命令
- ADDA:レジスタとメモリのデータを足し算する機械語命令
- ST:ストアー(STORE)命令。レジスタの値をメモリに格納する。
- DS:メモリを確保する。
#09:マシン語で引き算する
- SUBA:レジスタの値からメモリのデータを引き算する機械語命令
- 命令コードの種類
- 機械語命令(マシン語命令)
CPUを直接操作する命令
マシン語に変換される
例:LD、ADDA、ST、RET - アセンブラ命令
アセンブラに対して指示をする
開始アドレスや、ラベルを置き換える
例:START、END、DC、DS - マクロ命令
あらかじめ用意されたプログラムを呼び出し
例:OUT
- 機械語命令(マシン語命令)
- 命令の調べ方
- 機械語命令
CPUが処理する
COMETⅡの仕様書を調べる - アセンブラ命令・マクロ命令
アセンブラが処理する
CASLⅡの仕様書を調べる
- 機械語命令
認定証
やっぱり結構骨が折れるな!😓
環境構築からプログラミングまで知らないことだらけ😱
まぁ完全に理解できているわけではないけど、一応認定証を取得
学習ステータス
村人から見習い吟遊詩人に昇格
なんかキャラがちっさいな😅
※コメント投稿者のブログIDはブログ作成者のみに通知されます