OS/2008-F05
の編集
https://vilab.org/lecture/?OS/2008-F05
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
* アセンブラ実習 [#o1cacc26] ** 目次 [#gf632670] #contents ** 実習 [#v824cfc4] *** CASL II 環境(EduCasl)の設定 [#k207c796] + 以下から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の実行 [#d65839c7] + ソースコード入力画面が出るので,プログラムを打ち込む。 + プログラムを入力し終わったら,「アセンブル」でアセンブルする。 + エラーが出なければ,「実行」ボタンが押せるようになり,実行画面に移れる。 + 実行画面では,メモリやレジスタの内容を確認しながら,1行ずつ実行できる。 *** テストプログラム [#vb872496] - 以下のプログラムを入力して,どのような動作をするか調べてみなさい。 + メッセージ出力 TEST1 START OUT BUF,LEN RET BUF DC 'HELLO!' LEN DC 6 END + ロードとストア TEST2 START LD GR0,DATA1 LAD GR1,20 ST GR0,DATA2 ST GR1,DATA3 RET DATA1 DC 10 DATA2 DS 1 DATA3 DS 1 END *** 課題プログラム [#c0ac930f] - 以下のプログラムを入力して,どのような動作をするか調べてみなさい。 - フローチャートを描きなさい。 + 算術演算(引き算) PROG1 START ; プログラム LD GR0,X LD GR1,Y SUBA GR0,GR1 ST GR0,Z RET ; データ X DC 15 Y DC 6 Z DS 1 END + 条件分岐(if) PROG2 START MAIN ; データ DATA1 DC 5 DATA2 DC 5 ANS DS 1 ; プログラム MAIN LD GR0,DATA1 CPA GR0,DATA2 JZE SKIP1 LAD GR0,0 JUMP SKIP2 SKIP1 LAD GR0,1 SKIP2 ST GR0,ANS RET END +アドレス修飾(配列) PROG3 START ; プログラム LAD GR0,10 LAD GR1,0 LD GR2,N LAD GR3,1 LOOP ST GR0,A,GR1 ADDA GR1,GR3 CPA GR1,GR2 JMI LOOP RET ; データ A DS 5 N DC 5 END + 繰り返し(ループ) PROG4 START MAIN ; プログラム MAIN XOR GR0,GR0 LD GR1,N LDA GR2,1 LOOP ADDA GR0,GR1 SUBA GR1,GR2 JNZ LOOP ST GR0,TOTAL RET ; データ N DC 10 SUM DS 1 END + サブルーチン(レジスタ渡し) PROG5 START MAIN DATA1 DC 5 DATA2 DC 10 ANS DS 1 ; メインルーチン MAIN LD GR0,DATA1 LD GR1,DATA2 CALL MAX ST GR0,ANS RET ; サブルーチン MAX CPA GR0,GR1 JPL MAXR LD GR0,GR1 MAXR RET END +サブルーチン(スタック渡し) PROG6 START MAIN DATA1 DC 5 DATA2 DC 10 ANS DS 1 ; メインルーチン MAIN LD GR0,DATA1 PUSH GR0 LD GR0,DATA2 PUSH GR0 CALL MAX ST GR0,ANS RET ; サブルーチン ; 戻り先番地をGR7に退避 MAX POP GR7 POP GR0 POP GR1 CPA GR0,GR1 JPL MAXR LD GR0,GR1 ; 戻り先番地をスタックに戻す MAXR PUSH 0,GR7 RET END
タイムスタンプを変更しない
* アセンブラ実習 [#o1cacc26] ** 目次 [#gf632670] #contents ** 実習 [#v824cfc4] *** CASL II 環境(EduCasl)の設定 [#k207c796] + 以下から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の実行 [#d65839c7] + ソースコード入力画面が出るので,プログラムを打ち込む。 + プログラムを入力し終わったら,「アセンブル」でアセンブルする。 + エラーが出なければ,「実行」ボタンが押せるようになり,実行画面に移れる。 + 実行画面では,メモリやレジスタの内容を確認しながら,1行ずつ実行できる。 *** テストプログラム [#vb872496] - 以下のプログラムを入力して,どのような動作をするか調べてみなさい。 + メッセージ出力 TEST1 START OUT BUF,LEN RET BUF DC 'HELLO!' LEN DC 6 END + ロードとストア TEST2 START LD GR0,DATA1 LAD GR1,20 ST GR0,DATA2 ST GR1,DATA3 RET DATA1 DC 10 DATA2 DS 1 DATA3 DS 1 END *** 課題プログラム [#c0ac930f] - 以下のプログラムを入力して,どのような動作をするか調べてみなさい。 - フローチャートを描きなさい。 + 算術演算(引き算) PROG1 START ; プログラム LD GR0,X LD GR1,Y SUBA GR0,GR1 ST GR0,Z RET ; データ X DC 15 Y DC 6 Z DS 1 END + 条件分岐(if) PROG2 START MAIN ; データ DATA1 DC 5 DATA2 DC 5 ANS DS 1 ; プログラム MAIN LD GR0,DATA1 CPA GR0,DATA2 JZE SKIP1 LAD GR0,0 JUMP SKIP2 SKIP1 LAD GR0,1 SKIP2 ST GR0,ANS RET END +アドレス修飾(配列) PROG3 START ; プログラム LAD GR0,10 LAD GR1,0 LD GR2,N LAD GR3,1 LOOP ST GR0,A,GR1 ADDA GR1,GR3 CPA GR1,GR2 JMI LOOP RET ; データ A DS 5 N DC 5 END + 繰り返し(ループ) PROG4 START MAIN ; プログラム MAIN XOR GR0,GR0 LD GR1,N LDA GR2,1 LOOP ADDA GR0,GR1 SUBA GR1,GR2 JNZ LOOP ST GR0,TOTAL RET ; データ N DC 10 SUM DS 1 END + サブルーチン(レジスタ渡し) PROG5 START MAIN DATA1 DC 5 DATA2 DC 10 ANS DS 1 ; メインルーチン MAIN LD GR0,DATA1 LD GR1,DATA2 CALL MAX ST GR0,ANS RET ; サブルーチン MAX CPA GR0,GR1 JPL MAXR LD GR0,GR1 MAXR RET END +サブルーチン(スタック渡し) PROG6 START MAIN DATA1 DC 5 DATA2 DC 10 ANS DS 1 ; メインルーチン MAIN LD GR0,DATA1 PUSH GR0 LD GR0,DATA2 PUSH GR0 CALL MAX ST GR0,ANS RET ; サブルーチン ; 戻り先番地をGR7に退避 MAX POP GR7 POP GR0 POP GR1 CPA GR0,GR1 JPL MAXR LD GR0,GR1 ; 戻り先番地をスタックに戻す MAXR PUSH 0,GR7 RET END
テキスト整形のルールを表示する