アセンブリ言語を触ってた時のメモ
玉田研のざきもとです。3日前にプロジェクト演習の内容を知ってそのあと3日間アセンブラ触ってたので備忘録として簡単に命令の使い方とか書いていく。今回アセンブラ書くのに使うP88の参考資料がやさしいコンピュータ科学だったのでそれとか読んでアセンブラ書いたりしてた。ちなみにこれまで理工学実験くらいでしかアセンブラ触ったことないので経験的にはプロ演受講者と変わらない感じ。あと先生も言ってたけどこういう個人の勉強用のメモを学習教材にする感じはよくないので受講者はちゃんと授業資料とか参考書籍読んで勉強してほしい(説明とか間違ってる可能性もある)
- 作者: アラン・W.ビアマン,Alan W. Biermann,和田英一
- 出版社/メーカー: ASCII
- 発売日: 1993/06
- メディア: 単行本
- 購入: 6人 クリック: 184回
- この商品を含むブログ (30件) を見る
IN OUT(入力,出力)
IN AX OUT AX
COPY(値のコピー)
- COPY
- 指定した位置のメモリの内容をコピーする
サンプルコードでは,AXの内容がコピーされたBXが出力される。
- サンプルコード
IN AX IN BX COPY BX,AX ;BXにAXの内容をコピー OUT BX
ADD,SUB,MUL,DIV(算術演算)
- ADD
- 第1引数の値に第2引数の内容を加算する
- SUB
- 第1引数の値に第2引数の内容を減算する
- MUL
- 第1引数の値に第2引数の内容を乗算する
- DIV
- 第1引数の値に第2引数の内容を除算する
サンプルコードでは,AXにBXの数値を加算したものが表示される。
- サンプルコード
IN AX IN BX ADD AX,BX ;AXにBXを加算 OUT AX
JMP,END(ジャンプと終了)
IN AX IN BX JMP LAB1 ;LAB1ラベルまでジャンプ ADD AX,BX ;ジャンプされるので命令は無視される OUT AX LAB1 END ;プログラムの終了
CMP,JNB,JB(比較)
CMP
- 二つの整数の値を比較する
-
- 2つ目の数字の方が小さい場合ジャンプ
- JB
- 1つ目の数字の方が小さい場合ジャンプ
サンプルプログラム
IN AX IN BX CMP AX,BX ;AXとBXの大きさを比較 JNB LAB1 ;AXよりBXの方が小さい場合ジャンプ END ;プログラムの終了 LAB1 OUT AX
ラベル
IN AX COPY AAA,AX ADD AX,AAA OUT AX END
このプログラムを実行すると以下のような警告文が出る。
$ ./p88 label.p88 !!Undefined Label ... Memory allocated: AAA = [9], Line=2
これはAAAのラベルが定義されてねーよみたいな警告。
汎用レジスタである,AX,BX,CX,DXを使えば出ないけど,それ以外だと未定義ラベルの警告文が出る。
これが出てもp88は自動でメモリを割り当てるからある程度のプログラムは実行はできるし挙動は特に問題ないけど実際のアセンブラのプログラムではこれだと実行できないらしい。なのでラベルをちゃんと定義する。とりあえずコピーするだけなのでAAAには0を代入しておく
IN AX COPY AAA,AX ADD AX,AAA OUT AX END AAA 0 ;AAAに0を定義
これで警告は消えて問題なく実行できる。
ここまで理解できれば演習の問題は多分全部できるはずなので頑張って。