#author("2022-04-20T20:25:42+09:00","","")
#author("2022-04-20T20:28:27+09:00","","")
* 第3日後半 アセンブラ(CASL)実習 [#jbb0621e]

** 目次 [#s35eae2d]

#contents

** 実習 [#q1ac8ddf]

*** CASL?環境(EduCasl)の設定 [#q383e9c3]

+ 以下からCASLのエミュレータをダウンロードする。
-- http://vilab.org/summer/educasl.zip
+ 展開して,Setup.Exeを実行(ダブルクリック)する。
+ スタートメニューからEduCaslを実行する。
-- EduCaslが動かない人は,これを(.NET 1.1)入れる必要があるかもしれない。
--- http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&DisplayLang=ja

*** EduCaslの実行 [#tdb4c138]

+ ソースコード入力画面が出るので,プログラムを打ち込む。
+ プログラムを入力し終わったら,「アセンブル」でアセンブルする。
+ エラーが出なければ,「実行」ボタンが押せるようになり,実行画面に移れる。
+ 実行画面では,メモリやレジスタの内容を確認しながら,1行ずつ実行できる。

*** プログラムの実行 [#m8ea2f64]

- 以下のプログラムを入力して,どのような動作をするか調べてみなさい。
- 動作の要点を言葉で説明し,さらにフローチャートを書きなさい。

+ メッセージ出力
 HELLO    START
          OUT    BUF,LEN
          RET
 BUF      DC     'HELLO!'
 LEN      DC     6
          END
+ ロードとストア
 EXLD     START
          LD     GR0, DATA1
          LAD    GR1, 20
          ST     GR0, DATA2
          ST     GR1, DATA3 
          RET
 DATA1    DC     10
 DATA2    DS     1
 DATA3    DS     1
          END
+ 演算(減算)
 EXSUB	START
 	LD	GR1,X
 	LD	GR2,Y
 	SUBA	GR1,GR2
 	ST	GR1,Z
 	RET
 X	DC	15
 Y	DC	6
 Z	DS	1
 	END
+ 演算(加算と減算)
 EXSUB  START
         LD      GR0,X
         ADDA    GR0,Y
         SUBA    GR0,Z
         ST      GR0,W
         RET
 X       DC      90
 Y       DC      87
 Z       DC      77
 W       DS      1
         END
+ 条件分岐(if)
 EXIF	START
 	LD	GR1,DATA1
 	CPA	GR1,DATA2
 	JZE	SKIP1
 	LAD	GR2,0
 	JUMP	SKIP2
 SKIP1	LAD	GR2,1
 SKIP2	ST	GR2,ANS
 	RET
 DATA1	DC	5
 DATA2	DC	5
 ANS	DS	1
 	END

*** 上級課題 [#m1f36563]

+ 繰り返し(while)
 EXLOOP	START
 	LAD	GR1,0	;GR1の初期値を0とする
 LOOP	LD	GR2,GR1
 	LD	GR3,GR2
 	LD	GR4,GR3
 	ADDA	GR1,C1	;GR1を1増やす
 	CPA	GR1,N
 	JMI	LOOP
 	RET
 N	DC	3
 C1	DC	1
 	END
+ ループと演算の組み合わせ
 SUM10      START  ENTRY
 ; データ
 COUNT    DC     10         ; 値10
 C1       DC     1          ; 値1
 TOTAL    DC     0          ; 結果
 ; プログラム
 ; GR1=カウンタ
 ; GR2=総和
 ENTRY    LD     GR1,COUNT  ; カウンタの初期値
          XOR    GR2,GR2    ; 総和の初期値=0
 LOOP     ADDL   GR2,GR1    ; 総和に加算
          SUBL   GR1,C1     ; カウンタから1を引く
          JNZ    LOOP       ; 0でなければLOOPへ飛ぶ
          ST     GR2,TOTAL  ; 総和をストア
          RET
          END
+ DCで確保した数値の内容を4倍するCASLプログラムを作成しなさい。
+ DCで確保した数値の内容が偶数か奇数かを判定するCASLプログラムを作成しなさい。
+ 10以上20未満の整数の合計を計算するCASLプログラムを作成しなさい。

- もし時間が余ったら申告してください。さらに課題を作ります。

** CASL?エミュレータ [#ff70d8ef]

- EduCasl
-- http://www.vector.co.jp/soft/winnt/prog/se369290.html
-- 動かない人は,これを(.NET 1.1)入れる必要があるかも。
--- http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&DisplayLang=ja
- Web版CASL?エミュレータ
-- http://www.chiba-fjb.ac.jp/fjb_labo/casl/casl2.cgi
- その他のエミュレータ
-- http://www.vector.co.jp/vpack/filearea/win/prog/casl/
- IPAの純正エミュレータ

** 参考資料 [#e5044631]

*** CASL?公式 仕様書 [#y96dd718]

- アセンブラ言語の仕様
-- http://www.jitec.jp/1_01mosikomi/18a_annaisho/18a_11.pdf

*** おすすめ資料 [#ja73465c]

- COMET? & CASL?
-- http://www016.upp.so-net.ne.jp/masuda2/text2/casl2/index.html
- CASL入門コーナー
-- http://www5a.biglobe.ne.jp/~teamcasl/caslkozatop.htm
- だれでも一度はアセンブラを学んでおこう!(日経BP ITPro)
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021218/1/
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021220/1/
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021224/1/
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021225/1/
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021226/1/

*** その他の資料 [#c336f693]

- アセンブラ言語入門 CASL? (東北福祉大学)
-- http://tfusvsun.tfu.ac.jp/mko/CASL2/index.html
- CプログラマのためのCASLII入門講座
-- http://www.officedaytime.com/dcasl2/pguide/index.html
- CASLII入門
-- http://ww3.tiki.ne.jp/~tno2/shikaku/casl_content.htm
- 計算機の原理とアセンブラ(電気通信大学) 
--http://www.mlab.ice.uec.ac.jp/mit/text/Jikken/casl/casl.html
- 計算機基礎(三重大学)
-- http://www.cs.info.mie-u.ac.jp/~toshi/lectures/introcomp/index.html



トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS