CASL入門

Similar documents
COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め

CASL入門

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが

Microsoft PowerPoint - 11.pptx

ex04_2012.ppt

PowerPoint プレゼンテーション

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

JavaプログラミングⅠ

Microsoft PowerPoint - prog04.ppt

コンピュータ工学Ⅰ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

コンピュータ工学Ⅰ

Microsoft PowerPoint - prog03.ppt

ex05_2012.pptx

CプログラミングI

情報処理演習 B8クラス

プログラミング実習I

2006年10月5日(木)実施

Prog1_10th

Microsoft Word - VBA基礎(6).docx

Microsoft PowerPoint - ProcML-12-3.ppt

Java講座

memo

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

第2回講義:まとめ

演算増幅器

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

slide5.pptx

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

プログラミング実習I

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

模擬試験問題(第1章~第3章)

プログラミング基礎

Microsoft PowerPoint - 09.pptx

Taro-ファイル処理(公開版).jtd

※ ポイント ※

PowerPoint プレゼンテーション

ガイダンス

PowerPoint Presentation

Prog1_12th

ファイル入出力

ポインタ変数

< F2D837C E95CF CF68A4A94C5816A2E6A>

PowerPoint プレゼンテーション

ポインタ変数

計算機アーキテクチャ

1 はじめに このアプリケーションは 計算機ハードウェア論 のアセンブリ言語 ( 超簡単命令セット ) の理解を助けるために製作されました 便宜的に機能を追加 削除した箇所があるため このアプリケーション上での動き方が実際のCPUでの動き方と異なる場合があることに留意してください このアプリケーショ

デジタル表現論・第6回

Microsoft PowerPoint - 5Chap15.ppt

スクールCOBOL2002

Microsoft Word - no103.docx

スクールCOBOL2002

プログラミング基礎

3. 標準入出力

Microsoft Word - Training10_プリプロセッサ.docx

スライド 1

PowerPoint プレゼンテーション

ファイル入出力

Microsoft PowerPoint - C1(演算と変数).ppt

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

Microsoft PowerPoint - kougi7.ppt

JavaプログラミングⅠ

Microsoft Word - 3new.doc

gengo1-2

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - CproNt02.ppt [互換モード]

第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

文字列 2 前回の授業ではコンピュータ内部での文字の取り扱い 文字型の変数 文字型変数への代入方法などを学習した 今回は 前回に引き続き 文字処理を学習する 内容は 標準入出力 ( キーボード ディスプレイ ) での文字処理 文字のファイル処理 文字を取り扱うライブラリ関数である 標準入出力 Lin

PowerPoint プレゼンテーション

CASL入門

PowerPoint プレゼンテーション

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

プログラミングI第5回

スライド 1

改訂履歴 Ver 年 ( 平成 30 年 )5 月 25 日ページ変更点 1 試験問題に出題する Java の変更 (Third Edition から Java SE 8 Edition に変更 ) Ver 年 ( 平成 28 年 )10 月 21 日ページ変更点

Prog1_2nd

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

PowerPoint プレゼンテーション

第1回 プログラミング演習3 センサーアプリケーション

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

PowerPoint プレゼンテーション

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

gengo1-12

セットアップカード

プレポスト【問題】

スライド 1

PowerPoint プレゼンテーション

RL78開発環境移行ガイド RL78ファミリ間の移行 (コンパイラ編:コンパイラオプション・アセンブラオプション)(CA78K0R→CC-RL)

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

Microsoft Word - Cプログラミング演習(9)

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint ppt

Transcription:

3 章 アセンブラ言語 CASLⅡ の仕様 ここでは アセンブラ言語の説明をします ちょっと待て 第 2 章の話は アセンブラ言語の話ではなかったのか と思われた人はいませんでしょうか 一般に プログラム という場合 その構成要素は次の 3 つに分かれます 1 動作のための命令加算 減算 比較などの命令 2 領域確保や定数定義など 動作しない部分 3 プログラム名の定義などこのうち 1が第 3 章で説明した部分にあたります この章では2と3について説明します - 1 -

3.1 言語の仕様 コーディングの仕方についての説明です (1) CASLⅡは COMETⅡのためのアセンブラ言語である これは あたりまえ の話のようですが COBOL や C Java といった いわゆる 高級言語 は 特に どのコンピュータのため ということが決まっていません それぞれのコンピュータ用のコンパイラがありますので 多くのコンピュータで使用できます ただし アセンブラ言語はコンピュータに対応したアセンブラ言語があり 一般的に他のコンピュータでは使用できない 1 特有の 言語ですので このような表現になっています (2) プログラムは 命令行および注釈行からなる コーディングにあたっては 命令の行と注釈 ( コメント ) の行があるということです これについては (4) でも述べます (3) 1 命令は 1 命令行で記述し 次の行へ継続できない 高級言語では あまり 行 という概念がありません 1 行に複数の命令を書いたり ひとつの命令を複数行にわたって書いたりできます CASLⅡでは このようなことは認められておらず 1 行にひとつの命令しか書けないということです 多くの他のアセンブラ言語も このような仕様になっているようです (4) 命令行および注釈行は 次に示す記述の形式で 行の 1 文字目から記述する ここでは オペランド という言葉が出てきますので これらの用語について説明します プログラム 1 行は 次の 4 つの部分からなっています 名称必須説明 1 ラベル変数名やジャンプ命令のとび先など 2 オペレーション必須命令そのもの 3 オペランド命令を補助する部分 4 コメント注釈表 3-1 命令の構成以下 順に説明します ラベル 1 カラム目から記述します オペレーションラベルがある場合は ラベルの後に 1 桁以上の空白をおいて記述します ラベルが無い場合は 2 カラム目以降から記述します 1 他のコンピュータでも使用できるような クロスアセンブラ と呼ばれるアセンブラが用意されている場合もありまるが これは身近に対応するコンピュータが無い場合にのみ テスト的に使用するものです コンピュータには特有の機能が多く これらの機能を生かすためには 専用のアセンブラ言語が必要なのです - 2 -

オペランドオペレーションに続いて 1 桁以上の空白をおいて記述します 通常の命令ではオペランドがありますが RET 命令など 無いものもあります オペランド部はさらに最大 3つの部分から構成されています たとえば LD GR1,KINGAKU,GR2 という命令の場合 オペランド部は GR1,KINGAKU,GR2 ですが この中の KINGAKU 部分を ディスプレースメント といいます コメントオペランドがある場合はオペランドの後に 1 桁以上の空白をおいて オペランドが無い場合はオペレーションの後に 1 桁以上の空白をおいて さらに ; を書いてから そのあとに記述します 整理しましょう 今 次のような命令があった場合 各部は下の表のようになります LABEL1 LD GR1,KINGAKU,GR2 ;COMMENT OF LD ラベルオペレーションレジスタオペランドディスプレースメントインデックスコメント表 3-2 命令の詳細詳細な構成 LABEL1 LD GR1 KINGAKU GR2 COMMENT OF LD 3.2 アセンブラ命令 アセンブラ命令は 実行する 命令ではなく プログラムの 骨格 のための命令で CASLⅡでは4つのアセンブラ命令が用意されています 3.2.1 START 命令プログラムの先頭に必ず書く命令で ラベル部がプログラム名になります オペランドにラベルを書くこともできますが 通常は 省略 でかまわないでしょう オペランドを省略すると プログラムの先頭から実行が開始されますが ラベルを書くと そのラベルのところから開始されます しかし わざわざこんなことをする必要もないので 普通は省略します 3.2.2 END 命令プログラムの最後に必ず書く命令で ラベルもオペランドもありません - 3 -

3.2.3 DC 命令 Define Constant の略で 名前の通り定数を確保します プログラムとして 実行 される命令ではありません DC は定数を定義する命令で 定数には次の4 種類があります 種類説明コーディング例 10 進定数 10 進数の数値を定義します DC 200 16 進定数 16 進の定数を定義します DC #00C8 文字定数文字列を定義します DC 'ABCDEFGH' ラベル定数アドレス LABEL1 表 3-3 DC 命令の種類 COMETⅡでは 1 文字は 8 ビットで表現されるため 上記の文字定数例は (8 文字ですから )4 語の領域を占めることになりますが CASLⅡでは 1 文字を 1 語に格納するとなっていますので 8 語の領域が確保されます 文字は各語の下位 8 ビットに定義され 上位 8 ビットはビットで '00000000' となります ここで 10 進とか 16 進とかを区別したのは あくまでもプログラムを分かりやすくするために区別したもので 10 進定数を 16 進で表現しても プログラムの動作はまったく代わりません たとえば DC 200 と DC #00C3 はまったく同じことになります 同様に DC 'A' は DC #0041 と書いても DC 65 と書いても まったく同じ結果になります ( ただし プログラムはたいへん分かりにくいものになりますが ) 後で詳しく述べますが CASLⅡでは変数そのものは属性を持ちません これに対し 一般的にコンパイラ言語では変数が属性を持っています たとえば C 言語で固定小数点で確保した変数は固定小数点演算でしか使用できませんし COBOL では文字型で定義した変数を計算に使用すれば コンパイル時にエラーになります - 4 -

CASLⅡでは 変数や定数の定義はいろいろな定義の仕方があるもんお これは単にプログラムを見やすくするためだけのもので 変数に属性を持っているわけではありません したがって文字として定義した変数を固定小数点演算で使用してもまったく問題はありませんし そん逆も大丈夫です CASLⅡでは 属性は命令が決める のです DC 命令は カンマでつないで 複数のオペランドを書くことができます DC 10 DC A DC #0041 は 次のように書いても まったく同じです DC 10, A,#0041 3.2.4 DS 命令 Define Storage の略で 領域を確保します DC 命令と違って 確保した領域に初期値は設定されず 単に領域を確保するだけです 3.2.5 リテラルについて リテラル という言葉について説明します いま プログラム中に 汎用レジスタ 1 を 16 進の X'F0F0' で論理積をとる という命令を記述するとします 普通は AND HF0F0 DC 1,HF0F0 #F0F0 というように記述します これは 面倒なので CASLⅡ では次のような書き方を認めています AND 1,=#F0F0 このように書くと アセンブラが = 以降を あたかも DC 命令で確保したかのように自動的に用意してく れます このような = 以下を リテラル と言います リテラルには DC 命令で記述できるのと同じ種類があります 種類 コーディング 説明 10 進リテラル =n nは 10 進数値 16 進リテラル =#xxxx xxxxは 16 進値 文字リテラル = cccc cccは文字 ラベルリテラル =LABEL1 表 3-4 リテラルの種類 - 5 -

3.3 マクロ命令 マクロ命令とは 複数の命令 ( ニーモニック ) をまとめてひとつの名前を付け あたかもひとつのニーモニックのようにしたもので C 言語の #include や COBOL の COPY 句 に似ています 単に複数のニーモニックの集合 1 ですから アセンブル時には普通のニーモニックと同じように処理されます 従って アセンブルの結果を見ますと 元のマクロ命令は無くなって ( 通常はコメントアウトされて ) 展開されたニーモニックがアセンブルされていることになります ニーモニックへの展開は アセンブル時の第 1 フェーズ 2 で行われます CASLⅡでは4つのマクロ命令が定義 3 されています IN OUT RPUSH RPOP 順に説明します 3.3.1 IN 命令 入力装置から文字を読み込む命令と定義されています IN 入力領域, 入力文字長領域 こんなコーディングになります IN INAREA,INLEN INAREA DS 256 INLEN DS 1 読み込んだ文字は INAREA へ先頭から格納されます 文字は 1 語に 1 文字づつ格納されます CASLⅡ では 1 文字は 8 ビットで定義されていますから 1 文字を 1 語に格納すると 8 ビット余ってしまい ます 文字は 1 語の右半分に格納され 左半分は全ビットが 0 に設定されます 読み込む文字数は最大で 256 文字になりますから この領域は 256 語以上確保しておいたほうが良いでしょう 確実に 100 文字以下しか読まないから 100 語しか確保しない でもかまいませんが 安全を見込んで 256 語用意したほうが良いでしょう 読み込んだ文字数が 256 以下のとき 余った領域は何も変化せず 元のままとなっています 1 マクロ命令にパラメータを与えて さまざまに展開する機能をもつアセンブラ言語もありますが CASLⅡでは定義されていません 2 第 4 章を参照 3 メーカーから提供されるもののほかに自分で作成することもできるのが普通ですが CASLⅡでは自作方法につ いて述べられていませんので マクロ命令としては 4 つのみになります - 6 -

また C 言語のように 文字の最後に NULL がセットされるということもありません INLEN には読み込んだ文字数が格納されます ここに 10 が格納されていれば INAREA から 10 語に文字が格納され 11 語目からは元のままになっています INLEN が-1 のときは EOF(End Of File) を意味します つまり 読み込むデータが無くなったので 何も読んでいない という意味です EOF になったときの INAREA の内容については定義されていませんが おそらく その前に読み込んだ内容 が残っていると思われます 3.3.2 OUT 命令 OUT 命令は IN 命令とは逆に 文字を書き出すマクロ命令です OUT 出力領域, 出力文字長領域 こんなコーディングになります OUT OUTAREA,OUTLEN OUTAREA DC 'ABCDEFGH' OUTLEN DC 6 OUTAREA の内容が先頭から順に (OUTAREA から順に )OUTLEN に格納されている文字数分 書き出されま す この場合 OUTAREA には 8 文字定義されていますが OUTLEN が 6 なので 'ABCDEF' の 6 文字が書き出 されます OUT 命令の場合も IN 命令と同様に 1 文字 1 語で書き出されます 書き出す文字は 語の右 8 ビットに格納しておきます 語の左半分は無視されますので 特に全ビットを 0 にしておく必要はありません 3.3.3 RPUSH/RPOP 命令 このマクロ命令は 汎用レジスタ 1~7 までの 6 個を順にスタックへ格納 (RPUSH) 取り出す (RPOP) 命令で す RPUSH マクロ命令は 次のように展開されます PUSH 0,GR1 PUSH 0,GR2 PUSH 0,GR7 また RPOP マクロ命令は次のように展開されます POP GR7 POP GR6 POP GR1 汎用レジスタの順番が RPUSH と RPOP で逆になっていることに注意してください ( マクロ命令なので気にす る必要はないかもしれませんが ) - 7 -

スタックは 最後に入れたものが最初に 取り出されます これらの命令の使用法は 5 章で説明します - 8 -

3.4 言語比較 ここで CASLⅡと C 言語 COBOL について 主な機能を比較してみましょう C 言語 COBOL CASLⅡ 変数定義 int char 他 PIC DC 10 進数 なし ゾーン付き 10 進パック 10 進 なし 変数の種類 固定小数点 (2 進 ) 固定小数点 (2 進 10 進 ) 変数は属性を持たないが 浮動小数点文字 文字列アドレス 浮動小数点文字 文字列 初期値として以下の定義が可能固定小数点文字 文字列 16 進の値アドレス 変数の大きさ 各種 各種 1 語のみ 領域定義 変数定義で代用 変数定義で代用 DS 配列 [ ] で記述 OCCURS 指標レジスタを使用して自分で管理 変数の再定義 UNION REDEFINES なし 転送 a=b の形式 MOVE レジスタ経由 判断 if IF CPA CPL 計算 数式を記述 COMPUTE レジスタを使用加減算のみ 繰り返し for while PERFORM 条件 分岐を使用して自分で管理 分岐 goto GO TO JUMP 複数分岐 case switch GO TO DEPENDING なし 関数 サブルーチ ルーチン名を記述 CALL CALL ン呼び出し 擬似変数 関数名 決められた幾つかのみ なし スタック なし なし PUSH POP で操作 マクロ機能ソースのコピー include デバッグ文 COPY IN OUT RPUSH RPOP 作成方法は未定義 表 3-5 言語比較 - 9 -