| 例題の解説 |
・ 2進数の表示に関して確認してみよう。全体の流れは次のようになる。
0.初期設定 ループカウンタ兼表示位置に対応する定数(GR3)を15に。(16桁の2進数) 1.最下位1ビットが1か0の判定を行う。(1(=#0001)とのアンドを取る) 2.1or0の文字コードを計算。GR1に'0'の文字コードを論理加算することで1または0の文字コードを得る。 3.最下位ビットの表示位置(OUTBUF+15)に上で計算した文字コードを格納 4.DATA02を1ビット右にシフト,表示位置を一つ左に(GR3=GR3-1)。1.へDATA02が6(=110)の場合の処理過程の一部
;------------------------- ; 例4 2進数の印刷 ;------------------------ EX4 START LAD GR3,15 ;ループのカウンタの初期化(GR3 ← 15) LD GR1,DATA02 ;GR1 ← (DATA02) LOOP LAD GR2,0,GR1 ;GR1をGR2に退避 AND GR1,HEX01 ;GR1と#0001との論理積を取る ADDL GR1,ZONE ;'0'との論理加算により文字コードを得る ST GR1,OUTBUF,GR3 ;GR1を(OUTBUF+GR3)番地にストア LAD GR1,0,GR2 ;GR1を復元 SRL GR1,1 ;GR1を1ビット論理右シフト LAD GR3,-1,GR3 ;GR3 ← -1 + GR3 CPA GR3,ZERO ;GR3と0を算術比較 JPL LOOP ;GR3 > 0 ならLOOPへ JZE LOOP ;GR3 = 0 ならLOOPへ OUT OUTBUF,OUTLEN ;文字を出力 RET DATA02 DC 25 ;←適当に変えてみる HEX01 DC #0001 ZONE DC '0' ZERO DC 0 OUTBUF DS 16 OUTLEN DC 16 END
・ 10進数は?
10進数は上二つの方法はとれないので,次のように考える。
1.GR1(=DATA10)から10000を何回引くと負になるかを求める。n回で負になったらそのnが万の位の値 2.nの文字コードを適当な位置に設定 3.GR1は-????という4桁(正確には4桁以下)の負の数になっているので10000を足し,4桁の正の数にする。 4.引く数を1000,100,10,1に変えて上記の手順を繰り返す。※2進数,16進数の場合は下位の桁から順に求めていたが,10進数の場合には上位桁から求めている点に注意する。;---------------------- ; 例6 10進数の印刷 ;---------------------- EX6 START LD GR1,DATA10 ;データをGR1にセット LAD GR3,0 ;文字列を数えるカウンタ LOOP1 LAD GR2,-1 ;商の設定 LOOP2 LAD GR2,1,GR2 ;GR2 ← 1 + GR2 SUBA GR1,C10X,GR3 ;GR1 ← (GR1)-(C10X+GR3) JPL LOOP2 ;減算結果が >0 ならばLOOP2へ JZE LOOP2 ;減算結果が =0 ならばLOOP2へ ADDA GR1,C10X,GR3 ;GR1が負になっているので(C10X + GR3)番地のデータを加算 ADDL GR2,ZONE ;GR2と'0'との論理加算により文字コードを得る ST GR2,OUTBUF,GR3 ;GR2を(OUTBUF+GR3)番地にストア LAD GR3,1,GR3 ;GR3 ← 1 + GR3 CPA GR3,F5 ;GR3と5を算術比較 JMI LOOP1 ;GR3 < 0 ならLOOP1へ OUT OUTBUF,OUTLEN ;文字を出力 RET DATA10 DC 23542 ;←適当に変えてみる C10X DC 10000,1000,100,10,1 ;連続領域 ZONE DC '0' OUTBUF DS 5 OUTLEN DC 5 F5 DC 5 END