不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

paizaラーニング『情報処理入門 アセンブラ言語編01: アセンブラを使ってみよう (全9回) 』を受講してみた

2021-02-01 21:55:36 | paiza
たぶん結構難しい内容かもだけど、
をやっていこう。

開発環境や実行環境は何を用意すればいいんだろう?😔 

まぁとりあえず重要そうなキーワードをメモしておこう

#01:CPUとアセンブラの関係を理解しよう

  • 学習内容
    • マシン語とアセンブラについて学習
    • CASL IIとCOMET IIを題材にする
  • アセンブラの役割
    • マシン語:
      • 2進数で記述
      • CPUが直接実行
    • アセンブラ言語:マシン語と、ほぼ1対1で対応したプログラミング言語
      • CPUの種類によって違う
    • アセンブラ:アセンブラ言語のコードをマシン語に変換するプログラム
  • COMETⅡとCASLⅡ
    • IPAの基本情報技術者試験のために開発
      • COMETⅡ:16ビットの仮想コンピュータ
      • CASLⅡ:COMETⅡ用のアセンブラ
    • paizaで利用するツール
       PyCOMET2:仮想コンピュータ
       PyCASL2:アセンブラ
↑どうやらこれが実行環境らしい。

COMETⅡとCASLⅡをググってみると、
どうやらVSCodeでできるらしいってことで、
下記を参考に拡張機能をインストール。

でもこれは実行環境ではなく、エディタの整備(開発環境)だったみたい。
そこで、さらに検索したところ、perlで実装したものが以下にあったので、
インストールしてみた。
perlは使ったことがないけど、Ubutuにはperlが既にインストールされているっぽいので、
そのまま書いてある通りに、CASL2/COMET2をインストール・・・

ただ、ビルドはできたが、インストールがうまくいかなかったので、
手動でcasl2とcomet2をbinフォルダにコピーしたところ、
コマンドを呼び出すことができるようになった。

paizaでやっているようなPythonでの実装であるPyCASL2やPyCOMET2の情報ってググっても出てこないっぽい?😣 
→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)で実行

#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Ⅱの仕様書を調べる

認定証

やっぱり結構骨が折れるな!😓 
環境構築からプログラミングまで知らないことだらけ😱 
まぁ完全に理解できているわけではないけど、一応認定証を取得


学習ステータス

村人から見習い吟遊詩人に昇格
なんかキャラがちっさいな😅 


最新の画像もっと見る

コメントを投稿