『情報処理入門 アセンブラ言語編03: アセンブラ言語の命令を理解しよう (全9回)』
アセンブラ言語、手強い😫
これはきちんと勉強した方が良さそうだな😅
Tipsを改めて確認したところ、
アセンブラ言語CASLⅡの仕様として以下のサイトが紹介されており、
リンク先ではWeb版のシミュレータも利用することができる。
リンク先をちゃんと確認してからの方が良さそうだけど、
とりあえず続きを始めよう。
#01:アセンブラ命令を理解しよう
- 命令コードの種類
- 機械語命令
- CPUを直接操作する命令
- 機械語に変換される
- 例:LD、ADDA、ST、RET - アセンブラ命令
- アセンブラに対して指示をする
- 開始アドレスや、ラベルを置き換える
- 例:START、END、DC、DS - マクロ命令
- あらかじめ用意されたプログラムを呼び出し
- 例:IN、OUT
- 機械語命令
- START命令:プログラムの先頭を定義
- 実行開始番地で、プログラムの実行を開始するアドレスを指定できる
- 実行開始番地を省略した場合は、STARTの次の命令から実行を開始する
- START命令の前のラベルは、このプログラムを他から呼び出す場合に指定する
START [実行開始番地] |
- END命令:プログラム全体の終わりを定義
- コードの末尾をあらわす
- RETの次からENDまでがデータ領域
END |
#02:マクロ命令でキーボード入力しよう
- DC命令:データ領域に値を格納するDC 定数
- データ領域を確保し、そこに値を配置する
- 定数には、10進数・16進数・文字定数・ラベルを指定
- 10進数:符号付き2進数 −32768 〜 32767
- 16進数:4桁の16進数、先頭に「#」を付ける
- 文字定数:文字数分の領域を確保し、文字データを格納する。アポストロフィで囲む
- アドレス:ラベルに対応するアドレスを格納する
- 格納した値を読み込むには、ラベルを利用する - DS命令:データ領域を確保するDS 語数
- 語数は、10進数で記述する。指定した語数のメモリ領域を確保
- 値のアクセスは、ラベルを利用する - OUT命令:テキストを出力するOUT 出力領域, 出力文字長領域
- 割り当てられた出力装置に、文字データを書き出す
- 出力領域:文字定数が格納された領域のラベルを指定する
- 出力文字長領域:出力する文字数を格納する領域のラベルを指定 - IN命令:テキストを入力するIN 入力領域, 入力文字長領域
- 割り当てられた入力装置から、文字データを入力する
- paizaラーニングでは、キーボードから文字を入力
- 入力領域:入力文字を格納する領域のラベルを指定
- 入力文字長領域:入力した文字数を格納する領域のラベルを指定
#03:算術加算と論理加算をやってみよう
- ADDA命令
算術加算:16ビットの符号付き2進数として加算をおこなう
- 演算範囲は、-32768(#8000) ~ 32767(#7FFF)
- 演算結果がこの範囲を超えると、OFが「1」になる
- レジスタ間の加算と、レジスタ・メモリ間の加算ができる - ADDL命令
論理加算:16ビットの符号なし2進数として加算をおこなう
- 演算範囲は、0 ~ 65535(#FFFF)
- 演算結果がこの範囲を超えると、OFが「1」になる
- レジスタ間の加算と、レジスタ・メモリ間の加算ができる
#04:算術減算と論理減算をやってみよう
- SUBA命令
算術減算:符号付き2進数として減算をおこなう
- 演算範囲は、-32768 ~ 32767
- 演算結果がこの範囲を超えると、OFが「1」になる
- レジスタ間の減算と、レジスタ・メモリ間の減算ができる - SUBL命令
論理減算:符号なし2進数として減算をおこなう
- 演算範囲は、0 ~ 65535
- 演算結果がこの範囲を超えると、OFが「1」になる
- レジスタ間の減算と、レジスタ・メモリ間の減算ができる
#05:AND命令とOR命令の役割を理解しよう
- AND命令
- 16ビットのAND演算
- 演算結果に合わせてサインフラグとゼロフラグが変化する
オーバーフローフラグは「0」になる
- レジスタ間と、レジスタ・メモリ間で演算できる
命令 | 書き方 | 命令の説明 | |
命令コード | オペランド | ||
論理積 AND | AND | r1,r2 | r1←(r1) AND (r2) |
r,adr[,x] | r1←(r) AND (実効アドレス) |
- OR命令
- 16ビットのOR演算
- 演算結果に合わせてサインフラグとゼロフラグが変化する
オーバーフローフラグは「0」になる
- レジスタ間と、レジスタ・メモリ間で演算できる
命令 | 書き方 | 命令の説明 | |
命令コード | オペランド | ||
論理和 OR | OR | r1,r2 | r1←(r1) OR (r2) |
r,adr[,x] | r1←(r) OR (実効アドレス) |
- AND命令の使い道
- 特定ビットの0/1を判別
- 組み込み機器で、特定のメモリアドレスに、スイッチやセンサーを接続
- そのオン(1)/オフ(0)を判別したい
- 判別したいビットだけ「1」、残りを「0」にして、ANDで演算する - 特定ビットを「0」に設定
- 組み込み機器で、特定のメモリアドレスに、LEDや出力装置を接続
- そのビットをオフ(0)に設定したい
- 設定したいビットだけ「0」、残りを「1」にして、ANDで演算する
- 特定ビットの0/1を判別
- OR命令の使い道
- 特定ビットを「1」に設定
- 組み込み機器で、特定のメモリアドレスに、LEDや出力装置を接続
- そのビットをオン(1)に設定したい
- 設定したいビットだけ「1」、残りを「0」にして、ORで演算する
- 特定ビットを「1」に設定
#06:AND命令とOR命令を使ってみよう
- 実際にコーディング
#07:排他的論理和でビットを反転しよう
- XOR命令
- 16ビットのExclusive OR演算(排他的論理和)
- 演算結果に合わせてサインフラグとゼロフラグが変化する
オーバーフローフラグは「0」になる
- レジスタ間と、レジスタ・メモリ間で演算できる
命令 | 書き方 | 命令の説明 | |
命令コード | オペランド | ||
排他的論理和 XOR | XOR | r1,r2 | r1←(r1) XOR (r2) |
r,adr[,x] | r1←(r) XOR (実効アドレス) |
- XOR命令の使い道
- 特定ビットを反転
- 特定のビットを反転、つまり「0」→「1」、「1」→「0」に設定したい
- 設定したいビットだけ「1」、残りを「0」にして、XORで演算する
- 組み込み機器で、特定のメモリアドレスに、LEDや出力装置を接続
- 特定ビットを反転
※ 2個めの演習課題がムズい😭
#08:シフト演算命令 - その1
- シフト演算命令:レジスタの値を指定ビット分、移動させる
- 算術シフト:符号ビットを含まずにシフトする
- SLA命令:左方向に算術シフト
- SRA命令:右方向に算術シフト - 論理シフト:符号ビットを含めてシフトする
- SLL命令:左方向に論理シフト
- SRL命令:右方向に論理シフト
- 算術シフト:符号ビットを含まずにシフトする
- 左方向に算術シフトSLA SLA r, adr [, x]
- 符号ビットを含まずに、ビットパターンを左方向に移動
- 右側の空いたビットは「0」になる
- 左側のはみ出したビットは削除される
- 最後にはみ出したビットをOFにセット
- シフトする量を、実効アドレスで指定する
SLA GR0, 1 ; 1ビット左に算術シフト
SLA GR0, 2 ; 2ビット左に算術シフト - 右方向に算術シフトSRA SRA r, adr [, x]
- 符号ビットを含まずに、ビットパターンを右方向に移動
- 左側の空いたビットは、符号ビットと同じ値になる
- 右側のはみ出したビットは削除される
- 最後にはみ出したビットをOFにセット
- シフトする量を、実効アドレスで指定する
SRA GR0, 1 ; 1ビット右に算術シフト
SRA GR0, 2 ; 2ビット右に算術シフト
#09:シフト演算命令 - その2
- 左方向に論理シフト
SLL SLL r, adr [, x]
- 符号ビットを含めて、ビットパターンを左方向に移動
- 右側の空いたビットは「0」になる
- 左側のはみ出したビットは削除される
- 最後にはみ出したビットをOFにセット
- シフトする量を、実効アドレスで指定する
SLL GR0, 1 ; 1ビット左に論理シフト
SLL GR0, 2 ; 2ビット左に論理シフト - 右方向に論理シフト
SRL SRL r, adr [, x]
- 符号ビットを含めて、ビットパターンを右方向に移動
- 左側の空いたビットは「0」になる
- 右側のはみ出したビットは削除される
- 最後にはみ出したビットをOFにセット
- シフトする量を、実効アドレスで指定する
SRL GR0, 1 ; 1ビット右に論理シフト
SRL GR0, 2 ; 2ビット右に論理シフト - NOP命令 No Operation:何もしない
- 実際のCPUでは、命令1個分の時間を消費する
- 実行時のタイミング調整や、ダミー命令に利用する
認定証
学習ステータス
駆け出しから若手吟遊詩人に昇格
ところで、吟遊詩人って強いのか?😬
楽器でモンスターと戦えるんだろうか?😁
※コメント投稿者のブログIDはブログ作成者のみに通知されます