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
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
表
2:
メインルーチンの汎用レジスターとメモリの内容GR0
最終的に、読み込んだ整数になるGR1
桁の重みを読み出すときに使うインデックスレジスターGR2
処理の桁を示し 、先頭の桁(符号の時もある)
がゼロで、1の位がLEN-1
となるGR3
処理している桁の整数値GR4
その桁の値(桁を表す整数 ×
その桁の重み)DATA
調べるデータの先頭アドレス。BUFF
読み込まれた整数を文字コード として格納している先頭のアドレス。LEN
読み込んだ文字数。表
3:
サブルーチンMULTI
の汎用レジスターの内容。このサブルーチンではGR4 × GR3 → GR4
を計算して いる。レジスター 実行前 実行後
GR3
乗算する値(カウンターとして使う) 0
GR4
乗算する値 除算の結果3
! #"%$&'
( )+*,.-#/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}~P77K {Z
QY a233 ,6%06Cfg
LMNa O? ,6%0]eu++&+C#
UV` 12 eu#^7+
1aOc3d#wC&+6!P7Ce+&F7fg
nopX (d)+*#6C<#*=#*
L q`2 r++fg
s n 7t!
U:2:`
M
Yo fg+
`12 YOc3333d eu#<PCC6fg
s O( (67+;,0Z.+(#
Yo
233 ( 4+5+E+k'6C++
1 (
op L (((((
:1
`2
LMNa O ;j#E+k']0C7
UVNVY 0C6^7+
n::` M n%#^C+
`YY M a ?( adE,F0G.H#I[J
LM
Na O 0C7
UVN3 1 0C6^7+
sn ::` M ,6)+*,!
U:2:` M `YY M [SZl
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¦:Ì
図