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

CASL II

N/A
N/A
Protected

Academic year: 2021

シェア "CASL II"

Copied!
4
0
0

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

全文

(1)

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

山本昌志

2005

2

4

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

本日の内容

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

IN

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

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

1

(2)

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)

! #"%$&'

( )+*,.-#/0 ".$&#'

1 2331 4+567-+8

9:1 +;!%<#*=#>

9 ?( 9@ACBD;!%E0F,G%H+IKJ

LM

N9 O QPSR+T

UVW XY -8[Z.\C4+5](06^

_Y`2 a2339b4+56C<#*=#*

1aOc3d e&,F%fgih;+j+E#k'7l0m

nopX (d,6)+*

L q`2 r++fg

s n 7t!

((( u,I+F,G%H+IKJ

9 ?( 9@ACBD;,6CE0F,G%H+IKJ

:N9 vw+xC6y!z{J

U1V|_Y:`2 9}~P7€7‚Kƒ…„{Z

QY a233 †‡,6%06Cfg

LMNa O‰ˆ?‰ˆ †‡,6%0]eu+Š+&+‹CŒ#

UV` 12 eu#Š&#6^7Ž+

1aOc3d#wC&+6!P7€Ce+&F7fg

nopX (d)+*#6C<#*=#*

L q`2 r++fg

s n 7t!

U:2:`

M

Yo fg+‘’

`12 “Y”Oc3333d eu#Š&#60PC€C6fg

s O( (67•+;,–0Z.—+(#

Yo

233 ( 4+5+E+k'6C˜+™+š›

1 (

op L (((((

:1

`2

LMNa O ;j#E+k']œ0C‹7Œ

UVNVY œ0C6^7Ž+

n::` M n%ž#^CŸ+ 

`YY M a ?( adE,F0G.H#I[J

LM

Na O œ0C‹7Œ

UVN3 1 œ0C6^7Ž+

sn ::` M ,6)+*,!

U:2:` M `YY M ‚[ƒS„Zl

VY n a]60PC€

31

:` M (

:1

¥Q¦§‰¨ª©

¥Q¦:©S¨ª©

§«¬7­¯®°C±

¥X¦²³.´ µ¶·:§¸

¹º+»¼½

³¥X¦¾ ¸7¿À+Á7Â+ÃÄ

¥Q¦§³ÅSÆ

»Ç¯ÈÊÉ

¸ËQÁ

¥Q¦:Ì:¸«Í+Îϳ.¿À#Ð

¥X¦:̳¥Q¦:©:¸%Ñ+Ò%Ð ÓÔ+ÕÖ

¥Q¦§ÅSÆ È×QØ

ÆCÙ

¥Q¦²

»È×XØ

ÆCÙ

¥X¦²Ú©

ÛÜÝ

¡¢£:¤¢

¥X¦¾Þ ©

ß µà‰á%¨â¥Q¦:Ì

ÛÜÝ ãSä

_

1Y

O

å

¥Q¦æ¨ª©

_

1Y

¥X¦¾Þ ©

¥X¦:ÌS¨â¥Q¦:Ìçß µ:à¯á

¥Q¦¾

»È×XØ

ÆCÙ èé

Í«#Í Õ+Ö

èé

ÍC«ê+ë·¯ìÍíªÚ²ÍCî#Â

ïð Ç Ùñò

ï

ç:§Ñ Ô

èé

êÂ

º

Íó+ô

ïõ Â+Ä

ï

ÎÏ+ö#÷C˯Á%Ñ

Ô

ø+ù.ú ¼û

Æ%Í Õ+Ö

¥Q¦:ÌQü…¥Q¦¾…ýâ¥Q¦:Ì

1:

教科書の

List5-11

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

4

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

参照

関連したドキュメント

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

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

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

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

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

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

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

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