例題 (第2回目)

次の3つのプログラムを実行し,動作確認をせよ。

   例題4 2進数の印刷

DATA02番地に記憶されているデータを2進数で印刷しなさい。

;------------------------
; 例4 2進数の印刷
;------------------------
EX4	START
	LAD	GR3,15          ;ループのカウンタの初期化(GR3←15 (16桁の2進数だから))
	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              ;16個の領域を確保
OUTLEN	DC	16              ;出力する文字列の長さ16
	END
   例題5 8進数の印刷

DATA08番地に記憶されているデータを8進数で印刷しなさい。

;----------------------
; 例5 8進数の印刷
;----------------------
EX5	START
	LAD	GR3,5          ;ループのカウンタの初期化(GR3←5)
	LD	GR1,DATA08      ;GR1 ← (DATA08)
LOOP	LAD	GR2,0,GR1       ;GR1をGR2に退避
	AND	GR1,HEX07       ;GR1と#0007との論理積を取る
	ADDL	GR1,ZONE        ;'0'との論理加算により文字コードを得る
	ST	GR1,OUTBUF,GR3  ;GR1を(OUTBUF+GR3)番地にストア
	LAD	GR1,0,GR2       ;GR1を復元
	SRL	GR1,3           ;GR1を3ビット論理右シフト
	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
DATA08	DC	33              ;←適当に変えてみる
HEX07	DC	#0007
ZONE	DC	'0'
ZERO	DC	0
OUTBUF	DS	6               ;6個の領域を確保
OUTLEN	DC	6               ;出力する文字列の長さ6
	END	
   例題6 10進数の印刷

DATA10番地に記憶されている正整数のデータを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	

 練習課題

 例題を参考にプログラムを作成せよ。

 

   必須課題 16進数の印刷

例題4のプログラムを参考にして,16進数を印刷するプログラムを作成せよ。また,Loop のデクリメントについて,どのように行われているかを説明せよ。

 ヒント:2進数表示からの主な変更は次の3点     

   必須課題 桁区切り

1. 文字コードについて説明せよ。

2. 例題6のプログラムに手を加えて3けたごとにコンマを(01,234のように)打つようにせよ。

3. Loop のインクリメントについて,どのように行われているかを説明せよ。