• 検索結果がありません。

CASL II

N/A
N/A
Protected

Academic year: 2021

シェア "CASL II"

Copied!
4
0
0

読み込み中.... (全文を見る)

全文

(1)

CASL II のプログラム例 ( その 4)

山本昌志

2006

2

24

1 復習と本日の内容

1.1

復習

前回は,数値データを文字データに変換するプログラムを学習した.数値を文字コードに変換するために は,以下のようにした.最大の桁から文字コード に変換する.

1.

変換したい桁の値を求める.それには,数値をその桁で割る.(例

23456 ÷ 10000 = 2

余り

3456) 2.

商に#0030を加算.(例

OR GR2,MOJI ;GR3: MOJI:#0030)

3.

この加算した値が,文字コード になる.

4.

次の桁は,余り

(例 3456)

について同様の処理を行う.

要するに整数の文字を表す文字コード は,表

1

のようになっており,その差が#0030である.

1:

数字を表す文字のコード

文字 文字コード (16進数)

0 #0030

1 #0031

2 #0032

3 #0033

4 #0034

5 #0035

6 #0036

7 #0037

8 #0038

9 #0039

独立行政法人  秋田工業高等専門学校  電気工学科

1

(2)

1.2

本日の内容

本日は,前回の逆で,文字コード を数値に変換する.これは,マクロ命令

IN

を使ってキーボードから数 値を読み込んで,それを処理するプログラムに応用できる.

IN

命令で数値を読み込むが,それは文字コード でメモリーに格納される.その文字コード で格納された 整数を実際の整数に変換する方法を学習する.

2 [ 例題 11] 文字データを数値データに変換

教科書の

List5-11

のプログラムを例にして,文字データを数値データに変換する方法を学習する.

2.1

教科書の例

教科書のプログラムは,

キーボード から数値を読み込む.読み込まれた数値は,文字コード になり,それをラベル

BUFF

が示 すアドレスから格納される.読み込まれた文字数は,ラベル

LEN

に格納される.キーボードから入力 する文字は,0〜9と’-’のみである.

この,BUFFから格納された

LEN

個の整数を表す文字列を整数に変換する.

変換された整数を汎用レジスター

GR0

に格納する.

という問題を解く,プログラムである.このプログラムは,教科書の

p.118-119

List5-11

に示されている.

2.2

プログラムの構造とフローチャート

このプログラムのフローチャートを図

1

に示す.このプログラムの内容については,教科書に沿って説明 する.

まずは,教科書

p.115

の文字を格納するメモリー領域を

BUF DS 256

が気になるところである.この

256

とはいったい何かである.256=28である.これはコンピューターでよ く使われる整数で,多分この場合は

1

レコード の値と思われる.1回に読み込まれる最大文字数のつもりで

あろう

(推測).通常,このようにするとデータ転送の効率が良いのである.ただ,COMMET II

にはそん

な仕様は無いので気にする必要はない.実際に使われている機器のアセンブラのプログラムを書く場合は,

注意が必要である.

後は教科書に沿って説明する.

2

(3)

2:

メインルーチンの汎用レジスターとメモリの内容

GR0

最終的に,読み込んだ整数になる

GR1

桁の重みを読み出すときに使うインデックスレジスター

GR2

処理の桁を示し ,先頭の桁

(符号の時もある)

がゼロで,1の位が

LEN-1

となる

GR3

処理している桁の整数値

GR4

その桁の値

(桁を表す整数 ×

その桁の重み)

DATA

調べるデータの先頭アドレス.

BUFF

読み込まれた整数を文字コード として格納している先頭のアドレス.

LEN

読み込んだ文字数.

3:

サブルーチン

MULTI

の汎用レジスターの内容.このサブルーチンでは

GR4 × GR3 GR4

を計算して いる.

レジスター 実行前 実行後

GR3

乗算する値

(カウンターとして使う) 0

GR4

乗算する値 除算の結果

3

(4)

! "#

!

$ $

! "#

!

"

%

"

"#

! !

!

!

1:

教科書の

List5-11

のプログラムの構造とフローチャート

4

表 2: メインルーチンの汎用レジスターとメモリの内容 GR0 最終的に,読み込んだ整数になる GR1 桁の重みを読み出すときに使うインデックスレジスター GR2 処理の桁を示し ,先頭の桁 (符号の時もある) がゼロで,1 の位が LEN-1 となる GR3 処理している桁の整数値 GR4 その桁の値 (桁を表す整数 × その桁の重み) DATA 調べるデータの先頭アドレス. BUFF 読み込まれた整数を文字コード として格納している先頭のアドレス. LEN 読み込んだ文字数. 表 3: サブルーチン M

参照

関連したドキュメント

オプション casl2 は、次のオプションを指定できます。 -s --source CASL ファイルの内容を表示します。

fread() では , 読み込んだ値を第一引数のポインタ値が指すメモリに順に格納 ( コピー )

データの読み込み 数値・テキストデータの読み込みは以下の関数が用意されている. load ワークスペース内変数を保存した

ファイルからデータの読み込みととキーボード からのデータ読み込みを並べて書くと ファイル入力 int fscanf(ファイルポインター, 書式指定, 引数並び) キーボード

しかし,アセンブラーでは,こんなに簡単ではない.そもそも,if

教科書の P.28〜P.35 で説明している非実行文と書かれているものである。アセンブラーという変換プロ グラムに対して、いろいろな指示を行う命令である。COMET

プログラムで使うメモリーのアドレスは、ANS+オフセットで、オフセットは、0,1,2 とすれば良い。論 理和の結果を ANS+0、論理積の結果を

半角 半角 半角カナ 半角 カナ カナ文字 カナ 文字 文字の 文字 の の の読 読 読 読み み込 み み 込 込 込みを みを みを みを回避 回避 回避する