Daniel AgreloによるPixabayからの画像
こんにちは。倉内です。
paizaラーニングでは、プログラミング言語の基本やWebアプリケーション開発を学べる講座が人気ですが、実はWeb技術やコンピュータの動作原理などを学べる講座も公開しています。
今回は、コンピュータのCPUを直接操作するマシン語とアセンブラについて学べる「情報処理入門 アセンブラ言語編」に2つの新しいレッスンが追加されましたのでご紹介します。
なかなか独学では手が出しづらい分野ですが、ブラウザ上で動画解説を見ながら演習問題も解けるのでぜひ活用してみてください!
アセンブラ言語でプログラムを書く
本記事で紹介する講座では、基本情報処理技術者で使われる、アセンブラCASLⅡとエミュレータCOMETⅡを使った条件分岐とループ処理およびアセンブラ命令について学習します。
「そもそもコンピュータの動作とアセンブラの関係って?」については、以下の記事で説明しています。初めてアセンブラを学習する方は参考にしてみてください。
条件分岐とループ
「アセンブラ言語編02: 条件分岐とループをやってみよう」で、他の言語と同じく、まずは基本となる「条件分岐」と「ループ」を学びましょう。
その前にCASLⅡとCOMETⅡの仕様書の読み方を理解しておく必要があります。
アセンブラ言語CASLⅡの仕様
1. CASLⅡは、COMETⅡのためのアセンブラ言語である。
2. プログラムは、命令行および注釈行からなる。
3. 1命令は1命令行で記述し、次の行へ継続できない。
4. 命令行およびコメント行は、次に示す記述の形式で、行の1文字目から記述する。
COMETⅡの仕様書の読み方は、LD命令(ロード命令)を例に見てみましょう。LD命令は、メモリからレジスタに値を読み込む機械語命令です。
2つの機能があるのでオペランド*1の書き方が2つあります。
命令 | 書き方(命令コード、オペランド) | 説明 |
---|---|---|
ロード: LoaD | LD r1,r2 | r1 ← (r2) |
LD r,adr[,x] | r ← (実効アドレス) |
講座では各記号についても詳しく説明しています。
とはいえ、これだけではちょっと難しいので、ブラウザ上で実際に命令を書いて実行してみると理解しやすいと思います。
LD命令とLAD命令を例にアドレスの指定方法を、ST命令を例にレジスタの値をメモリに格納する方法を学習したあと、条件分岐に不可欠なフラグレジスタの働きを学びます。
ここまで理解したらいよいよ本題の分岐命令を学んでいきましょう。
COMETⅡは以下の分岐命令を持っていて、フラグレジスタに合わせて分岐させることができます。
つづいてループ処理のプログラムも作ってみましょう。
COMETⅡには専用のループ命令がないので、特定のレジスタで繰り返し回数をカウントして、それが0になるまで繰り返し処理をするという書き方をします。
ちなみにループを使って1から3まで合計するプログラムは以下のように書けます。
; 1から3まで合計する MAIN START LAD GR0, 0 ; 計算結果 LAD GR1, 3 ; 足し算する数(カウンタ) LAD GR2, 1 ; 減算分 ; LOOP ADDA GR0, GR1 ; 足し算 SUBA GR1, GR2 ; カウンタを減算 JNZ LOOP RET END
算術演算と論理演算
「アセンブラ言語編03: アセンブラ言語の命令を理解しよう」では、算術演算と論理演算の命令について学習します。
まずは加算処理からやっていきましょう。算術加算は、符号付き2進数として加算をおこないます。論理加算は、符号なし2進数として加算をおこないます。
算術加算ではADDA命令、論理加算ではADDL命令を使います。
ADDA命令
算術加算:16ビットの符号付き2進数として加算をおこなう
- 演算範囲は、-32768(#8000) ~ 32767(#7FFF)
- 演算結果がこの範囲を超えると、OFが「1」になる
- レジスタ間の加算と、レジスタ・メモリ間の加算ができる
ADD Arithmetic ADDA r1, r2 r1 ← (r1) + (r2) r, adr [, x] r ← (r) + (実効アドレス)
ADDL命令
論理加算:16ビットの符号なし2進数として加算をおこなう
- 演算範囲は、0 ~ 65535(#FFFF)
- 演算結果がこの範囲を超えると、OFが「1」になる
- レジスタ間の加算と、レジスタ・メモリ間の加算ができる
ADD Logical ADDL r1, r2 r1 ← (r1) +L (r2) r, adr [, x] r ← (r) +L (実効アドレス)
これも具体例で見たほうが分かりやすいので、算術加算と論理加算の例を見てみましょう。講座では動画で解説していますので、どのような考え方なのかよく分かると思います。
このあと算術減算と論理減算も同様におこないます。
最後に、論理演算をおこなう上で理解しておく必要があるAND命令とOR命令、そしてXOR命令について学びます。
これはアセンブラの学習を進めていくためには必ず理解しておかなければいけないので、動画講座でしっかり身につけましょう。
各レッスンのチャプター一覧
ここまで内容の一部を紹介したので、以下に全チャプターを記載します。
「少し勉強したことがある…」という方は、興味のある部分から学習してもよいですね。(チャプター2までは無料でご覧いただけます)
まとめ
アセンブラ言語での条件分岐とループ文、そして算術演算・論理演算について学べる講座をご紹介しました。
文章で読むと「難しそうだな…」と感じた方もいるかもしれませんが、実際に手を動かしてどういった命令文で、どのような処理をしているかを実行しながら学習すると実は意外にシンプルな動作をしていることが分かると思います。
本文でもお伝えしたように、CASLⅡは基本情報処理試験の午後問題に登場します。もっと問題を解いて理解を深めたいという方は、過去問題を解いてみるとよいでしょう。
なお、paizaラーニングでは、他にも情報処理試験対策に役立つ講座を公開しています。
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら
そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。
詳しくはこちら
*1:式を構成する要素のうち、演算子ではない要素のこと。具体的には、式に登場する数値や変数のことを指す。